徵狀

當您在 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 用於描述軟體更新的 詞彙

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×