MSSQLSERVER_1204
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
詳細
属性 | 値 |
---|---|
製品名 | SQL Server |
イベント ID | 1204 |
イベント ソース | MSSQLSERVER |
コンポーネント | SQLEngine |
シンボル名 | LK_OUTOF |
メッセージ テキスト | この時点では、SQL Server データベース エンジンのインスタンスは LOCK リソースを取得できません。 アクティブなユーザーが少ないときにステートメントを再実行してください。 データベース管理者に依頼して、このインスタンスのロックとメモリの構成を確認するか、実行時間の長いトランザクションを確認してください。 |
説明
実行中、クエリはアクセスするリソースのロックを頻繁に取得および解放します。 ロックを取得すると、使用可能なロック構造のプールからロック構造が使用されます。 プールで使用可能なロック構造がなくなったために新しいロックを取得できない場合は、エラー 1204 メッセージが返されます。 この問題は、次のいずれかの理由が考えられます。
SQL Server では、他のプロセスがメモリを使用しているため、または SQL Server がメモリをすべて使い果たして、構成オプション max サーバー メモリを使用して構成された値に達したためにより多くのメモリを割り当てることはできません。
ロック マネージャーは、SQL Server で使用可能なメモリの 60% を超えるメモリを使用することはできません。しきい値は既に満たされています。
システム ストアド プロシージャ sp_configure (Transact-SQL) の構成オプション locksを、既定以外の非動的値に設定します。
SQL Server でトレース フラグ 1211、 1224、またはその両方を有効にしてロックのエスカレーション動作を制御し、多くのロックを必要とするクエリを実行しています。
ユーザー アクション
SQL Server で十分なメモリを割り当てることができないと思われる場合は、次のオプションを試してください。
次のようなクエリを使用して、SQL Server 内の他のメモリ クラークが SQL Server で構成されたメモリの大部分を使用しているかどうかを確認します。
SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;
その後、ロック メモリがより多くのリソースを使用できるように、そのメモリ クラークのメモリ消費量を減らします。 詳細については、「 SQL Server でのメモリ不足またはメモリ不足の問題を参照してください。
SQL Server 以外のアプリケーションがリソースを消費している場合は、そのアプリケーションを停止するか、別のサーバーで実行することを検討します。 これにより、SQL Server の他のプロセスからメモリが解放されます。
max サーバー メモリを構成した場合は、max サーバー メモリ設定を増やします。
ロック マネージャーが使用可能なメモリの最大量を使用したと思われる場合は、最も多くのロックを保持しているトランザクションを特定して終了します。 次のスクリプトは、ロックが最も多いトランザクションを識別します。
SELECT request_session_id, COUNT (*) num_locks FROM sys.dm_tran_locks GROUP BY request_session_id ORDER BY count (*) DESC;
最も高いセッション ID を取得し、 KILL コマンドを使用して終了します。
locks
に既定値以外の値を使用している場合は、sp_configure
を使用して、次のステートメントを使用してlocks
の値を既定の設定に変更します。EXEC sp_configure 'locks', 0;
SQL Server トレース フラグ 1211、1224、またはその両方を使用しているときに上記のエラー メッセージが発生した場合は、それらの使用を確認し、多数のロックを必要とするクエリの実行中に無効にします。 詳細については、「
DBCC TRACEON - トレース フラグ (Transact-SQL) 」と「 SQL Server でのロックエスカレーションによって発生するブロックの問題を解決するを参照してください。