Sql-Server
HP 3PAR 環境中的 SQL Server 2016 SP 1 導致奇怪的頭部阻塞
我的客戶端在 HP 3PAR 硬體上。三台伺服器位於不同的地理位置,通過 40 gbit 光纖連接。SAN 只是 SSD,機器有很多核心。
ETL 過程啟動連接 2 個表的單個選擇查詢。執行計劃顯示了對兩個表的非聚集索引結合堆掃描的使用。
這個簡單的查詢成為所有其他後續查詢的頭塊,即使是那些引用完全不同的表的查詢。
我的第一個猜測是可能涉及到 3PAR,但我不確定。除此之外,真的很奇怪
select a.[value] from table a, inner join table b where table a.column = 12345
設法阻止
update table c set column a = [value].
AFAIK 沒有鎖定提示。
使用的表上沒有外鍵觸發器。數據庫中沒有任何功能或其他創造性的附加功能。
我想知道 HP 3PAR 故障轉移是否會以某種方式導致查詢鎖定數據庫或表或數據分區或 HOBT。有什麼想法嗎?如果需要更多資訊,請告訴我。
== 編輯 2017年 12 月 28 日回答了這個問題 :)
當您對實時發生的阻塞鏈進行故障排除時,請從sp_WhoIsActive開始:
sp_WhoIsActive @get_locks = 1
有一個被阻止的列,顯示誰在阻止誰。主要阻止者的阻止者列中不會有任何人。
找到主要阻止者後,點擊 locks 列 - 它是一個 XML 欄位,可展開以顯示該會話持有的鎖的完整列表。
可能是 select 是較長事務的一部分(還有一個 open transactions 列),或者 select 並不是真正的阻塞。
在這裡獲得具體的、可操作的建議的最佳選擇是發布 sp_WhoIsActive 輸出的圖片,包括阻塞列,然後是鎖的 XML 內容。