您目前已離線,請等候您的網際網路重新連線

修正: 效能變慢或 SQL Server 2012 SQL Server 2008 R2 中如果就會發生爭用以透過 QUERY_EXEC_STATS 的單一執行緒存取鎖便上述的高 CPU 使用率

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:2662301
Microsoft 發佈 Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) 或 Microsoft SQL Server 2012年修正了在單一可下載的檔案。因為的修正程式是累積的每個新版本包含的所有 hotfix,並且所有先前 SQL Server 2008 R2 Service Pack 1 (SP1) 或 Microsoft SQL Server 2012年隨附在安全性更新的更新版本。
徵狀
請考慮下列情況:
  • 您的電腦上安裝 Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2012年的執行個體。
  • 在並行如下所示的陳述式中執行的執行個體:
    CREATE PROC p AS RETURN (
    query
    ); EXEC p;
    或者,您執行查詢,其中包含下列程式碼:

    IF EXISTS(
    subquery
    );
  • CPU 使用率是一直都很高,而工作執行緒正處於執行狀態。
  • 對競爭 QUERY_EXEC_STATS 單一執行緒存取鎖很高。
    比方說,微調計數、 可能的衝突,以及上一步捨去的值 QUERY_EXEC_STATS 單一執行緒存取鎖快速地增加。
    附註 如需有關如何監視 QUERY_EXEC_STATS 單一執行緒存取鎖,請參閱 〈 其他資訊 〉 一節。

在這個案例中,可能會發生效能變慢。

發生的原因
因為,這個問題,就會發生 SQL Server 2008 R2 或 SQL Server 2012年會建立並終結全域的統計資料,而非快取它們的相關部份記憶體結構。這會造成效能瓶頸。
解決方案

累積更新資訊

SQL Server 2012

累積的更新程式 1] 中的 SQL Server 2012年首次發表的修正這個問題。如需有關此累積更新套件的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2679368 SQL Server 2012年的累積更新套件 1
附註 因為組建是累計的每個新的修正程式版本會包含所有的快速補充程式,並隨附於先前的 SQL Server 2012年所有安全性修正程式會都修正版本。Microsoft 建議您考慮將套用最新的修正程式版本,其中包含此 hotfix。如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2692828 SQL Server 2012年組建 SQL Server 2012年發行之後所發行,
您必須套用 SQL Server 2012 hotfix,才能安裝 SQL Server 2012年程序。

SQL Server 2008 R2 SP1 的累積更新套件 5

這個問題的修正程式首次發表累積更新 5] 中。如需有關如何取得此累積更新套件 SQL Server 2008 R2 sp1 的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2659694 SQL Server 2008 R2 SP1 的累積更新套件 5
附註 因為組建是累計的每個新的修正版本包含的所有 hotfix,並隨附於先前的 SQL Server 2008 R2 SP1 所有安全性修正程式會都修正版本。我們建議您考慮將套用最新的修正程式版本,其中包含此 hotfix。如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2567616 SQL Server 2008 R2 組建 SQL Server 2008 R2 SP1 發行之後所發行,
其他相關資訊
若要監視QUERY_EXEC_STATS單一執行緒存取鎖,請調整延遲與下列程式碼,您環境適用的反覆項目數目,然後執行它:

SET NOCOUNT ONCREATE TABLE #spins([Spinlock Name] varchar(50),Collisions numeric,Spins numeric,[Spins/Collision] float,[Sleep Time (ms)] numeric,Backoffs numeric, InsertTime datetime DEFAULT GETDATE())DECLARE @counter int = 1WHILE @counter < 10      BEGIN            INSERT INTO #spins ([Spinlock Name], Collisions, Spins, [Spins/Collision], [Sleep Time (ms)], Backoffs) EXECUTE ('DBCC SQLPERF (''SPINLOCKSTATS'') WITH NO_INFOMSGS')            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spins WHERE [Spinlock Name] = 'QUERY_EXEC_STATS' ORDER BY InsertTimeDROP TABLE #spins

狀況說明
Microsoft 已確認這是"適用於 」 一節所列出的 Microsoft 產品中的問題。

警告:本文為自動翻譯

內容

文章識別碼:2662301 - 最後檢閱時間:04/12/2012 10:27:00 - 修訂: 1.0

Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard

  • kbqfe kbfix kbexpertiseadvanced kbsurveynew kbmt KB2662301 KbMtzh
意見反應