在表作為隊列的場景中,以某種方式配置和查詢它是至關重要的允許多個客戶端同時處理佇列項目。
當使用帶有 UPDLOCK 和 ROWLOCK 的悲觀行鎖定時,只有一個工作線程可以獲得鎖並處理一個佇列項目。 排。若要解決此問題並啟用並發處理,請考慮以下方法:
使用OUTPUT 子句實作佇列
OUTPUT 子句提供了一種原子地檢索和修改行的機制。以下是如何使用 OUTPUT 子句實現佇列:
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
此查詢自動執行以下步驟:
聚集索引最佳化
為了進一步最佳化效能,在 PROCESSED 欄位上建立聚集索引至關重要。這可確保資料按處理順序儲存。
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
避免非標準查詢
為了獲得最佳吞吐量,必須避免使用上述出隊操作以外的方法查詢隊清單。嘗試查看或將表用於其他目的可能會導致死鎖和效能下降。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3