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

修正: SQL Server 資料庫鎖定活動增加時發生效能問題

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:2926217
注意事項
根據預設,SQL Server 2014年的 Service Pack 1 包含這個修正程式,而且您沒有新增任何的追蹤旗標,來啟用此修正程式。若要安裝其中一個累積更新解決方案一節中之後,請啟用此修正程式,您必須啟動 Microsoft SQL Server 服務的啟動參數中加入追蹤旗標 1236年。
徵狀
假設您在包含許多處理器的電腦上執行的 Microsoft SQL Server 2014年、 SQL Server 2012年、 SQL Server 2008 中或 SQL Server 2008 R2 執行個體。當鎖定數目 (資源類型 = 資料庫) 的特定資料庫超過特定臨界值,您會遇到下列的效能問題:
  • 較高的值會發生LOCK_HASH的單一執行緒存取鎖計數。

    注意請參閱 < 其他資訊 > 一節有關如何監視此單一執行緒存取鎖。
  • 查詢或需要資料庫鎖定作業需要長時間才能完成。例如,您可能會注意到下列的效能延遲:
    • SQL Server 登入
    • 連結的伺服器查詢
    • sp_reset_connection
    • 交易
附註若要找出清單的鎖定 (資源類型 = 資料庫) 上指定的資料庫,請參閱 < 其他資訊 > 一節。臨界值會依環境而有所不同。
解決方案

累積更新資訊

下列的累積更新 SQL Server 的第一次修正問題。

SQL Server 2008 R2 sp2 的累積更新 13

SQL Server 2008 SP3 的累積更新 17

SQL Server 2014年累積更新 1

SQL Server 2012 sp1 的累積更新 9

關於 SQL Server 的累積更新

每個新的累積更新的 SQL Server 包含的所有 hotfix 與安全性修正,全都包含在先前的累積更新。取出 SQL Server 的最新的累積更新:

Hotfix 資訊

支援的 hotfix 是可以從 Microsoft 取得的。不過,此 Hotfix 僅用於修正本文中所述的問題。此 Hotfix 只適用於發生此特定問題的系統上。

如果 Hotfix 可供下載,在此知識庫文件頂端將出現<有可用的 Hotfix 供您下載>區段。如果這個區段不會出現,將要求提交給 Microsoft 客戶服務及支援取得 Hotfix。

附註 如果發生其他問題,或如果需要進行疑難排解,您可能必須建立個別的服務要求。收取支援費用會套用其他支援問題,以及此特定 hotfix 無法解決的問題。如需 Microsoft 客戶服務和支援的電話號碼或建立個別的服務要求的完整清單,請造訪下列 Microsoft 網站: 附註 「 可下載 Hotfix 」表單會顯示 hotfix 可用的語言。如果看不到您的語言,是因為未提供該語言的 Hotfix 。

狀況說明
Microsoft 已確認這是<套用> 一節所列出的 Microsoft 產品的問題。
其他相關資訊
當應用程式會連接到 SQL Server 時,它首先會建立資料庫內容。根據預設,連線將會嘗試取得資料庫鎖定 SH 模式中。連線已停止,或連接的存留期期間變更資料庫內容時,會釋放SH 資料庫鎖定。如果您有許多使用相同的資料庫內容的使用中連線,您可以有很多鎖定資料庫資源類型,該特定的資料庫。

在電腦上具有 16 或多個 Cpu,只有資料表物件會使用鎖定資料分割的配置。不過,不會分割資料庫鎖定。因此,愈大的資料庫數目鎖定、 的時間就越長 SQL Server,以取得鎖定的資料庫。大部分的應用程式不會遇到任何問題所造成的這項設計。但是一旦數目超過特定臨界值時,額外的工作和時間,才能取得鎖定。雖然成本只有微秒鐘的每個額外的鎖定,可快速會提升的總時間,因為鎖定雜湊的雜湊桶受到使用單一執行緒存取鎖。這會造成額外的 CPU 循環,並等待 [額外的工作人員,取得鎖定。

此 hotfix 會介紹資料庫鎖定資料分割時在啟動時啟用追蹤旗標 T1236。分割資料庫鎖定會保留鎖定清單的深度的每個本機的磁碟分割。這大幅會最佳化存取路徑是用來取得資料庫鎖定。

若要監視LOCK_HASH單一執行緒存取鎖,您可以使用下列的查詢。
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @counter < 100      BEGIN            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats
如需有關診斷和解決在 SQL Server 上的單一執行緒存取鎖爭用的詳細資訊,請移至下列文件:

附註雖然 SQL Server 2008 R2 寫入這份文件時,資訊都仍適用於 SQL Server 2012年。
参考
如需有關在 SQL Server 2012年追蹤旗標的詳細資訊,請移至下列的 TechNet 網站:


如需有關如何在每個資料庫的使用者尋找資料庫的鎖定數目的詳細資訊,請使用下列查詢來計算這個值:
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks group by  Resource_database_id, resource_type, request_mode, request_status


警告:本文為自動翻譯

內容

文章識別碼:2926217 - 最後檢閱時間:07/29/2015 18:39:00 - 修訂: 7.0

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2008 Service Pack 3, Microsoft SQL Server 2008 R2 Service Pack 2

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbautohotfix kbhotfixserver kbmt KB2926217 KbMtzh
意見反應
="https://c.microsoft.com/ms.js">