如何检查/知道运行次数最高的查询


9

我想收集有关数据库中运行次数最多的查询的统计信息。

为此,我需要知道如何跟踪查询,以便可以创建视图或实例化视图以缓存运行次数最高的查询的结果,因为我有一个很大的数据库。


1
在这里检查吗?
Nelz 2015年


出于好奇,有多大?另外,“最高运行”是指运行最频繁的查询还是累积最昂贵的查询?而且,从简单的角度来看,您在这方面不会遗漏任何东西。
dezso

@ dezso:主表上有30万行。最昂贵的将是优先事项,但我也想知道最常运行的。
mamesaye 2015年

正如@a_horse_with_no_name已经说的.. pg_stat_statements扩展可能就是您所需要的。
Joishi Bodio

Answers:


8

正如有人在评论中所说,pg_stat_statements是获取统计信息的方法。将其放入您的postgresql.conf

shared_preload_libraries = 'pg_stat_statements'

pg_stat_statements.max = 10000
pg_stat_statements.track = all

然后运行以下查询:

CREATE EXTENSION pg_stat_statements; 

之后,此示例查询(从上面的链接文档复制)将为您提供来自所有数据库的 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;

如果您想要单个数据库的结果,则需要进行筛选,dbid以便pg_database根据数据库名称从中获取数据。将此WHERE子句添加到上面的查询中:

WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')

您也可以加入。

在测试时,最好排除对stats / schema表本身的查询,例如:

AND query not similar to '%( pg_|information_schema)%'

很多免费的商业工具可以帮助您可视化数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.