获取运行缓慢的查询的统计信息


10

我的数据库应用程序运行许多不同的查询。我已将其设置log_min_duration_statement为1000。但是记录的查询并不总是很慢,大多数情况下它们仅花费几毫秒。

是否可以获取所有查询的统计信息,并且查询花费的时间多于1000毫秒?


1
看看是否有帮助:忽略log_min_duration_statement设置。或者您忘记了更改设置后重新加载配置。
DanielVérité15年

Answers:


11

使用SQL命令安装扩展pg_stat_statements

CREATE EXTENSION pg_stat_statements

您可能需要确保使用适当的用户(例如您的应用程序使用的用户或某些dba帐户)创建此文件。请注意,无论哪个用户创建扩展,都将拥有它。

这将需要重新启动服务器才能使其可用(因为您必须稍微更改postgresql.conf中的配置,这会影响内存消耗),但是它将为您提供所有查询的统计信息。

请参阅文档页面以获取有关pg_stat_statements提供的更多信息。有关pg_stat_statements的postgresql.conf配置文件的配置的快速参考,请参见此处

一旦安装并运行它,就可以通过查询pg_stat_statements视图来查看统计信息。

select * from pg_stat_statements;
-- or
select * from pg_stat_statements where total_time / calls > 200; -- etc ..

2

@JoishiBodio怎么说,您可以使用pg_stat_statements扩展名来查看慢速查询统计信息。对于那些安装困难的人(就像我一样):

  1. 检查是否pg_stat_statements在可用扩展列表中:

    SELECT * FROM pg_available_extensions;
  2. 尝试postgresql-contrib通过Debian / Ubuntu上的系统软件包管理器安装软件包:

    sudo apt-get install postgresql-contrib-9.5

然后再次执行步骤1。

  1. 添加pg_stat_statementsshared_preload_librariesPostgreSQL中配置:

通过postgres.conf

    shared_preload_libraries = 'pg_stat_statements'

通过命令行参数(不带引号!):

    postgres -c shared_preload_libraries=pg_stat_statements
  1. 然后在数据库中创建扩展名:

    CREATE EXTENSION pg_stat_statements;
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.