Introduction
Ce document décrit comment conserver la base de données PostgreSQL (DB) intégrée propre pour une installation plus longue de Cisco Energy Management (CEM).
Informations générales
CEM stocke les données collectées à partir des ressources dans une base de données PostgreSQL. La base de données est installée avec CEM. Une fois que vous utilisez CEM pendant une plus longue période, beaucoup de données sont stockées dans la base de données qui n'est peut-être plus nécessaire pour le système ou l'utilisateur.
Au fil du temps, cela peut entraîner une croissance très importante de la base de données, ce qui a un impact sur l'utilisation de l'espace disque et les performances en général. Ce document vous aide à comprendre comment maintenir la base de données dans un état propre en exécutant quelques scripts de lot.
Problème
CEM, à partir de la version 5, n'a pas de mécanisme de nettoyage prêt à l'emploi, il peut donc être bon de nettoyer la base de données manuellement de façon régulière. Les exemples de travaux par lots que vous pouvez trouver ici peuvent être exécutés régulièrement avec une tâche planifiée dans Windows.
Solution
Nettoyer les données horaires
CEM regroupe régulièrement les données collectées (toutes les heures, tous les jours, tous les mois et tous les ans). Il est possible de supprimer des données source anciennes (par exemple, toutes les heures), qui sont plus anciennes qu'une période pour laquelle ce niveau de détail n'est plus pertinent pour l'utilisateur. Plus les données sont anciennes, moins il devient pertinent de conserver des données détaillées dans la base de données.
Lorsque vous supprimez ces données horaires, il n'est plus possible de générer des rapports avec une granularité horaire pour la période pendant laquelle les données sont supprimées. Cela dépend du besoin, ce n'est généralement pas un problème pour les données plus anciennes.
Vous pouvez utiliser ce script pour effectuer cette action :
@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
La première partie du script doit être adaptée à l'environnement. Ces valeurs doivent être modifiées :
- JOURS DE CONSERVATION : nombre de jours pendant lesquels les données horaires doivent être conservées (par exemple : KEEPDAYS=365 conserve les détails horaires pendant un an et supprime les détails horaires de plus d'un an)
- MOT DE PASSE : mot de passe postgres-user pour la base de données
- locataire : l'ID de locataire utilisé pour cette installation (se trouve dans le fichier EnergyWiseProcessor.log)
- pgbin : emplacement d'installation des binaires PostgreSQL
Nettoyer le journal de magasin d'objets
Le magasin d'objets CEM contient tous les objets pertinents pour CEM et leur dernier état. Pour pouvoir consulter l'historique et vérifier l'état de tous les objets ou même revenir à un point antérieur dans le temps, CEM conserve un journal de toutes les actions effectuées sur les objets dans le magasin d'objets. Ces informations sont utiles mais deviennent moins pertinentes au fil du temps. Comme pour les détails horaires, il est recommandé de nettoyer les anciennes entrées du journal.
Vous pouvez utiliser ce script pour effectuer cette action :
@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
La première partie du script doit être adaptée à l'environnement. Ces valeurs doivent être modifiées :
- JOURS DE CONSERVATION : nombre de jours pendant lesquels les données du journal du magasin d'objets doivent être conservées (par exemple : KEEPDAYS=365 conserve les données de journal pendant un an et supprime les données de journal antérieures à un an)
- MOT DE PASSE : mot de passe postgres-user pour la base de données
- locataire : l'ID de locataire utilisé pour cette installation (se trouve dans le fichier EnergyWiseProcessor.log)
- pgbin : emplacement d'installation des binaires PostgreSQL
Si vous exécutez régulièrement ces scripts, ils maintiendront la base de données dans un état sain et amélioreront définitivement les performances (par exemple : vitesses de vide automatique, demandes de catalogue...).