徵狀
假設您使用的是 Microsoft SQL Server 2012 或 Microsoft SQL Server 2014 中的合併複製。 在同步處理常式中,[合併代理程式] 會在會話中產生新的新一代作業。 如果您出於某種原因(例如鎖死或超時),會選取產生的鎖死犧牲品,並回滾事務,可能會有一個大的封鎖鏈,可 MSinternal_makegeneration_inprog 讓您在即將推出的代 makings 中使用應用程式鎖定,而先前提及的會話則會顯示為標題封鎖。
原因
用來協助建立產生程式的應用程式鎖定是會話等級應用程式鎖定。 在產生處理常式期間偵測到鎖死時,只會回滾事務,但不會登出會話。 若要釋放會話等級的應用程式鎖,必須登出會話。 因此,由於重試邏輯的設計(在合併複製中產生失敗時不會登入會話),如果第一次產生失敗且發生鎖死,則在交易回復期間不會釋放會話鎖定(MSinternal_makegeneration_inprog) 。 這會造成在即將產生產生程式時封鎖鎖要求的連結。 頭封鎖程式會顯示為第一次產生失敗且鎖死的要求。 在修復程式之前,SQL Server 只會清除成功產生完成程式的鎖定。 如果發生鎖死,在會話登出之前,它會留下孤立的會話應用程式鎖。
解決方案
這個問題首先是在 SQL Server 的下列累積更新中修正。
SQL Server 2014 累積更新5 /en-us/help/3011055
SQL Server 2012 SP2 累積更新3 /en-us/help/3002049
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。