mam*_*aye 10 postgresql view materialized-view
我想收集数据库中运行次数最多的查询的统计信息。
为此,我需要知道如何跟踪查询,以便我可以创建视图或物化视图来缓存最高运行查询的结果,因为我有一个大数据库。
小智 11
正如有人在评论中所说,pg_stat_statements是获取统计信息的方式。把它放到你的postgresql.conf
:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
Run Code Online (Sandbox Code Playgroud)
然后运行这个查询:
CREATE EXTENSION pg_stat_statements;
Run Code Online (Sandbox Code Playgroud)
之后,此示例查询(从上面链接的文档中复制)将为您提供来自所有数据库的5 个顶级查询的统计信息:
SELECT query, calls, total_time, rows,
100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
如果你想要单个数据库的结果,你需要过滤dbid
你可以pg_database
通过数据库名称获取的结果。将此 WHERE 子句添加到上面的查询中:
WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')
Run Code Online (Sandbox Code Playgroud)
你也可以加入。
当您对此进行测试时,最好将查询排除在 stats/schema 表本身,例如:
AND query not similar to '%( pg_|information_schema)%'
Run Code Online (Sandbox Code Playgroud)
有许多免费和商业工具可以帮助您可视化数据。