我想收集PostgreSQL中索引的统计信息
我找到了一种方法来收集诸如索引扫描次数、索引大小等统计信息。这是一个查询:
SELECT
current_database() AS datname,
t.schemaname,
t.tablename,
psai.indexrelname AS index_name,
pg_relation_size(i.indexrelid) AS index_size,
CASE WHEN i.indisunique THEN 1 ELSE 0 END AS "unique",
psai.idx_scan AS number_of_scans,
psai.idx_tup_read AS tuples_read,
psai.idx_tup_fetch AS tuples_fetched
FROM
pg_tables t
LEFT JOIN pg_class c ON t.tablename = c.relname
LEFT JOIN pg_index i ON c.oid = i.indrelid
LEFT JOIN pg_stat_all_indexes psai ON i.indexrelid = psai.indexrelid
WHERE
t.schemaname NOT IN ('pg_catalog', 'information_schema')
ORDER BY 1, 2;
然而,我不知道如何收集索引的最后使用日期。这在PostgreSQL中可能吗?
这是不可能的。
如果你想知道一个索引是否在下周使用,你可以看看现在和一周后的pg_stat_all_indexes.idx_scan
,看看这个数字是否增加了。监控系统非常适合这一点。
pg_stat_all_indexes视图中的每一行都包含一个索引的信息。此视图中没有指示解析索引的最近日期和时间的列。
但是,可以重置统计信息:pg_stat_reset()
如果idx_scan字段变为>0.