Sql-Server
sp_Blitz 顯示來自記憶體中 OLTP 的“write_conflict”
我的團隊在我們的幾台機器上遇到了記憶體中 OLTP (Hekaton) 事務問題,這表明每台機器存在不同數量的寫入衝突。我們確實打開了記憶體優化的 TempDB 元數據。
自重啟以來:0 次驗證失敗,0 次依賴失敗,63 次寫入衝突,0 次違反唯一約束。
以及性能消息
記憶體中 OLTP (Hekaton) 在使用中,最大伺服器記憶體的 2097152.00GB 的 0% 用於記憶體中 OLTP 表 (Hekaton)。
我們應該擔心這些資訊嗎?看起來錯誤是由 sys.dm_xtp_transaction_stats 視圖報告的,Microsoft 對“write_conflicts”的定義是“僅供內部使用”。
記憶體優化表是具有樂觀並發的無鎖、無閂鎖資料結構。這意味著作者不會阻止作者,並且首先送出獲勝。所以處理寫衝突是使用記憶體優化表的正常部分。
常見的模式是有一個重試循環客戶端程式碼或在一個非本地編譯的儲存過程中,它將擷取寫入衝突錯誤並重試。但預計偶爾會發生寫入衝突。
這裡是 SQL Server 本身使用 Memory Optimized 的表,所以想必重試處理得當,寫衝突很少,所以看起來沒有任何警報的原因。
如果您遇到大量寫入衝突,那麼記憶體優化表的樂觀並發模型可能不適合應用程序。例如,您不希望在許多客戶端需要快速連續更新同一行的情況下使用記憶體優化表。