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 の設定を確認し、メモリ逼迫を緩和する。
同じデータベースの他の項目
- 40613Database is not currently available (Azure SQL)(データベースが現在利用できない)
- 102Incorrect syntax near 'token'('token' 付近の構文が正しくない)
- 8114Error converting data type X to Y(データ型 X から Y への変換エラー)
- 3906Failed to update database because the database is read-only(データベースが読み取り専用のため更新に失敗)
- 15023User already exists in the current database(ユーザーは現在のデータベースに既に存在する)
- 18452Login failed. The login is from an untrusted domain and cannot be used with Windows authentication(ログイン失敗。信頼されていないドメインからのログインで Windows 認証に使用できない)
- 605Attempt to fetch logical page belongs to a different allocation unit(取得しようとした論理ページが別のアロケーションユニットに属する)