database - 是否有可能获得在 postgres 中进行的查询的历史记录

标签 database performance postgresql timing

是否可以获取在 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/

相关文章:

database - 预定义的 ORACLE PL/SQL 异常在哪里?

mysql - 将数据存储在用户表中还是新表中?

database - 将 SQLITE SQL 转储文件转换为 POSTGRESQL

java - spring data jpa 和 hibernate 之间的性能差距 - jHipster

python - 如何使用 Sqlalchemy 创建序列并将该特定序列添加到表中?

c#删除数据表中的重复行

mysql - SQLAlchemy 批量更新策略

android - ActivityRecord 的 Activity 空闲超时

json - 将 JSON 文件导入 Windows 10 上的 Postgresql 11

java - 使用 -class 路径在 linux 终端中运行 java 程序