如何显示外部PostgreSQL连接的WORK_MEM?

时间:2017-02-14 15:18:54

标签: postgresql

我知道我可以在psql中使用SHOW WORK_MEM;来查看当前使用的连接的值。但其他连接怎么样?我有一个应用程序打开许多连接,并根据上下文动态更改WORK_MEM。我想监控这些WORK_MEM更改以确保它们正在应用。

换句话说,我想"调整" pg_stat_activity还包括WORK_MEM或任何其他会话参数。我查了pg_top,它没有包含这样的选项。

也许这篇关于使用this one的perl扩展名的EBD帖子可能被修改为在每个活动套接字上执行SHOW WORK_MEM?如果是这样,任何人都可以提供一个例子吗?

我在Ubuntu 14.04上使用9.5.6以防万一。

1 个答案:

答案 0 :(得分:1)

您可以在操作系统级别使用调试器进入该过程。

我将展示如何在Linux上执行此操作:

$ psql "dbname=test options='-c work_mem=256MB' application_name=test"
psql (9.6.1)
Type "help" for help.

test=>  SELECT pg_backend_pid();
 pg_backend_pid
----------------
          21089
(1 row)

现在我可以在服务器机器上进入该过程:

$ gdb /path/to/postgres-9.6.1/bin/postgres 21089
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-90.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
...
(gdb) print work_mem
$1 = 262144
(gdb) detach
Detaching from program: /path/to/postgres-9.6.1/bin/postgres, process 21089
(gdb) quit

您不希望在生产系统上执行此操作,因为在您调试后端时会阻止后端。