Gibt es eine Möglichkeit, den Fortschritt der Erstellung eines Index in PostgreSQL zu überwachen? Ich erstelle einen Index für eine große Tabelle und möchte sehen, wie schnell dies geschieht.
Gibt es eine Möglichkeit, dies zu überwachen?
Gibt es eine Möglichkeit, den Fortschritt der Erstellung eines Index in PostgreSQL zu überwachen? Ich erstelle einen Index für eine große Tabelle und möchte sehen, wie schnell dies geschieht.
Gibt es eine Möglichkeit, dies zu überwachen?
Antworten:
Laut der Indexpflegeseite von Postgres Wiki können Sie den aktuellen Status aller Ihrer Indizes folgendermaßen ermitteln:
SELECT
t.tablename,
indexname,
c.reltuples AS num_rows,
pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,
pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,
CASE WHEN indisunique THEN 'Y'
ELSE 'N'
END AS UNIQUE,
idx_scan AS number_of_scans,
idx_tup_read AS tuples_read,
idx_tup_fetch AS tuples_fetched
FROM pg_tables t
LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
LEFT OUTER JOIN
( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
JOIN pg_class c ON c.oid = x.indrelid
JOIN pg_class ipg ON ipg.oid = x.indexrelid
JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid )
AS foo
ON t.tablename = foo.ctablename
WHERE t.schemaname='public'
ORDER BY 1,2;
Die Spalte num_rows
gibt an, wie viele Zeilen von Ihrem Index abgedeckt werden, und index_size
wächst, wenn der Index erstellt wird.
Es gibt also keine gute Möglichkeit, dies zu tun, aber wenn Sie es wirklich wissen müssen ... berechnen Sie zuerst den Platz, den der Index einnehmen soll, basierend auf der Datengröße * Zeilen + Overhead. Sie können dann so etwas wie pfiles oder pgtruss verwenden, um die Dateien zu finden, die in $ PGDATA geschrieben werden. Wenn Ihre Indizes größer als 1 GB sind, handelt es sich um eine Reihe von Dateien wie nnnnn.n, wobei der erste Satz von n konsistent ist und die letzten n Schritte für jede GB-Datei. Sobald Sie wissen, wie viele Dateien erstellt wurden, können Sie das Wachstum beobachten und herausfinden, wie nah Sie am Ende sind. Grobe Schätzung, aber vielleicht hilft es.
Es wird in der kommenden PostgreSQL 12-Version möglich sein (sollte am 3. Oktober 2019 veröffentlicht werden).
SELECT
now()::TIME(0),
a.query,
p.phase,
p.blocks_total,
p.blocks_done,
p.tuples_total,
p.tuples_done
FROM pg_stat_progress_create_index p
JOIN pg_stat_activity a ON p.pid = a.pid;
Weitere Informationen finden Sie in den Dokumenten zur Ansicht pg_stat_progress_create_index und im Blog-Beitrag von depesz .