是否可以获取在 postgres 中进行的查询的历史记录?是否有可能获得每次查询所花费的时间?我目前正在尝试识别我正在处理的应用程序中的慢速查询。
我正在使用 Postgres 8.3.5
最佳答案
数据库本身没有历史记录,如果您使用的是 psql,则可以使用“\s”在那里查看您的命令历史记录。
您可以通过设置 log_statement 将 future 的查询或其他类型的操作获取到日志文件中在 postgresql.conf 文件中。您可能想要的是 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
这很方便,因为您无需成为数据库 super 用户即可使用它,这与更改配置文件不同,而且如果您正在开发新代码并想对其进行测试,它会更容易使用。
关于database - 是否有可能获得在 postgres 中进行的查询的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1523446/