PostgreSQLスキルアップノート(自己啓発のための個人サイト)

PostgreSQLの状況監視・スクリプト用パーツ(未完成メモ)


【一覧に戻る】

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ PostgreSQLの状況監視・スクリプト用パーツ(未完成メモ)
■■■■
■■■■
■■■■ 2012/11/17
■■■■ 使用環境:PostgreSQL9.1.4 (CentOS6.2)
                                                                   (C) 2012 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★自己都合により実機確認は9.1、マニュアルへのリンクは9.2としています。ご了承下さい。


【マニュアル】
・統計情報コレクタ→●[マニュアル]データベース活動状況の監視−統計情報コレクタ
・実行時統計情報→●[マニュアル]サーバの設定−実行時統計情報


【参考記事】
なし





完全に本人用の覚えとなっています。
また内容は未完成で、今後整備していく予定のページです。

シェルスクリプトで各種ツールを作成する場合、このような構文をベースに活用する
つもりでメモしたものです。


現時点で記載のスクリプトそのままでは役に立つような内容ではありません。
ただ■2■の方はpsの情報とpg_stat_activityの情報をセットで出力しているので少しは
使えるかもしれません。




■1■  pg_stat_activityからpidを取り出してシェル変数に格納
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

この情報自体が特別役に立つものではありません。

シェルスクリプトで直にSELECT文を実行して結果のそれぞれに対して何か処理をさせ
たい場合のベースとなる汎用的な文例です。

今は出された結果をechoで表示しているだけですが、do echo・・の部分に
何かの処理をいれれば、結果のそれぞれに対して処理をさせることができます。

「test1」をお使いのDB名に変更して確認して下さい。


【□】 for tmppid in `psql test1 -t -c "select procpid from pg_stat_activity"`;do echo "$tmppid";done

  -tはタイトル等なし


結果例
---------------------------------
2551
3837
3906
3962
---------------------------------



■2■  psコマンドとpg_stat_activityの結果をプロセスごとにセット表示
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 
 ・「test1」をお使いのDB名に変更して確認して下さい。
 ・別セッションからいくつかpsqlを立ち上げて確認してみて下さい。
 

【□】 実行例(bashコマンドラインから確認できます)

  for tmppid in `psql test1 -t -c "select procpid from pg_stat_activity where procpid!= pg_backend_pid()"`
  do
      pskekka=`ps p $tmppid o user,pid,ppid,%cpu,%mem,vsz,rss,command`
      psqlkekka=`psql test1 -c\
              "select usename,application_name,\
                      to_char(backend_start,'YYYY/MM/DD HH24:MI:SS') backend_start,\
                      to_char(query_start,'YYYY/MM/DD HH24:MI:SS') query_start,\
                      waiting,/*state,query*/ current_query\
               from pg_stat_activity where procpid=${tmppid}"`
      echo "=====PID:${tmppid}========="
      echo "$pskekka"
      echo "$psqlkekka"
  done


 ※1行目の where procpid!= pg_backend_pid()は、この問い合わせ自身のサーバプロセスを結果から除外しています。
 ※ ps pは指定したプロセスのみを表示



結果例

---------------------------------------------------------------------------------------------------------------------

=====PID:2551=========
USER       PID  PPID %CPU %MEM    VSZ   RSS COMMAND
postgres  2551  2492  0.5  0.0 674412  7368 postgres: postgres test1 [local] idle
 usename  | application_name |    backend_start    |     query_start     | waiting | current_query
----------+------------------+---------------------+---------------------+---------+---------------
 postgres | psql             | 2012/11/16 20:06:09 | 2012/11/16 21:15:36 | f       | 
(1 row)
=====PID:3837=========
USER       PID  PPID %CPU %MEM    VSZ   RSS COMMAND
postgres  3837  2492  5.5  0.0 674200  6688 postgres: postgres test1 [local] idle
 usename  | application_name |    backend_start    |     query_start     | waiting | current_query
----------+------------------+---------------------+---------------------+---------+---------------
 postgres | psql             | 2012/11/16 21:14:50 | 2012/11/16 21:15:40 | f       | 
(1 row)
=====PID:3906=========
USER       PID  PPID %CPU %MEM    VSZ   RSS COMMAND
postgres  3906  2492  4.6  0.0 674200  5532 postgres: postgres test1 [local] SELECT
 usename  | application_name |    backend_start    |     query_start     | waiting |   current_query
----------+------------------+---------------------+---------------------+---------+-------------------
 postgres | psql             | 2012/11/16 21:16:13 | 2012/11/16 21:16:35 | f       | select * from t1;
(1 row)

---------------------------------------------------------------------------------------------------------------------







以上 
inserted by FC2 system