Introduction
Este documento descreve como manter o banco de dados PostgreSQL (DB) em pacote limpo para uma instalação de Cisco Energy Management (CEM) mais longa.
Informações de Apoio
O CEM armazena os dados coletados dos ativos em um banco de dados PostgreSQL. O DB é instalado junto com o CEM. Depois de usar o CEM por um período mais longo, muitos dados são armazenados no banco de dados que talvez não sejam mais necessários para o sistema ou para o usuário.
Com o tempo, isso pode fazer com que o banco de dados cresça muito, o que tem impacto no uso do espaço em disco e no desempenho em geral. Este documento ajuda a entender como você pode manter o BD em um estado limpo executando alguns scripts de lote.
Problema
O CEM, a partir da versão 5, não tem um mecanismo de limpeza pronto para uso, portanto, pode ser bom limpar o DB manualmente regularmente. Os trabalhos em lote de exemplo que você pode encontrar aqui podem ser executados regularmente com uma tarefa agendada no Windows.
Solução
Limpar dados por hora
O MCE agrega (hora, dia, mês, ano) os dados recolhidos numa base regular. É possível excluir dados de origem mais antigos (por exemplo, por hora), que são mais antigos que um período para o qual esse nível de detalhes não é mais relevante para o usuário. Quanto mais antigos forem os dados, menos relevante será manter os dados detalhados no banco de dados.
Quando você exclui esses dados por hora, é que não é mais possível gerar relatórios com granularidade por hora para o período em que os dados são excluídos. Depende da necessidade, isso geralmente não é um problema para dados mais antigos.
Você pode usar este script para executar esta ação:
@echo off
REM +++++++++++++++ CONFIG ++++++++++++++++
REM set days to keep hourly data
set KEEPDAYS=365
REM set password for DB auth
set PGPASSWORD=zzzzzzzzz
REM set tenant id
set tenant=t_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
REM set psql.exe location
set pgbin="C:\Program Files (x86)\Cisco Energy Management\pgsql\bin"
REM +++++++++++++ END CONFIG ++++++++++++++
REM list of metric suffixes
set suffixes=(power,carbon,devicestatus,power_cost,powerdemand,utilization)
REM get current date/time for logfile
for /f "delims=" %%# in ('powershell get-date -format "{yyyy-MM-dd_HH-mm}"') do @set logtimestamp=%%#
REM calculate oldest date that should be kept in DB
for /f "delims=" %%# in ('powershell get-date -date "$(get-date).adddays(-%KEEPDAYS%)" -format "{yyyyMMdd}"') do @set dbdate=%%#
echo Starting hourly data cleanup on %logtimestamp% >%logtimestamp%.txt
REM remove tmp file if it exists already
if exist %TEMP%\cemscleantmp.txt del /f %TEMP%\cemscleantmp.txt
REM find and store tables that need to be deleted in tmp file
for %%s in %suffixes% do (
%pgbin%\psql.exe -q -t -A -w -U postgres -d cloud -c "SELECT table_name FROM information_schema.tables where table_name < 'd%dbdate%_%%s' AND table_name LIKE 'd2%%_%%s';">>%TEMP%\cemscleantmp.txt
)
REM drop that table
for /f "tokens=*" %%t in (%TEMP%\cemscleantmp.txt) do (
echo -- dropping table %tenant%.%%t>>%logtimestamp%.txt
%pgbin%\psql.exe -w -U postgres -d cloud -c "DROP TABLE IF EXISTS %tenant%.%%t CASCADE">>%logtimestamp%.txt 2>&1
)
REM clean tmp file
if exist %TEMP%\cemscleantmp.txt del /f %TEMP%\cemscleantmp.txt
REM end logfile
for /f "delims=" %%# in ('powershell get-date -format "{yyyy-MM-dd_HH-mm}"') do @set endtimestamp=%%#
echo Finished hourly data cleanup on %endtimestamp% >>%logtimestamp%.txt
A primeira parte do script precisa ser adaptada ao ambiente. Esses valores devem ser alterados:
- MANUTENÇÕES: número de dias em que os dados por hora devem ser mantidos (por exemplo: KEEPDAYS=365 mantém detalhes por hora de um ano e exclui detalhes por hora com mais de um ano)
- SENHA: a senha postgres-user do banco de dados
- locatário: o ID do espaço usado para esta instalação (pode ser encontrado no EnergyWiseProcessor.log)
- pgbin: local de instalação dos binários PostgreSQL
Limpar o Objetstore Journal
O repositório de objetos do CEM contém todos os objetos relevantes para o CEM e seu status mais recente. Para poder examinar o histórico e auditar o status de todos os objetos ou até mesmo reverter para um ponto anterior no tempo, o CEM mantém um diário de todas as ações executadas nos objetos no repositório de objetos. Essas informações são úteis, mas tornam-se menos relevantes com o tempo. Assim como nos detalhes por hora, é uma boa ideia limpar entradas antigas no diário.
Você pode usar este script para executar esta ação:
@echo off
REM +++++++++++++++ CONFIG ++++++++++++++++
REM set days to keep journal data
set KEEPDAYS=365
REM set password for DB auth
set PGPASSWORD=xxxyyyzzz
REM set tenant id
set tenant=t_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
REM set psql.exe location
set pgbin="C:\Program Files (x86)\Cisco Energy Management\pgsql\bin"
REM +++++++++++++ END CONFIG ++++++++++++++
REM get current date/time for logfile
for /f "delims=" %%# in ('powershell get-date -format "{yyyy-MM-dd_HH-mm}"') do @set logtimestamp=%%#
REM calculate oldest date that should be kept in DB
for /f "delims=" %%# in ('powershell get-date -date "$(get-date).adddays(-%KEEPDAYS%)" -format "{yyyy-MM-dd}"') do @set dbdate=%%#
echo Starting jx_objectstore_journal cleanup script on %logtimestamp% >%logtimestamp%.txt
REM clean journal
%pgbin%\psql.exe -w -U postgres -d cloud -c "DELETE FROM %tenant%.jx_objectstore_journal where start <= '%dbdate%'" >>%logtimestamp%.txt 2>&1
REM end logfile
for /f "delims=" %%# in ('powershell get-date -format "{yyyy-MM-dd_HH-mm}"') do @set endtimestamp=%%#
echo Finished jx_objectstore_journal cleanup script on %endtimestamp% >>%logtimestamp%.txt
A primeira parte do script precisa ser adaptada ao ambiente. Esses valores devem ser alterados:
- MANUTENÇÕES: número de dias em que os dados do diário do repositório de objetos devem ser mantidos (por exemplo: KEEPDAYS=365 mantém os dados do diário por um ano e exclui os dados do diário com mais de um ano)
- SENHA: a senha postgres-user do banco de dados
- locatário: o ID do espaço usado para esta instalação (pode ser encontrado no EnergyWiseProcessor.log)
- pgbin: local de instalação dos binários PostgreSQL
Se você executar esses scripts regularmente, ele manterá o BD em um estado saudável e definitivamente melhorará o desempenho (por exemplo: velocidades de autovácuo, solicitações de catálogo...).