INSERT、UPDATE または DELETE などで更新したテーブルはコミットするまで、テーブルロックが発生します。ロック中に対象テーブルへ更新処理が実行された場合、300秒間は待機しますが、それでもロックが解放されない場合には、タイムアウトエラーを返します。以下は UPDATE と DELETE をそれぞれ別セッションで実行し、ロック情報を確認した実行例です。現在、発生しているロック情報を確認する場合は V_MONITOR スキーマ内の LOCKS システムテーブルを利用します。

LOCKS の実行例

1) セッションAで、UPDATE を実行します。

2) ロック情報を確認します。セッションAの UPDATE が「lock_mode=X」で取得されています。

[LOCKS]

列名内容
NODE_NAMESノード名
OBJECT_NAMEロックされているオブジェクト名
OBJECT_IDオブジェクトID
TRANSACTION_IDトランザクションID
TRANSACTION_DESCRIPTIONトランザクションの説明
LOCK_MODEロックモード
・S - Select実行時に適用されるShareロック(Isolation Level=‘SERIALIZABLE’)
・I - Insert実行時に適用されるInsertロック
・SI - テーブルを読み込みクエリを実行する際に適用されるShare+Insertロック
・X - Delete実行時に適用されるExclusiveロック
・T - Tuple MoverおよびプレジョインプロジェクションへのCOPY実行時に適用されるTuple Moverロック
・U - moveoutとmergeoutの最初のフェーズで適用されるUsageロック
・O – DROP_PARTITION/TRUNCATE TABLE/ADD COLUMN実行時に適用されるOwnerロック
LOCK_SCOPEロック許可前に要求されたスコープのリスト
ロック許可後、次のスコープが可能
・STATEMENT_LOCALPLAN
・STATEMENT_COMPILE
・STATEMENT_EXECUTE
・TRANSACTION_POSTCOMMIT
・TRANSACTION
REQUEST_TIMESTAMPトランザクションのロック開始時間
GRANT_TIMESTAMP ロック情報が更新された時間

3) セッションBで、DELETE を実行します。

4) ロック情報を確認します。セッションBの DELETE が「lock_mode=X」で取得されています。

5) 300秒を超えると、セッションBでタイムアウトエラーが発生します。

6) 現在、設定されている LockTimeout の設定値を確認すると「CURRENT_VALUE=300」になっています。LockTimeout は、必要に応じて変更が可能です。

[CONFIGURATION_PARAMETERS]

列名内容
PARAMETER_NAMEパラメータ名
CURRENT_VALUE現在の設定値
CHANGE_REQUIRES_RESTART変更する場合に再起動が必要かどうか
DESCRIPTIONパラメータの説明

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。