답변:
Postgres Wiki의 Index Maintenance 페이지 에 따르면 다음을 통해 모든 인덱스의 현재 상태를 확인할 수 있습니다.
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
색인이 작성 될 때 증가합니다.
따라서 좋은 방법 은 없지만 실제로 알아야 할 경우 먼저 데이터 크기 * 행 + 오버 헤드를 기준으로 인덱스가 차지하는 공간의 양을 계산하십시오. 그런 다음 pfiles 또는 pgtruss와 같은 것을 사용하여 $ PGDATA 내에 기록중인 파일을 찾을 수 있습니다. 인덱스가 1GB를 초과하면 nnnnn.n과 같은 일련의 파일이됩니다. 여기서 n의 첫 번째 세트는 일관되며 각 GB 파일의 마지막 n은 증가합니다. 생성 된 파일 수를 알고 나면 증가를보고 마무리에 얼마나 근접했는지 파악할 수 있습니다. 대략적인 추정이지만 도움이 될 수 있습니다.
다가오는 PostgreSQL 12 릴리스 (2019 년 10 월 3 일 릴리스)에서 가능할 것입니다.
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;
자세한 내용 은 pg_stat_progress_create_index보기 및 depesz의 블로그 게시물에 대한 문서를 참조 하십시오.