Ich überlege, mit CLUSTER eine Tabelle nach einem Index neu anzuordnen. Ich verstehe, dass diese Neuerstellung der Tabellendaten dazu führt, dass alle vorhandenen Indizes entweder aufgebläht oder unbrauchbar werden. Ich habe einige Anzeichen dafür gesehen, dass nach einem CLUSTER ein REINDEX erforderlich ist. Ich habe andere Referenzen gefunden, die zeigen , dass CLUSTER tut ein REINDEX. Die offizielle Dokumentation sagt überhaupt nichts darüber aus, dass REINDEX Teil von CLUSTER ist oder benötigt wird (obwohl es ratsam ist, ANALYZE nach dem CLUSTER auszuführen).
Kann jemand definitiv sagen (dh mit irgendeiner Art von Referenz zu offiziellen Dokumenten), ob nach einem CLUSTER ein REINDEX erforderlich ist oder nicht?
postgresql
BAUM
quelle
quelle
cluster
Verschiebt die Zeilen, sodass die Indexinformationen trotzdem aktualisiert werden müssen.Antworten:
Sie müssen nicht neu indizieren, da dies
CLUSTER
effektiv für Sie erledigt wird.Insbesondere
CLUSTER
sperrt die Quelltabelle dann erstellt eine neue Kopie davon nach dem Zielindex bestellt. Es erstellt Indizes für die neue Kopie und ersetzt dann die alte Tabelle und die Indizes durch die neuen.Beachten Sie, dass dies auch für
VACUUM FULL
9.0+ gilt.Wenn Sie Diskussionen gesehen haben, die darauf hindeuten, dass
CLUSTER
Bloats Indizes sind, könnten es Leute sein, die davon ausgehen, dass diesCLUSTER
wie vor 9.0 funktioniertVACUUM FULL
. Möglicherweise werden auch Diskussionen angezeigt und falsch interpretiert, in denen aufgedunsener Index erwähnt wird, der durch die alteVACUUM FULL
Implementierung verursacht wurde , undCLUSTER
als Alternative vorgeschlagen .Dies ist in der Dokumentation impliziert :
Was es nicht sagt, sondern sollte, ist, dass diese temporären Kopien dann die Originaltabelle ersetzen . (Bold Mine).
quelle
CLUSTER
sich nicht die Indizes neu zu schreiben, und die Untersuchung der tatsächlichen Dateien inbase/
zeigen eindeutig neuerelfilenode
s. Anscheinend machen Sie sich Sorgen über Probleme, die Sie noch nicht haben.Ich bin mit a_horse_with_no_name dazu: Sie müssen die Indizes nicht neu erstellen. Abgesehen davon, dass die
CLUSTER
Dokumentation dies nicht erwähnt, können wir dieREINDEX
Seite auch weiter konsultieren :Klar,
CLUSTER
fällt in keinen dieser Fälle.Und es gibt einen kleinen Satz in den
CLUSTER
Dokumenten:Dies lässt darauf schließen, dass die Indizes ebenso wie die Tabelle selbst während des Vorgangs neu angeordnet werden - auf diese Weise wird die Neuindizierung unbrauchbar.
quelle
Es wurde eine Referenz im Abschnitt " Wiederherstellen des Speicherplatzes " gefunden.
quelle
Wenn Sie alle Antworten analysieren, ist meiner Meinung nach der richtige Weg, dies zu tun, die Neuindizierung VOR dem Cluster. Da die Dokumentation nicht angibt, ob Cluster einen Neuindex durchführen oder nicht, und nur eine Kopie des Index, sortiert oder nicht, wird ein indexierter Index meiner Meinung nach zu einer besseren Cluster-Tabelle führen. Danach beendet eine Analyse den Job. Ein vor allen Dingen volles Vakuum scheint nutzlos zu sein, es sei denn, Cluster und / oder Reindex geben keine toten Tupel frei
quelle
CLUSTER
undVACUUM FULL
produziert einen brandneuen physischen Tisch - es kann einfach keinen Toten danach geben. Der von der alten Kopie belegte Speicherplatz wird am Ende des Vorgangs freigegeben.