pg_locks

PostgreSQL 8.0.0 文書
前のページ | 巻戻し | 第 41章システムカタログ | 早送り | 次のページ

# 41.33. `pg_locks`

`pg_locks` ビューはデータベースサーバ内で開かれているトランザクションのロックに関する情報へのアクセスを提供します。ロックに関するより詳細な説明は 第12章 を参照してください。

`pg_locks` にはロック対象となる進行中のオブジェクト、要求されたロックモード、および関連するトランザクション毎に一つの行を所有しています。ですから、もし複数のトランザクションがそのトランザクション上でロックを保持していたりロックを待機している場合には、おなじロック対象オブジェクトが数多く出現することがあります。ロック対象オブジェクトとはリレーション（テーブル）もしくはトランザクション ID です。

このビューは行レベルのロックではなくテーブルレベルのロックだけを所有していることを覚えておいてください。もしトランザクションが行レベルロックを待機しているのであれば、その行のロックの現時点の所有者のトランザクション ID に対して待機しているとビュー上に現れます。

表 41-33. `pg_locks` の列

名前 | 型 | 参照先 | 説明
--- | --- | --- | ---
`relation` | `oid` | ``pg_class`.oid` | ロックされたリレーションの OID、もしくはロック対象オブジェクトがトランザクション ID の場合は NULL。
`database` | `oid` | ``pg_database`.oid` | ロックされたリレーションが存在するデータベースの OID、もしくはロックされたリレーションが全体にわたって共有されているテーブルの場合はゼロ、もしくはロックされたオブジェクトがトランザクション ID の場合は NULL。
`transaction` | `xid` |  | トランザクションの ID、もしくはロックされたオブジェクトがリレーションの場合は NULL。
`pid` | `integer` |  | このロックを所有もしくは待機しているサーバプロセスのプロセス ID
`mode` | `text` |  | このプロセスが所有しているもしくは目論んでいるロック名 （項12.3.1 を参照）
`granted` | `boolean` |  | ロック中であれば真、ロックを待機中であれば僞

指定されたセッションにより所有されているロックを表す行内で `granted` は真。僞の場合はこのロックを取得するため現在セッションが待機中であることを示しています。ということは、同じロック対象のオブジェクトに対してなんらかの他のセッションが競合するロックを取得していることを意味します。待機中のセッションはその別のセッションがロックを開放するまで活動を控えます（もしくはデッドロック状態が検出されることになります）。単一セッションでは一度に多くても一つのロックを取得するために待機します。

全てのトランザクションはその全ての過程完了までそのトランザクション ID 上に排他的ロックを掛けます。もしもあるトランザクションが他のトランザクションを特定して待機しなければならないと判断した場合、他と見なしたトランザクションの ID に対し共有ロックを取得するように試み、目的を達します。これは、他と見なしたトランザクションが完了し、そしてロックを開放した場合のみ成功します。

`pg_locks` ビューにアクセスがかかると内部ロック管理データ構造は一時的にロックされ、複製がビューとして表示用に作成されます。このことにより通常のロック管理操作を必要以上に妨げないで、ビューは矛盾を含まない結果一式の生成が保証されます。それにもかかわらずこのビューが頻繁に読み込まれるとするとデータベースのぱフォーマンスに何らかの影響を及ぼすでしょう。

`pg_locks` は現行のデータベースに関連するロックのみならず、データベースクラスタ内の全てのロックの全体のビューを提供します。その `relation` 列が `pg_class`.`oid` に対しロックされたリレーションであることを表明するために結合可能であっても、現行のデータベース内のリレーション（それに対する `database` 列が現行のデータベースの OID もしくはゼロ）についてのみ正しく働きます。

もし統計情報収集機能が可能となっている場合には、ロック保持もしくは保持を待機しているセッションの更なる情報を入手するため `pg_stat_activity` ビューの `procpid` 列と `pid` 列は結合できます。

前のページ | ホーム | 次のページ
`pg_indexes` | 上に戻る | `pg_rules`