4月 19, 2013

PostgreSQLで実行中のクエリー一覧を取得

注釈:この記事はQiitaにわたしが投稿していた記事を、自分のブログへ移動させたものです。
pgAdminIIIで同様の機能があるのですが、ロック一覧を取得するのに凄い時間が掛かってしまい、まともにウィンドウが開かなくなったので、実行中のクエリーを取得するSQLを書いてみました。

このSQLを呼び出すシェルスクリプトを用意し、コマンドラインから実行できるようにしています。
アプリケーション名をトリムしているので、お好みに合わせて調整してください。

\pset columns 0;
\pset border 0;
\pset format 'wrapped'
SELECT
  procpid AS "PID"
, to_char(start,'MM/DD HH24:MI') AS "開始時間"
, to_char(now() - start,'DD HH24:MI') AS "実行時間"
, usename "user"
, substr(application_name, 1, 10) as "name"
, client_addr "IP"
, regexp_replace(current_query,'\(\r\n|\r|\n|\t\)',' ','g') AS "クエリー"
FROM (
    SELECT
      S.pid AS procpid
    , S.query_start AS start
    , S.usename
    , S.application_name
    , S.client_addr
    , S.query AS current_query
    FROM (
      SELECT *
      FROM pg_stat_activity
      WHERE state <> 'idle'
    ) AS S
) AS S
WHERE current_query <> ''
AND current_query NOT LIKE '%DISCARD ALL%'
ORDER BY
  "実行時間" DESC
, "PID";

0 件のコメント:

コメントを投稿