Sql-Server

HP 3PAR 環境中的 SQL Server 2016 SP 1 導致奇怪的頭部阻塞

  • December 28, 2017

我的客戶端在 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 內容。

引用自:https://dba.stackexchange.com/questions/193603