我想做类似于http://www.bestbrains.dk/Blog/2010/03/25/HowToAssertThatYourSQLDoesNotDoFullTableScans.aspx中描述的事情,但为此我需要 postgres 来跟踪任何全表扫描做。postgres有这样的东西吗?
问问题
3865 次
2 回答
6
查看pg_stat_get_numscans(oid)
(表上的顺序扫描次数)和统计信息收集器(一般而言)。
于 2010-03-26T15:23:58.853 回答
1
我使用以下查询。如果索引使用率 > 99 我很好。所以我担心任何超过 7000 行且索引使用量少于 99 的表。
SELECT
relname table_name,
idx_scan index_scan,
seq_scan table_scan,
100*idx_scan / (seq_scan + idx_scan) index_usage,
n_live_tup rows_in_table
FROM
pg_stat_user_tables
WHERE
seq_scan + idx_scan > 0 and 100 * idx_scan / (seq_scan + idx_scan) < 99 and
n_live_tup > 70000
ORDER BY
4 DESC;
当然,您需要了解查询及其计划。有时表扫描可以更优化。
于 2021-11-22T14:20:44.453 回答