MSSQLSERVER_1204
適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體
詳細資料
屬性 | 值 |
---|---|
產品名稱 | SQL Server |
事件識別碼 | 1204 |
事件來源 | MSSQLSERVER |
元件 | SQLEngine |
符號名稱 | LK_OUTOF |
訊息文字 | SQL Server Database Engine 的執行個體目前無法取得 LOCK 資源。 請在使用中使用者較少時重新執行您的陳述式。 要求資料庫管理員檢查這個執行個體的鎖定與記憶體組態,或者檢查長時間執行的交易。 |
說明
在執行期間,查詢會經常獲得及釋放對其存取之資源的鎖定。 獲得鎖定後,會從可用的鎖定結構集區用盡鎖定結構。 當因集區中沒有可用的鎖定結構而無法取得新鎖定時,會傳回錯誤 1204 訊息。 此問題可能是因為下列任何原因所造成:
SQL Server 無法配置更多記憶體,可能是因為其他進程正在使用它,或是因為 SQL Server 已用盡其所有記憶體,並使用組態選項 max 伺服器記憶體設定的值。
鎖定管理員無法使用 SQL Server 可用記憶體的 60% 以上,而且已符合閾值。
您已在 SQL Server 上啟用追蹤旗標 1211、 1224 或兩者,以控制鎖定擴大行為,而且您正在執行需要許多鎖定的查詢。
使用者動作
如果您懷疑 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 中鎖定擴大所造成的封鎖問題。