User Tools

Site Tools


wiki:postgres:pg_tune_kurs_autovacuum

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

wiki:postgres:pg_tune_kurs_autovacuum [2017/09/28 12:21] (current)
Line 1: Line 1:
 +====== Autovacuum ======
 +===== Vacuum =====
  
 +**postgresql.conf**
 +
 +  Defaulteinstellungen:​
 +  ​
 +  #​autovacuum_naptime = 1min
 +  #​autovacuum_max_workers = 3
 +  #​autovacuum_vacuum_scale_factor = 0.2
 +
 +Dies bedeutet: **Jede Minute** (naptime = 1min) wird geprüft, **maximal** laufen **3** Vacuumprozesse = auf 3 Tabellen (max_workers = 3) wenn sich **mindestens 20%**(scale_factor = 0.2) der Daten geändert haben.
 +
 +===== Analyze =====
 +Erneuert die Optimizer Statistik (pg_stats wird neu geschrieben).\\
 +Siehe auch [[http://​www.postgresql.org/​docs/​9.0/​static/​runtime-config-query.html|Query Planning]].\\
 +
 +  Defaulteinstellungen in postgresql.conf
 +  ​
 +  #​autovacuum_analyze_scale_factor = 0.1
 +
 +  #Statistik hinaufsetzen (default = 100 z.b. auf 1000) bedingt ein breiteres (feiner aufgelöstes Histogramm).
 +  #​default_statistics_target = 100
 +  oder individuell pro Tabelle
 +  ALTER TABLE SET STATISTICS ...
 +
 +==== Transaction ID's ====
 +
 +  #​autovacuum_freeze_max_age = 200000000 ​ #nur wenn 200Mio Transaktionen alt ist
 +
 +Transaction ID's sind zyklisch, um einem Integer Overflow zu verhindern (sonst wären nur 1Mrd Transaction ID's möglich).
 +z.B. bei 200Mio Vacuum 200Mio wird neuer Nullpunkt. Gilt nur für Schreiboperationen;​ //​Leseoperationen brauchen keine Transaction ID's (bekommen eine virtuelle Transaction ID)//.
 +\\
 +
 +Visibility Map (VM) -> Vacuum durchsucht nur mehr dort wo geändert wurde (in der Regel), früher wurde die ganze Tabelle durchforstet. Vacuum räumt eine Tabelle auf -> und alle Abfragen gehen in die Knie, da die Disk (über)belastet ist.\\
 +
 +  #​autovacuum_vacuum_cost_delay = 20ms
 +  #​autovacuum_vacuum_cost_limit = -1  # bedeutet, dass vacuum_cost_limit für Autovacuum übernommen wird
 +  #​autovacuum_vacuum_threshold = 50   # erst wenn 50 Zeilen in der Tabelle sind, soll Autovacuum gestartet werden
 +                                      # Es wäre ja sinnlos vacuum auf eine Tabelle mit z.B. nur 2 Zeilen auszuführen.
 +  ​
 +  #​vacuum_cost_page_hit = 1
 +  #​vacuum_cost_page_miss = 10
 +  #​vacuum_cost_page_dirty = 20
 +  #​vacuum_cost_limit = 200
 +
 +z.B.: Die erste Page bekommt einen Strafpunkt für einen "Page hit" (vacuum_cost_page_hit),​ die zweite Page 10 Strafpunkte für einen "Page miss"​(vacuum_cost_page_miss),​ die dritte Page bekommt 20 Strafpunkte für einen "Dirty Buffer"​(vacuum_cost_page_dirty). Wenn auf diese Weise 200 Strafpunkte (vacuum_cost_limit) erreicht sind wird noch eine bestimmte Zeit lang gewartet (autovacuum_vacuum_cost_delay).
 +
 +  test# ALTER TABLE a SET(     # und 2x die TAB-Taste drücken (die Tabelle muss es nicht geben)
 +                                # gibt alle möglichen Parameter aus, die pro Tabelle gesetzt werden können.
 +  test# ALTER TABLE t_data SET(autovacuum_enabled = off);  #schaltet Autovacuum für eine bestimmte Tabelle aus.
wiki/postgres/pg_tune_kurs_autovacuum.txt · Last modified: 2017/09/28 12:21 (external edit)