FIX: 多個並行處理查詢通知訂閱引發 SQL Server 2005 中或在 SQL Server 2008 中的相同物件上時,可能發生死結

文章翻譯 文章翻譯
文章編號: 975090 - 檢視此文章適用的產品。
Microsoft 為一個可下載檔案散佈 Microsoft SQL Server 2005 的修正程式。因為修正程式是累積,每個新版本包含所有 Hotfix 及先前的 SQL Server 2005 隨附所有安全性修正程式都修正發行。Microsoft 為一個可下載檔案散佈 Microsoft SQL Server 2008 的修正程式。因為修正程式是累積,每個新版本包含所有 Hotfix 及先前的 SQL Server 2008 隨附所有安全性修正程式都修正發行。
全部展開 | 全部摺疊

徵狀

考慮下列案例:
  • 在 Microsoft SQL Server 2005 中或在 Microsoft SQL Server 2008 中,您會設定某些資料表上的多個查詢通知訂閱。
  • 更新這些資料表。
  • 查詢通知訂閱的要求會引發並行。
在這種情況下查詢通知系統資料表 (,例如系統資料表以類似 sys.query_notification_xxxxxx 的名稱) 上可能發生死結。 此外,SQL Server 錯誤記錄檔會記錄下列死結圖表:
waiter id = process7f8dc48 模式 = U requestType = 等候,
waiter 清單
擁有者識別碼 = process873ce38 模式 = U,
擁有者清單
keylock hobtid = 72057594049462272 dbid = 5 objectname = <database>sys.query_notification_626101271 indexname = cidx id = lock178dd6c0
模式 = U associatedObjectId = 72057594049462272,
waiter id = process873ce38 模式 = U requestType = 等候,
waiter 清單
擁有者識別碼 = process7f8dc48 模式 = U,
擁有者清單
keylock hobtid = 72057594049462272 dbid = 5 objectname = <database>sys.query_notification_626101271 indexname = cidx id = lock176848c0
模式 = U associatedObjectId = 72057594049462272,
資源-清單
<query>,
inputbuf,
<query>,
框架 procname = 臨機操作行 = 1 sqlhandle = 0x020000009f5c4302918e8370f6d9bd71045a53f75b8056b3,
executionStack,
處理程序識別碼 = process873ce38 taskpriority = 0 logused = 0 waitresource = KEY: 5:72057594049462272 (0e0086ec58d5) waittime = 4984 ownerId = 574444809 transactionname = CQueryScan::BeginNotifXact lasttranstarted = <Date><Time>XDES = 0x732047f8 lockMode = U schedulerid = 7 kpid = 8068 狀態 = 暫止的 SPID = 133 sbid = 0 ecid = 0 的優先順序 = 0 transcount = 0 lastbatchstarted = <Date><Time>lastbatchcompleted = <Date><Time>clientapp =.NET SqlClient 資料提供者主機名稱 = <hostname>hostpid = 1824 loginname = <loginname>isolationlevel = 讀取認可的 (2) xactid = 574444808 currentdb = 5 lockTimeout = 4294967295 clientoption1 = 671088672 clientoption2 = 128056,
<query>,
inputbuf,
<query>,
框架 procname = 臨機操作行 = 1 sqlhandle = 0x020000009f5c4302918e8370f6d9bd71045a53f75b8056b3,
executionStack,
處理程序識別碼 = process7f8dc48 taskpriority = 0 logused = 0 waitresource = KEY: 5:72057594049462272 (0d006843edc7) waittime = 4984 ownerId = 574444769 transactionname = CQueryScan::BeginNotifXact lasttranstarted = <Date><Time>XDES = 0x6adc9528 lockMode = U schedulerid = 5 kpid = 676 狀態 = 暫止的 SPID = 293 sbid = 0 ecid = 0 的優先順序 = 0 transcount = 0 lastbatchstarted = <Date><Time>lastbatchcompleted = <Date><Time>clientapp =.NET SqlClient 資料提供者主機名稱 = <hostname>110 hostpid = 1272 loginname = <loginname>isolationlevel = 讀取認可的 (2) xactid = 574444768 currentdb = 5 lockTimeout = 4294967295 clientoption1 = 671088672 clientoption2 = 128056,
處理序清單
死結的犧牲者 = process873ce38,
死結清單

發生的原因

根據預設值,SQL Server 會使用 READ_COMMITTED 交易隔離等級。因此,SQL Server 內部查詢有可能會遇到的死結。在 < 徵狀 > 一節中所描述的案例,造成死結的查詢都是內部的查詢。

解決方案

SQL Server 2005 Service Pack 3

這個問題的修正程式先於累計更新 6 的 SQL Server 2005 Service Pack 3 發行。如更多有關此累積更新套件,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
974648SQL Server 2005 Service Pack 3 的累積更新套件 6
附註因為組建是累計,每個新的修正程式版本包含所有 Hotfix 及先前的 SQL Server 2005 隨附所有安全性修正程式都修正發行。Microsoft 建議您考慮安裝最新的修正程式發行版本包含此 Hotfix。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
960598SQL Server 2005 會建置發行 SQL Server 2005 Service Pack 3 之後所發行
Microsoft SQL Server 2005 的 Hotfix 會建立特定的 SQL Server Service Pack。您必須將 SQL Server 2005 Service Pack 3 Hotfix 套用到 SQL Server 2005 Service Pack 3 的安裝。預設狀況下,在 SQL Server Service Pack 中提供任何 Hotfix 包含在下一個 SQL Server Service Pack。

發行版本的 SQL Server 2008

重要如果您執行發行版本的 SQL Server 2008,您必須安裝此修正程式。

這個問題的修正程式先於累計更新 8 發行。如需有關如何取得此累積更新套件的 SQL Server 2008 的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
975976SQL Server 2008 的累積更新套件 8
附註因為組建是累計,每個新的修正程式版本包含所有 Hotfix 及先前的 SQL Server 2008 隨附所有安全性修正程式都修正版本。我們建議您考慮安裝最新的修正程式發行版本包含此 Hotfix。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
956909SQL Server 2008 建置發行 SQL Server 2008 之後所發行

SQL Server 2008 Service Pack 1

重要如果您執行 SQL Server 2008 Service Pack 1,您必須安裝此修正程式。

這個問題的修正程式先於累計更新 5 的 SQL Server 2008 Service Pack 1 發行。如更多有關此累積更新套件,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
975977SQL Server 2008 Service Pack 1 的累積更新套件 5
附註因為組建是累計,每個新的修正程式版本包含所有 Hotfix 及先前的 SQL Server 2008 隨附所有安全性修正程式都修正版本。Microsoft 建議您考慮安裝最新的修正程式發行版本包含此 Hotfix。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
970365SQL Server 2008 建置發行 SQL Server 2008 Service Pack 1 之後所發行
Microsoft SQL Server 2008 的 Hotfix 會建立特定的 SQL Server Service Pack。您必須將 SQL Server 2008 Service Pack 1 Hotfix 套用至 SQL Server 2008 Service Pack 1 的安裝。預設狀況下,在 SQL Server Service Pack 中提供任何 Hotfix 包含在下一個 SQL Server Service Pack。

套用此修正程式之後,隔離層級會設定成序列化當資料庫引擎存取系統資料表。

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

其他相關資訊

根據這個問題的原因,來調整及編製索引的典型的方法無法解決這個問題。Hotfix 用來暫時修改至較高的層級,某些部分以確定有問題的查詢無法執行成死結此交易的隔離等級。

?考

更多有關的 SQL Server 累加式維修模型會按一下下列文章編號,檢視發行項 「 Microsoft 知識庫 」 中:
935897累加式的維修模型是可以從 SQL Server 小組來傳遞回報問題的 Hotfix
為更多有關如何取得 SQL Server 2005 Service Pack 3,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
913089如何取得最新的 Service Pack,SQL Server 2005 的
如需有關 SQL Server 2005 Service Pack 3 (SP3) 中的新功能,以及關於 SQL Server 2005 SP3 的改進的詳細資訊,請造訪下列 Microsoft 網站]:
http://go.microsoft.com/fwlink/?LinkId=131442
更多有關的 SQL Server 更新命名的結構描述會按一下下列文章編號,檢視發行項 「 Microsoft 知識庫 」 中:
822499Microsoft SQL Server 軟體更新套件的新命名結構描述
如需有關軟體更新術語的詳細資訊,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明

屬性

文章編號: 975090 - 上次校閱: 2009年10月19日 - 版次: 1.1
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
關鍵字:?
kbmt kbexpertiseadvanced kbsurveynew kbqfe kbfix KB975090 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:975090
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com