2017-02-14 7 views
1

psqlでSHOW WORK_MEM;を使用して、現在使用されている接続の値を表示することができます。しかし、他の接続はどうですか?私は多くの接続を開き、コンテキストに基づいてWORK_MEMを動的に変更するアプリケーションを持っています。私はこれらの変更が適用されていることを確認するためにこれらの変更を監視したいと思います。外部PostgreSQL接続のWORK_MEMを表示するには?

つまり、pg_stat_activityに「WORK_MEM」などのセッションパラメータを含めるように調整する必要があります。私はpg_topをチェックしましたが、そのようなオプションは含まれていません。

おそらくdisplay connection CPU and RAM usageへのperl拡張を使用するこのEBDの投稿は、すべてのアクティブなソケットでSHOW WORK_MEMを実行するように変更できますか?もしそうなら、誰かが例を挙げることができますか?

重要な場合は、Ubuntu 14.04で9.5.6を使用しています。

+0

'work_mem'は接続に依存しませんか?私はサーバーパラメータ –

+1

@JuanCarlosOropezaと思う:いいえ、あなたの現在のセッションのためにそれを変更することができます。 –

+1

私はPostgresをハッキングせずにこれが可能だとは思わない。もう一つの問題は、 'set work_men = ..'がトランザクションであることです。したがって、他のセッションでコミットされていない変更を確認する方法も必要になります。 –

答えて

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 

あなたがこれを行うにはしたくないだろうこれは、バックエンドがデバッグ中にブロックされているためです。

+0

ステップバイステップをありがとう。私はそれをショットを与えるよ! – Jeff

+0

素晴らしい作品は、私に多くのトラブルを救った。 – Jeff