[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 メーリングリストの案内