MSSQLSERVER_1204

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 1204
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 LK_OUTOF
訊息文字 SQL Server Database Engine 的執行個體目前無法取得 LOCK 資源。 請在使用中使用者較少時重新執行您的陳述式。 要求資料庫管理員檢查這個執行個體的鎖定與記憶體組態,或者檢查長時間執行的交易。

說明

在執行期間,查詢會經常獲得及釋放對其存取之資源的鎖定。 獲得鎖定後,會從可用的鎖定結構集區用盡鎖定結構。 當因集區中沒有可用的鎖定結構而無法取得新鎖定時,會傳回錯誤 1204 訊息。 此問題可能是因為下列任何原因所造成:

  • SQL Server 無法配置更多記憶體,可能是因為其他進程正在使用它,或是因為 SQL Server 已用盡其所有記憶體,並使用組態選項 max 伺服器記憶體設定的值。

  • 鎖定管理員不會使用超過 60% 的記憶體可供 SQL Server 使用,而且已符合閾值。

  • 您已將系統預存程式的組態選項鎖定設定sp_configure為非預設的非動態值。

  • 您已在 SQL Server 上啟用追蹤旗標 12111224 或兩者,以控制鎖定擴大行為,而且您正在執行需要許多鎖定的查詢。

使用者動作

  • 如果您懷疑 SQL Server 無法設定足夠的記憶體,請嘗試下列動作:

    • 使用類似下列的查詢,識別 SQL Server 內是否有任何其他記憶體 Clerk 已用盡大部分的 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
      

      然後減少該記憶體 Clerk 的記憶體耗用量,如此才能讓鎖定記憶體使用更多資源。 如需詳細資訊,請參閱 針對 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  
    

    取得最高的會話標識碼,並使用KILL命令終止它

  • 如果您使用 的非預設值 locks,請使用 sp_configure 下列語句,將的值 locks 變更為其預設設定:

    EXEC sp_configure 'locks', 0
    
  • 如果您在使用 SQL Server 追蹤旗標 1211、1224 或兩者時遇到上述錯誤訊息,請檢閱其使用方式,並在執行需要大量鎖定的查詢時加以停用。 如需詳細資訊,請檢閱 DBCC TRACEON - 追蹤旗標(Transact-SQL),解決 SQL Server 中鎖定擴大所造成的封鎖問題。