[pgsql-jp: 34844] Re: VACUMM時のロックについて

EBIHARA, Yuichiro ebihara @ iplocks.co.jp
2005年 2月 9日 (水) 14:46:41 JST


こんにちは、海老原です。

> pg_locks.grantedも表示させないと、どのSQLが実際にロックを取っているのか
> 全く分からないのですが・・・

ご参考まで、僕がロック待ちの調査にいつも使用しているSQL文を紹介します。

SELECT l.pid, c.relname, l.transaction, l.mode, l.granted
FROM   pg_locks l LEFT OUTER JOIN pg_class c ON l.relation = c.oid
ORDER BY 1;

こんな感じで、ロック待ち情報(誰が誰を何でブロック)が得られます。

 pid  |  relname  | transaction |      mode       | granted
------+-----------+-------------+-----------------+---------
 9931 |           |       81401 | ExclusiveLock   | t
 9931 | mytable   |             | AccessShareLock | t
 9931 | mytable   |             | RowShareLock    | t
 9931 |           |       81400 | ShareLock       | f
 9947 | pg_class  |             | AccessShareLock | t
 9947 | mytable   |             | AccessShareLock | t
 9947 | mytable   |             | RowShareLock    | t
 9947 |           |       81400 | ExclusiveLock   | t
 9947 | pg_locks  |             | AccessShareLock | t

PIDはPostgreSQLバックエンドプロセスを示すので、この前後でpsコマンドを使
い、VACUUMなどの処理がどのPIDのバックエンドで実行されているのかをチェッ
クしておくとよいです。

-- 
アイピーロックス ジャパン株式会社

海老原 雄一郎 / EBIHARA, Yuichiro
  Email: ebihara @ iplocks.co.jp




pgsql-jp メーリングリストの案内