是否有方法监视在PostgreSQL中创建索引的过程。我正在一个大表上创建一个索引,我想看看这种情况发生的速度有多快。
有办法监视这件事吗?
发布于 2019-09-27 13:53:06
这是可能的,因为PostgreSQL 12发布(发布于2019年10月3日)。
SELECT
now()::TIME(0),
a.query,
p.phase,
round(p.blocks_done / p.blocks_total::numeric * 100, 2) AS "% done",
p.blocks_total,
p.blocks_done,
p.tuples_total,
p.tuples_done,
ai.schemaname,
ai.relname,
ai.indexrelname
FROM pg_stat_progress_create_index p
JOIN pg_stat_activity a ON p.pid = a.pid
LEFT JOIN pg_stat_all_indexes ai on ai.relid = p.relid AND ai.indexrelid = p.index_relid;这可以用于检查在REINDEX DATABASE命令上正在重建的索引。
详细信息请参见pg的医生_状态_进展_创建_索引视图和depesz的博客文章。
发布于 2017-01-23 18:38:50
根据Postgres Wiki索引维护页面,您可以使用以下方法查找所有索引的当前状态:
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;列num_rows指示索引覆盖了多少行,index_size将随着索引的生成而增长。
发布于 2012-01-28 15:15:26
所以,没有什么好的方法可以在12之前完成,但是如果你真的需要知道.首先,根据数据大小*行+开销计算索引应该占用的空间。然后,您可以使用pfiles或pg构架之类的东西来查找在$PGDATA中正在写入的文件;如果索引超过1GB,它将是一系列像nnnn.n这样的文件,其中第一组n是一致的,最后n为每个GB文件的增量。一旦您知道创建了多少个文件,您就可以观察文件的增长,并计算出离完成有多近。粗略估计,但也许会有帮助。
https://dba.stackexchange.com/questions/11329
复制相似问题