■2-08■ ロックとはロックモードロックにはテーブル単位でロックを行う“テーブルロック(table lock)”と行ごとロックを制御する“行ロック(row lock)”があります。PostgresSQLは双方をサポートしています。【表.2-3】にPostgresSQLの8つのロックモードを示します(補足 1)。
PostgreSQLはMVCCを採用しているため、READロックとWRITEロックが競合しません。 デッドロックの回避デッドロックとは、複数のロックが互いに相手のロック解除を待って、処理が停止してしまう状態のことです。PostgreSQLにはデッドロック状態にあるか否かを検出する機構があり、万が一デッドロック状態に陥っても、関連するトランザクションをアボートすることでデッドロック状態から脱出します。 ただし、デッドロック検出処理は非常に負荷が大きいので、実行時パラメータ“deadlock_timeout”に設定された時間はロック待ちして、デッドロック検出を頻繁に行わないようにします。 補足【表.2-3】の右欄『自動獲得』には、実行時に左欄のロックモードをかけるSQL文が記述されています。例えば、SELECT文は実行時にACCESS SHAREロックモードをかけます。[PREVIOUS][UP][NEXT] |