MSSQLSERVER_1204

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

詳細

属性 Value
製品名 SQL Server
イベント ID 1204
イベント ソース MSSQLSERVER
コンポーネント SQLEngine
シンボル名 LK_OUTOF
メッセージ テキスト この時点では、SQL Server データベース エンジンのインスタンスは LOCK リソースを取得できません。 アクティブなユーザーが少ないときにステートメントを再実行してください。 データベース管理者に依頼して、このインスタンスのロックとメモリの構成を確認するか、実行時間の長いトランザクションを確認してください。

説明

実行中、クエリはアクセスするリソースのロックを頻繁に取得および解放します。 ロックを取得すると、使用可能なロック構造のプールからロック構造が使用されます。 プールで使用可能なロック構造がなくなったために新しいロックを取得できない場合は、エラー 1204 メッセージが返されます。 この問題は、次のいずれかの理由が考えられます。

  • SQL Server では、他のプロセスでメモリを使用しているため、または SQL Server がすべてのメモリを使い果たして、構成オプション の最大サーバー メモリを使用して構成された値に達したため、割り当てることができない。

  • ロック マネージャーは、SQL Server で使用できるメモリの 60% を超えるメモリを使用せず、しきい値が既に満たされています。

  • システム ストアド プロシージャの構成オプション ロックを、既定以外の非動的値にsp_configure設定しました。

  • SQL Server でトレース フラグ 12111224、またはその両方を有効にしてロックのエスカレーション動作を制御し、多くのロックを必要とするクエリを実行しています。

ユーザーの操作

  • 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 の他のプロセスからメモリが解放されます。

    • 最大サーバー メモリを構成した場合は、最大サーバー メモリ設定を増やします。

  • 使用可能なメモリの最大量がロック マネージャーによって使用されたと考えられる場合は、ロックの大半を取り扱っているトランザクションを見つけて中止します。 次のスクリプトは、ロックが最も多いトランザクションを識別します。

    SELECT request_session_id, COUNT (*) num_locks  
    FROM sys.dm_tran_locks  
    GROUP BY request_session_id   
    ORDER BY count (*) DESC  
    

    最も高いセッション ID を取得し、KILL コマンドを使用して終了します。

  • 既定値以外の値locksを使用している場合は、次のステートメントを使用して、値を既定のlocks設定に変更するために使用sp_configureします。

    EXEC sp_configure 'locks', 0
    
  • SQL Server トレース フラグ 1211、1224、またはその両方を使用しているときに上記のエラー メッセージが発生した場合は、それらの使用を確認し、多数のロックを必要とするクエリの実行中に無効にします。 詳細については、DBCC TRACEON - トレース フラグ (Transact-SQL) に関するページを参照、SQL Server のロックエスカレーションによって発生するブロックの問題を解決します