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

Chi*_*han 53 database postgresql performance timing

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

我正在使用Postgres 8.3.5

Gre*_*ith 66

数据库本身没有历史记录,如果您使用psql,可以使用"\ s"查看命令历史记录.

通过在postgresql.conf文件中设置log_statement,可以将日后查询或其他类型的操作放入日志文件中.您可能需要的是log_min_duration_statement,如果将其设置为0,则会将所有查询及其持续时间记录在日志中.一旦您的应用程序上线,这可能会有所帮助,如果您将其设置为更高的值,您将只看到有助于优化的长时间运行的查询(您可以对找到的查询运行EXPLAIN ANALYZE以找出它们的原因'慢).

在这方面要知道的另一个方便的事情是,如果你运行psql并告诉它"\ timing",它将显示在此之后每个语句需要多长时间.所以如果你有一个如下所示的sql文件:

\timing
select 1;
Run Code Online (Sandbox Code Playgroud)

您可以使用正确的标志运行它,并查看每个语句与所花费的时间交错.以下是结果的样子和结果:

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

Time: 1.196 ms
Run Code Online (Sandbox Code Playgroud)

这很方便,因为您不需要成为数据库超级用户来使用它,这与更改配置文件不同,如果您正在开发新代码并想要测试它,则更容易使用.


The*_*hal 5

你可以使用像

\s 
Run Code Online (Sandbox Code Playgroud)

它将获取终端的所有命令历史记录,并使用以下命令将其导出到文件

\s filename
Run Code Online (Sandbox Code Playgroud)