« シーケンス番号を自在に操りたい!(2)-データ型とシーケンス値 | トップページ | PostgreSQLにおけるNVL関数の代替手段 »

2014.02.28

pg_topで遊んでみる

topの話をしたついでとくればPostgreSQLにおける同種のツール、"pg_top"について触れてみてもいいだろう。

Googleさんで検索してみると件数ヒットが8,350件。少なっ!
私は重宝して使用しているのだが、世間様一般ではあまり利用されてない、ということなのだろうか?

pg_topのインストールについては割愛したい。
http://pgfoundry.org/frs/?group_id=1000300から最新のソースが取得できるので頑張ってインストールしておいてください(をぃ)
デフォルトではインストールされてないので自力でmake installが必要なのと、Windows版バイナリは用意されていない、という点にご注意。 ref)[pg_top公式ページ]

インストールされているバージョンの確認は-vオプションで行える。

$ pg_top -v pg_top: version 3.7.0-alpha1
ふむ。最新版の3.7.0-releaseではなくalpha版がインストールされてるのね。

バージョンがわかったところで、メインの管理コンソールを立ち上げてみる。

$ pg_top -d hogehoge
そうすると下記のようなスクリーンが表示される

last pid: 10247;  load avg:  3.09,  3.13,  3.17;       up 2+02:23:48   09:25:18
28 processes: 3 running, 25 sleeping
CPU states: 57.9% user,  0.0% nice, 15.8% system, 26.1% idle,  0.3% iowait
Memory: 7881M used, 102M free, 139M buffers, 7310M cached
Swap: 315M used, 7877M free, 40M cached

  PID USERNAME PRI NICE  SIZE   RES STATE   TIME   WCPU    CPU COMMAND
32167 postgres  18    0 2261M 1480M run    44.9H  9.47% 96.46% postgres: hogehoge
31441 postgres  17    0 2261M 1631M run    42.9H  9.30% 94.27% postgres: hogehoge
31934 postgres  18    0 2261M 1539M run    43.7H  9.27% 93.87% postgres: hogehoge
 4417 postgres  15    0 2258M   20M sleep   0:40  0.00%  0.00% postgres: user03
 7826 postgres  15    0 2257M   67M sleep   0:02  0.00%  0.00% postgres: hogehoge
 4391 postgres  15    0 2258M   19M sleep   0:01  0.00%  0.00% postgres: user02
 9563 postgres  15    0 2258M   23M sleep   0:01  0.00%  0.00% postgres: hogehoge
 2048 postgres  15    0 2263M   67M sleep   0:00  0.00%  0.00% postgres: hogehoge
23377 postgres  15    0 2258M   11M sleep   0:00  0.00%  0.00% postgres: user01
 9913 postgres  15    0 2258M   27M sleep   0:00  0.00%  0.00% postgres: hogehoge
 9486 postgres  15    0 2266M 9036K sleep   0:00  0.00%  0.00% postgres: hogehoge
 9355 postgres  15    0 2258M   36M sleep   0:00  0.00%  0.00% postgres: hogehoge
 9537 postgres  15    0 2258M  108M sleep   0:00  0.00%  0.00% postgres: hogehoge
 8380 postgres  15    0 2257M   35M sleep   0:00  0.00%  0.00% postgres: hogehoge

"top"とよく似た構成で、上部にリソース概況が表示される。"top"を使い慣れていれば、表示項目の理解にはそれほど時間はかからないだろう。
ポイントは2行目のprocessと4行目以降のメモリ情報等にある。
process数はPostgreSQLのプロセス数であり、上記の例であれば28コネクションが確立しており、そのうち3つのプロセスが実際に稼動していることがわかる。
またメモリ等の使用量はOS全体ではなくPosgreSQLが確保しているメモリ量を示している。そうすると7881MBメモリをPostgreSQL用に確保してあり、そのうち7310MBはキャッシュを保管するのに使用されていることがわかる。

その下部にあるプロセス別の状況は、基本的にtopで表示されるものと同じである。ただし、
 1.COMMAND部分にはどのユーザによって起動されたプロセスなのかがわかる
 2.STATE部分で表示される内容がちょっと異なる
といった特徴がある。

STATEで示される内容は次のとおり。

run:稼働中(CPU使ってる)のプロセス sleep:コネクションの確立だけでアイドルしているプロセス disk:ディスクへのIOなどを行っているプロセス

ただ、これだけであれば単なるPostgreSQLのプロセスに着目したtopに過ぎない。
この先にpg_top固有の監視機能が存在する。

ロック情報の取得

先ほどの画面上で、"L"を押すと、プロセスIDの入力が求められる。そこで何がしかのPIDを入力すると下記のように表示が切り替わる。

Locks held by procpid 14106: | database | table | type | granted ---+----------+-------------------------------+------------------+-------- 1 | postgres | | AccessShareLock | t 2 | postgres | | RowExclusiveLock | t 3 | postgres | | RowExclusiveLock | t 4 | postgres | | AccessShareLock | t 5 | postgres | pg_class | AccessShareLock | t 6 | postgres | pg_class_relname_nsp_index | AccessShareLock | t 7 | postgres | | RowExclusiveLock | t 8 | postgres | | AccessShareLock | t 9 | postgres | | RowExclusiveLock | t 10 | postgres | | RowExclusiveLock | t 11 | postgres | | RowExclusiveLock | t 12 | postgres | pg_inherits_parent_index | AccessShareLock | t 13 | postgres | | ExclusiveLock | t 14 | postgres | | AccessShareLock | t 15 | postgres | | RowExclusiveLock | t 16 | postgres | pg_inherits | AccessShareLock | t 17 | postgres | | RowShareLock | t 18 | postgres | | RowExclusiveLock | t 19 | postgres | | RowExclusiveLock | t

pg_locksの情報を管理コンソールから取得することができるわけである。

今度は"R"を押下してみよう。

ast pid: 14858;  load avg:  3.37,  3.55,  3.36;       up 2+03:04:17   10:05:47
33 processes: 3 running, 30 sleeping
CPU states: 61.8% user,  1.0% nice, 13.8% system, 23.3% idle,  0.3% iowait
Memory: 7921M used, 62M free, 66M buffers, 7379M cached
Swap: 314M used, 7878M free, 41M cached

SEQ_SCANS SEQ_READS   I_SCANS I_FETCHES   INSERTS   UPDATES   DELETES RELNAME
   949731  15672936         0         0         4         0         0 free_tables
   277551    832647         0         0         0         0         0 customers
   164736   2964978      8857      8827         3         0         0 access_log
   145371    726850         0         0         0         0         0 sales
   145368    581472         0         0         0         0         0 countries
   136068  12408116       104       156         5         1         0 cakes
   131449   9540733    105892    126968        11         0         0 products
    94000 224864896   1247813   1725920      1935         0         0 suppliers

するとそのDBにおけるユーザーテーブルの統計情報が出力される。どうもシーケンシャルスキャン実行回数の多い順に出るようである。……この"free_tables"って全然インデックス効いてないですね。ヤバイですね。

こんな感じでコンソールからDBの稼働状況へリアルタイムでアクセスできるのが強みである。
pgAdminIIIの[サーバ状態]監視ウィンドウも有力なツールだが、CUIでサーバの状況も見ながら利用できるpg_topもなかなか有効なツールであるので、ぜひ活用していきたいところである。

|

« シーケンス番号を自在に操りたい!(2)-データ型とシーケンス値 | トップページ | PostgreSQLにおけるNVL関数の代替手段 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/59199187

この記事へのトラックバック一覧です: pg_topで遊んでみる:

« シーケンス番号を自在に操りたい!(2)-データ型とシーケンス値 | トップページ | PostgreSQLにおけるNVL関数の代替手段 »