徵狀
當您在 SQL Server 2016 中執行 DDL 作業(例如 [建立索引] 或 [截斷資料表])時,如果有另一個 DDL 事務在相同的資料庫上執行,則可能會封鎖該作業。
解決方案
這個問題首先是在下列 SQL Server 累積更新中修正:
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 我們建議您下載並安裝最新的 SQL Server 累積更新:
其他相關資訊
當 DDL 建立或刪除資料表或索引時,它需要從 sysrowsets插入或刪除資料表或索引的列集合識別碼,而這需要在專案上保留列層級 X 鎖。 在交易內完成時,會在交易期間保留 X 鎖。當元組移動器發現 flushable 刪除緩衝區時,必須逐一查看 sysrowsets 來探索現有的資料表或索引。 若要讀取 sysrowsets 中的每個資料列,他必須在它目前讀取的專案上保留列級 S 鎖。 探索程式會在元組移動器找出它可以執行的第一個 rowset 時停止運作。 此時,元組移動移動器將會執行清除刪除緩衝區的實際工作,但若要確保探索到的行集合仍有效,它將會在探索程式中針對評估的所有行集保留 SCH 鎖,直到完成其工作為止。Sysrowsets 是依列集識別碼來排序,因此,元組移動器掃描了多個現有的未執行動作的集合,但仍會保留 SCH-s 鎖,而且它會在無法取得列層級 S 鎖的長時間執行事務中受到修改,因為它目前是由長時間執行的事務所變更,該事務在資料行上保留 X 鎖。 此時,涉及到 rowset 識別碼變更的 DDLs 會封鎖在元組移動器的 SCH S 鎖後。
狀態
Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。
參考
瞭解 Microsoft 用於描述軟體更新的 詞彙 。