KB3011807 - 修正:當您在 SQL Server 2012 或 SQL Server 2014 中使用合併式複寫時,會發生大型封鎖鏈結

Applies To
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

症狀

假設您在 Microsoft SQL Server 2012 或 Microsoft SQL Server 2014 中使用合併式複寫。 在同步處理程序中,合併代理程式會在工作階段中建立新的世代。 如果由於某種原因,例如鎖死或逾時,產生製作交易被選取為鎖死受害者,且交易被復原,則在未來的產生中可能會有MSinternal_makegeneration_inprog應用程式鎖定的大型封鎖鏈,並且前面提到的工作階段會顯示為頭部封鎖程式。

原因

用來協助保護產生處理程序安全的應用程式鎖是階段作業層次應用程式鎖。 在產生過程中偵測到鎖死時,只會復原交易,但不會登出工作階段。 若要釋放工作階段層級應用程式鎖定,工作階段必須登出。 因此,由於重試邏輯的設計 (在合併式複寫) 中生成失敗時不會登出會話,如果第一代製作失敗並出現死結,則在交易復原過程中不會釋放它所獲取的會話鎖 (MSinternal_makegeneration_inprog) 。 這會導致在即將產生的製程中封鎖鎖定請求的鏈。 頭部攔截器會顯示為第一代提出要求,但因鎖死而失敗。
在 Hotfix 之前,SQL Server 只會為成功的產生程序清除鎖定。 如果發生鎖死,它會在工作階段登出之前留下孤立的工作階段應用程式鎖定。

解決方式

此問題已先在下列 SQL Server 累積更新中修正。

適用於 SQL Server 2014 的累積更新 5 /zh-tw/help/3011055

SQL Server 2012 SP2 的累積更新 3 /zh-tw/help/3002049

關於 SQL Server 的累積更新

SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:

      

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。