是否有可能获得在postgres中查询的历史

问题描述:

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

我使用的Postgres 8.3.5

+3

我回滚标签更改,因为这不是一个特定于SQL的问题。 – 2009-10-06 04:07:05

+1

查看http://*.com/questions/722221/how-to-log-postgres-sql-queries – 2014-07-08 20:16:05

有在数据库本身没有历史,如果你使用psql里,你可以使用“\ S”看到你的命令历史记录那里。

您可以通过在postgresql.conf文件中设置log_statement来将日后的查询或其他类型的操作获取到日志文件中。您可能想要的是log_min_duration_statement,如果将其设置为0,则会将所有查询及其持续时间记录在日志中。一旦您的应用程序启用后,这可能会有所帮助,如果将其设置为更高的值,则只会看到有助于优化的长时间运行查询(您可以对查找的查询运行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 

这是方便,因为你不需要是数据库超级用户才能使用它,不像更改配置文件,它是更容易,如果您正在开发新的使用代码并且想要测试它。

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

当您记录数据时,您可以使用grep或一些专门的工具 - 如pgFouine或我自己的analyzer--它缺少适当的文档,但尽管如此 - 运行得非常好。

pgBadger是另一种选择 - 在这里还列出:https://github.com/dhamaniasad/awesome-postgres#utilities

需要一些额外的设置提前捕捉到的Postgres必要的数据记录,虽然,请见官网。

仅供参考使用UINavicat那些:

必须设置你的喜好,利用文件为where存储历史。

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

enter image description here

PS:我没有从属关系或关联的Navicat或它的分支机构。只是想帮忙。