Archivierungsoptionen: Datastore verbraucht viel Speicherplatz.

  • Mein datastore wächst stetig und hat mittlerweile über 25GB erreicht. Dabei verbrauchen die Metriken in der Tabelle stat den Großteil des Speicherplatzes, da sie ja schließlich am fein granularsten aufgelöst sind. Ich habe den Parameter pool_archive_stats in server/main.conf gefunden, aber dieser scheint nur für das Füllen der Werte in stat_hourly zuständig zu sein. Gibt es eine Möglichkeit zur Archivierung der Metriken, bei der alte Werte aus der stat Tabelle aufräumt werden. Solch eine Archivierung könnte ja parametrisiert sein, um auch längere Zeiträume zu behalten, je nach individuellem Geschmack.

    Falls solch eine Archivierung nicht vorhanden oder nicht geplant ist, würde ich wohl zu einem cronjob greifen, der regelmäßig anhand des Attr. time die Tabellen stat und stat_hourly leert.

    Vielen Dank im Voraus für alle Tipps!

    • Offizieller Beitrag

    Hallo Shappy,

    in der WebGUI gibt es unter den System Optionen dafür die Parameter

    • Metric history = Tabelle stat
    • Aggregated metric history = Tabelle stat_hourly

    Beide Tabellen sind partitioniert und es wird pro Tag eine Partition angelegt. Standardmäßig steht die Aufbewahrungszeit für Metriken auf 365 Tage.

    Mein Tipp ist das du dir zunächst anschaust wie groß die einzelnen Partitionen der Tabellen sind:

    SQL
    SELECT
     c.relname AS partition,
     pg_size_pretty(pg_total_relation_size(c.oid)) AS total,
     pg_size_pretty(pg_relation_size(c.oid)) AS heap,
     pg_size_pretty(pg_total_relation_size(c.reltoastrelid)) AS toast_total
    FROM pg_class c
    JOIN pg_inherits i ON i.inhrelid = c.oid
    JOIN pg_class p ON p.oid = i.inhparent
    WHERE p.relname = 'stat'
    ORDER BY pg_total_relation_size(c.oid) DESC;

    Dann rechne dir so ungefähr aus wieviel Tage du aufbewahren möchtest und passe die Aufbewahrungszeit an. Ältere Partitionen werden dann automatisch vom DB-Manager entfernt, aber achtung, der Job zum Löschen von Partionen läuft nur 2 Mal pro Tag.

    Beispiel zur Berechnung: wenn die Partitionen ungefähr 3GB groß sind und wenn du nur 25GB Disk Space für Metriken nutzen möchtest, dann solltest du dementsprechend die Historie auf 8 Tage setzen, eventuell sogar kleiner, weil natürlich auch die aggregierten Daten Platz benötigen.

    Eine weitere Möglichkeit wäre die Datenbank für den Datastore auf einen eigenen Server mit viel Disk Space zu legen.

    Falls du das entfernen der Partitionen beschleunigen möchtest, dann kannst du entweder selbst mit einem "drop" die Partionen entfernen oder - meine Empfehlung - du setzt den Job in der Datenbank zurück:

    update db_manager_job set time = 0 where name = 'delete_partition';

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!