Inhalt pgstattuple()

Allgemeines zu PostgreSQL.
Antworten
chkaufmann
Neuer Benutzer
Beiträge: 21
Registriert: Di 8. Mai 2018, 08:38

Inhalt pgstattuple()

Beitrag von chkaufmann » So 21. Okt 2018, 14:05

Ich versuche den Inhalt der Rückgabewerte dieser Funktion zu verstehen. Aus der Dokumentation:

tuple_percent : Percentage of live tuples
dead_tuple_percent : Percentage of dead tuples

Wenn ich die zwei Werte zusammenzähle, sind das bei mir nie 100%. Was gibt es den sonst noch für Einträge?

Auch ist mir nicht klar, wenn ich z.B. weniger als 1% bei dead_tuple_percent habe, warum es dann free_percent von 17% gibt.

Ab wieviel "bloat" schlägt da welcher Wert auf die Performance?

Christian

akretschmer
Erfahrener Benutzer
Beiträge: 7513
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Inhalt pgstattuple()

Beitrag von akretschmer » So 21. Okt 2018, 15:18

gelöscht, aber noch nicht von Vacuum als solches markiert.

Ab wieviel % Bloat zum Problem wird kann man nicht so pauschal sagen. 10-20% sind i.d.R. aber normal und kein Problem.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

chkaufmann
Neuer Benutzer
Beiträge: 21
Registriert: Di 8. Mai 2018, 08:38

Re: Inhalt pgstattuple()

Beitrag von chkaufmann » Mo 22. Okt 2018, 07:29

Ich habe es nicht ganz begriffen. Hier ein Beispiel:

Code: Alles auswählen

table_len = 754'106'368
tuple_count = 9'674'509
tuple_len = 541'772'504
tuple_percent = 71.84
dead_tuple_count = 1'543
dead_tuple_len = 86'408
dead_tuple_percent = 0.01
free_space = 133'036'776
free_percent = 17.64
Diese Tabelle hat knapp 10 Millionen Datensätze und braucht 754MB Speicher. Soweit ist mir klar.

Ich lösche jetzt ein Datensatz, dann wäre tuple_count eins kleiner, dead_tuple_count eins grösser oder?

Dann mache ich ein VACUUM. Bei den Indices werden 1119 Zeilenversionen entfernt. Und für die Tabelle habe ich folgende Meldung

Code: Alles auswählen

INFO:  »rankingclub«: 305 entfernbare, 484652 nicht entfernbare Zeilenversionen in 4554 von 92054 Seiten gefunden
DETAIL:  1543 tote Zeilenversionen können noch nicht entfernt werden, ältestes xmin: 115307780
Es gab 528144 unbenutzte Itemzeiger.
0 Seiten wegen Buffer-Pins übersprungen, 4490 eingefrorene Seiten.
0 Seiten sind vollkommen leer.
Wenn ich dann wieder ein pgstattuple() mache, sind die obigen Werte unverändert. Also free_space bleibt.

Christian

akretschmer
Erfahrener Benutzer
Beiträge: 7513
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Inhalt pgstattuple()

Beitrag von akretschmer » Mo 22. Okt 2018, 09:29

du hast offenbar noch eine Transaktion laufen (115307780), wegen der Vacuum den Platz nicht freigeben kann, das Tupel muß noch sichtbar bleiben für diese Transaktion.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Antworten