Inhalt pgstattuple()

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

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.

Ich habe es nicht ganz begriffen. Hier ein Beispiel:

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

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

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.