REINDEX im laufenden Betrieb

Fragen und Probleme rund um die Abfragespache SQL.
Antworten
chkaufmann
Benutzer
Beiträge: 32
Registriert: Di 8. Mai 2018, 08:38

REINDEX im laufenden Betrieb

Beitrag von chkaufmann » Di 30. Okt 2018, 07:58

Auf einer Tabelle mit ca. 170 Millionen Datensätze habe ich zwei Indexe. Diese belegen je ca. 5GB. Da ich ziemlich viele Updates mache, hat einer der Indexe ziemlich viel "Bloat" (ca. 1GB, avg_leaf_desnity: 61.21, leaf_fragmentation: 20.77).

Gibt es eine Möglichkeit ein REINDEX zu machen so das weiter von der Tabelle gelesen werden kann? Ich habe eine Website (nur Lesezugriff) die ich nicht während dem Prozess offline nehmen möchte.

Oder gibt es andere Möglichkeiten den Index aufzuräumen?

Christian

castorp
Erfahrener Benutzer
Beiträge: 1141
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: REINDEX im laufenden Betrieb

Beitrag von castorp » Di 30. Okt 2018, 08:14

Wenn Du genug Plattenplatz hast, kannst Du einen zweiten Index mit der gleichen Spaltenliste aber anderem Namen anlegen zusammen mit der Option CONCURRENTLY. Wenn das fertig ist, kannst Du den alten Index einfach mit DROP INDEX löschen.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

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

Re: REINDEX im laufenden Betrieb

Beitrag von akretschmer » Di 30. Okt 2018, 08:26

Nachtrag zu castorp: in aktuellen Versionen kannst Du das DROP INDEX auch concurrently machen.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

Re: REINDEX im laufenden Betrieb

Beitrag von chkaufmann » Di 30. Okt 2018, 10:08

Danke. Das klappt so tip top. Im Log sehe ich jetzt zwei neue Einträge:

LOG: Checkpoints passieren zu oft (alle 29 Sekunden)
TIPP: Erhöhen Sie eventuell den Konfigurationsparameter "max_wal_size".

Das REINDEX dauerte etwa 12 Minuten. max_wal_size ist bei mir auf 2GB. Mein Server hat 8GB RAM. Hat das ein Zusammenhang und sollte ich den Wert für max_wal_size ändern?

Christian

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

Re: REINDEX im laufenden Betrieb

Beitrag von akretschmer » Di 30. Okt 2018, 17:34

wenn das nur bei dieser opertaion passiert, kannst das auch ignorieren. Es wird halt relativ viel transaction log geschrieben, was dann dazu führt, oft ein checkpoint ausgeführt werden muß.

Machst Du nun Reindex oder erstellst die Indexe wie vorgeschlagen neu?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

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

Re: REINDEX im laufenden Betrieb

Beitrag von chkaufmann » Di 30. Okt 2018, 17:45

Zum Testen habe ich die Indexe neu erstellt und dann den alten gelöscht (DROP CONCURRENTLY). Die Website lief während dieser Zeit ohne Probleme. Ich werde das für die Indices dieser Tabelle regelmässig ausführen.

Christian

Antworten