pg_stat_activity中的查询是否被截断?

ibz*_*ibz 44 postgresql

我正在使用SELECT current_query FROM pg_stat_activity;查看当前正在执行的查询,但我注意到该查询被截断.是否有任何解决方法或任何其他方式来查看当前正在执行的查询?

Mag*_*der 27

PostgreSQL 8.4添加参数" track_activity_query_size".该值仍将被截断,但您可以控制长度.


gre*_*egn 14

ALTER SYSTEM SET track_activity_query_size = 16384;
Run Code Online (Sandbox Code Playgroud)

您仍然需要重新启动服务才能生效

  • 默认值为 1kB。使用“show track_activity_query_size;”检查设置。应显示 16kB。 (3认同)

Tim*_*ane 7

在极端情况下,另一种方法是使用gdb调试器附加到进程并打印出查询.

http://darthanthony.wordpress.com/2012/10/11/viewing-running-postgres-queries-and-what-if-they-are-too-long/

gdb [path_to_postgres] [pid]

printf "%s\n", debug_query_string
Run Code Online (Sandbox Code Playgroud)


Kon*_*ard 7

从 PostgreSQL 13 开始,最大值track_activity_query_size 增加到 1MB

默认值为track_activity_query_size1024 字节(从 PostgreSQL 13-16 开始)。

请注意,如果查询大于track_activity_query_size,它将被截断。

与码头工人

如果您使用 docker,您可以像这样配置 docker-compose 文件:

# ...
services:
  postgres:
    container_name: postgres
    image: postgis/postgis:13-3.1
    command:
      - "postgres"
      - "-c"
      - "track_activity_query_size=1048576"
# ...
Run Code Online (Sandbox Code Playgroud)

没有码头工人

您可以这样设置/var/lib/postgresql/data/postgresql.conf

track_activity_query_size=1048576
Run Code Online (Sandbox Code Playgroud)

如果在该路径中找不到该.conf文件,您可以使用以下 SQL 语句确定它的位置:

# ...
services:
  postgres:
    container_name: postgres
    image: postgis/postgis:13-3.1
    command:
      - "postgres"
      - "-c"
      - "track_activity_query_size=1048576"
# ...
Run Code Online (Sandbox Code Playgroud)

检查/测试

请务必重新启动数据库以应用设置。您可以使用此查询来检查它是否已应用:

SHOW track_activity_query_size;
Run Code Online (Sandbox Code Playgroud)

如果设置更新为您想要的大小,您现在可以在pg_stat_activity表格上看到此设置的效果:

SELECT current_query FROM pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)


小智 1

您可以在 postgresql 中启用语句日志记录(log_statement),然后检查日志。

  • 其实不然,如果 SQL 语句是永久运行的语句怎么办?(僵尸 postgres 进程)然后,由于它永远不会完成,您只能通过查询 SELECT current_query FROM pg_stat_activity; 来在运行时看到它。 (2认同)