【问题标题】:Duration logged but not the statement -- postgresql. Are there any specific queries for this behavior?记录了持续时间,但没有记录语句——postgresql。对此行为是否有任何具体查询?
【发布时间】:2016-04-22 06:54:25
【问题描述】:

我的postgresql.conf 中有以下设置

log_statement='all'
log_duration=on

当我运行 psql 并运行任何查询(如选择/创建用户/等)时,它会记录语句以及持续时间。如果我给出查询以连接到不同的数据库

\c <database_name>

它既不记录持续时间也不记录语句。我认为它可能不会记录以反斜杠开头的元命令的持续时间和语句。但它确实记录了其中一些的语句和持续时间,例如\dt\l

我认为可能有一个查询/命令列表,用于生成或不生成日志。有没有这样的清单?

话虽如此,导致我挖掘这个问题的原始问题是--

我的应用程序(golang-react 应用程序)与 postgresql 和日志语句及其持续时间交互。但在那之后,它又记录了两个持续时间,其声明没有被打印出来。 (我已经评论了log_min_duration_statement),所以我不确定这个持续时间是什么查询。 另外,如果我当时使用SELECT query,xact_start,query_start FROM pg_stat_activity; 来查看正在运行的查询,它不会显示除我在日志中看到的查询之外的任何其他查询。

我如何知道此持续时间用于哪些查询?

【问题讨论】:

    标签: postgresql logging


    【解决方案1】:

    但在那之后它又记录了两个持续时间,其语句没有被打印出来。

    如果您有log_duration = on,这些可能是语句执行三个阶段的解析、绑定和执行持续时间。它仅通过客户端应用程序分三个阶段完成 - psql 一次性运行。

    如果您只想要总数,请改用log_min_duration_statement = 0

    是的,这令人困惑。也许值得把它写下来并作为可用性问题报告提交给 pgsql-general。

    【讨论】:

    • 感谢您抽出时间来回答。你是对的,它的解析、绑定和执行持续时间。现在我给出 log_min_duration_statement=0 它确实告诉我阶段以及它在该阶段花费的持续时间。但我不明白总位。即使我将 log_min_duration_statement 设为零,它也不会打印总数。有没有办法我们可以做到这一点?顺便说一句,我对阶段的记录很满意。
    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2019-12-03
    • 2021-06-18
    • 1970-01-01
    • 2013-12-14
    • 2017-06-02
    • 2017-05-02
    相关资源
    最近更新 更多