我有一个总数据大小为 115GB 的 Postgres 数据库。服务器有~60GB 的内存。索引缓存命中率保持在 99% 以上,但表缓存命中率已降至约 97%。
我试图确定是否有我们正在制作的特定查询或访问模式导致下降。如果是这样,我们也许能够优化应用程序。
我使用以下查询来识别命中率低的表...
SELECT relname,
CASE (sum(heap_blks_hit) + sum(heap_blks_read))
WHEN 0 THEN 1
ELSE sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read))
END as hitrate,
pg_size_pretty(sum(heap_blks_hit) + sum(heap_blks_read)) AS total_read,
pg_size_pretty(sum(heap_blks_read)) AS total_miss
FROM pg_statio_user_tables
GROUP BY relname
ORDER BY hitrate
Run Code Online (Sandbox Code Playgroud)
我不知道从这里去哪里。有没有办法跟踪某些查询是否通常会为我知道的表产生未命中数?
该pg_stat_statements
扩展完全符合您的要求,为每个语句提供块命中和未命中。
然而,我通常认为这些信息没有多大用处。许多块未命中实际上是由文件系统缓存提供的,而不是实际从磁盘读取的。PostgreSQL 没有提供直接的方法来辨别这些类型的未命中。
我认为最好的办法是打开电源track_io_timing
,然后查看服务这些未命中所花费的时间,而不是原始未命中数。
归档时间: |
|
查看次数: |
1083 次 |
最近记录: |