是否有可能得到postgres中查询的历史logging

是否有可能得到在postgres中查询的历史? 是否有可能获得每个查询花费的时间? 我目前正在尝试识别正在处理的应用程序中的慢查询。

我正在使用Postgres 8.3.5

数据库本身没有历史logging,如果你使用的是psql,你可以使用“\ s”来查看你的命令历史logging。

您可以通过在postgresql.conf文件中设置log_statement来将日后的查询或其他types的操作获取到日志文件中。 你可能想要的是log_min_duration_statement ,如果将其设置为0,则会将所有查询及其持续时间logging在日志中。 一旦您的应用程序启用,这可能会有所帮助,如果将其设置为更高的值,则只会看到有助于优化的长时间运行的查询(您可以对查find的查询运行EXPLAIN ANALYZE来找出原因很慢)。

在这个领域另一个方便的事情是,如果你运行psql并且告诉它“\ timing”,它将显示在这之后每个语句需要多长时间。 所以如果你有一个如下所示的sql文件:

\timing select 1; 

您可以使用正确的标志运行它,并查看每个语句交替使用了多长时间。 以下是结果的方式和结果:

 $ psql -ef test.sql Timing is on. select 1; ?column? ---------- 1 (1 row) Time: 1.196 ms 

这很方便,因为不需要成为数据库超级用户就可以使用它,而不像更改configuration文件那样,而且如果您正在开发新代码并且想要testing它,则更容易使用它。

如果你想识别慢查询,比方法是使用log_min_duration_statement设置(在postgresql.conf中或者使用ALTER DATABASE SET设置每个数据库)。

当你logging数据的时候,你可以使用grep或者一些专门的工具 – 比如pgFouine或者我自己的分析器 – 它缺less适当的文档,但是尽pipe如此 – 运行的还不错。

pgBadger是另一种select – 也列在这里: https : //github.com/dhamaniasad/awesome-postgres#utilities

需要一些额外的设置提前捕获postgres日志中的必要数据,请参阅官方网站。

使用UI Navicat的用户仅供参考:

您必须设置您的首选项以利用文件来存储历史的存储位置。

如果这是空白你的Navicat将是空白的。

在这里输入图像说明

PS:我与Navicat或其关联公司没有任何联系。 只是想帮忙。