DBAtlas · データベース運用アトラス

1204: The instance of the SQL Server Database Engine cannot obtain a LOCK resource(SQL Server データベースエンジンのインスタンスが LOCK リソースを取得できない)

SQL Server

意味

SQL Server がロックマネージャに必要なメモリを割り当てられず、これ以上ロックを作成できない。ロックメモリプールが枯渇したため操作が失敗する。

原因

同時に保持される細粒度 (行/ページ) ロックが多すぎる: 大規模、インデックスなし、または一括の DML、ロックエスカレーションが抑止されている、サーバー全体のメモリ逼迫、または長時間開いたままのトランザクション。外部からのメモリ逼迫がきっかけになることもある。

対処方法

大きな操作を小さなバッチに分割し、同時ロック数を減らす。適切なインデックスを使用し、走査/ロックされる行数を減らす。ロックエスカレーションを無効化する構成を見直す: トレースフラグ 1211/1224 および ALTER TABLE ... SET (LOCK_ESCALATION = DISABLE)。SELECT name, lock_escalation_desc FROM sys.tables; と DBCC TRACESTATUS(-1); で確認する。サーバーメモリと max server memory の設定を確認し、メモリ逼迫を緩和する。

DBAtlas で開く →

同じデータベースの他の項目