當您使用公用程式或變更 CPU 頻率的技術時,SQL Server 的執行時間值可能會不正確

文章翻譯 文章翻譯
文章編號: 931279 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

Microsoft SQL Server 2005 中使用高解析度的 CPU 計數器,提供微秒計時功能。一個微秒是一個 millionth 的第二個 (或一),以毫秒的)。不過,SQL Server 的執行時間值可能不正確,如果您使用變更 CPU 頻率的技術。例如當您使用任何下列技術時,可能就會發生這個問題:
  • CPU 逐步執行
  • AMD Cool'n ' quiet 技術
  • 各種不同的電源配置
這份文件包含方法和可協助您解決這個問題的詳細資訊。

徵狀

使用 SET 統計資料 TIME 陳述式顯示伺服器執行、 剖析及編譯時間時,您可能會取得不正確的值。比方說,您可能會發現 SQL Server 的執行時間的已耗用時間是更多比 CPU 時間。這個問題可能會影響效能微調的正確性。當您在 < 摘要 > 一節,在伺服器上使用技術所列出的其中之一,就會發生這個問題。

發生的原因

CPU 頻率會變更當您使用這些技術時,就會發生這個問題。SQL Server 2005 中使用高解析度的 CPU 計數器,提供微秒計時功能。如果 CPU 頻率會變更以節省能源,並減少熱度輸出,計算的工期可能不正確。

解決方案

服務套件資訊

如果要解決這個問題,取得最新的 Service Pack 的 SQL Server 2005。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
913089如何取得最新的 Service Pack,SQL Server 2005 的
附註在 SQL Server 2005 Service Pack 3 和更新版本的 Service Pack 中,不會使用處理器時間戳記。這些版本的 SQL Server 2005 使用更可靠的計時器具有 1 毫秒的最大精確度。

狀況說明

這個問題已經先在 SQL Server 2005 Service Pack 3 中獲得修正。

其他可行方案

SQL Server 2005 需要執行精確的效能調整的已知且穩定的資料點。 如果您在電腦上啟用動態 CPU 頻率調整,您可以停用它們讓 CPU 維護一個穩定的頻率速率,來監視及調整 SQL Server 效能開始之前。如果要執行此動作使用下列方法。

若要強制維持在最大頻率 CPU 電腦上設定的電源配置

要這麼做,請您執行下列步驟:
  1. 按一下 [開始]、 按一下 [執行]、 輸入 Powercfg.cpl,然後按一下 [確定]]。
  2. 在 [電源選項內容] 對話方塊按一下 [電源配置 清單中的 [永遠]。
  3. 按一下 [確定]
一個三藏可能就會發生。一個三藏是 CPU 頻率值之間有分歧。如需詳細資訊請參閱漂移 」 一節。在這種情況下您必須重新啟動 Windows 中變更電源配置之後,重新同步處理所有 CPU 的頻率。

如果您不能重新啟動電腦,啟用 SQL Server 處理器相似性,若要防止 SQL Server 背景工作執行緒的 CPU 之間移動。當您執行這項操作時您沒有重新啟動電腦,即使發生 CPU 頻率值之間有分歧。 若要以便在伺服器上的所有 CPU 的 SQL Server 處理器相關性,您必須使用一個不同的遮罩在伺服器上的邏輯處理器數目而定。

下表列出範例案例。
摺疊此表格展開此表格
CPU 數目若要啟用處理器相關性的陳述式
02 CPUexec sp_configure 0x00000003 ' 關連遮罩'

重新設定
4 CPUexec sp_configure 0x0000000F ' 關連遮罩'

重新設定
8 的 CPUexec sp_configure 0x000000FF ' 關連遮罩'

重新設定
16 CPUexec sp_configure 0x0000FFFF ' 關連遮罩'

重新設定
CPU 32exec sp_configure 0xFFFFFFFF ' 關連遮罩'

重新設定
附註它可能不足,無法停用 BIOS 層級的 CPU 頻率變化功能。 各種協力廠商公用程式可以改變 CPU 的頻率。 某些實作啟用頻率調整,即使當 CPU 是在 [最大的電源配置設定。您必須在這種情況下停用這些協力廠商公用程式當您執行 SQL Server 2005 中調整效能。

使用協力廠商公用程式和驅動程式來同步處理 CPU 的頻率和 CPU 時脈計數器

在極少數情況下一個系統可能需要從製造廠商更正 CPU 頻率問題的更新。最好檢查最新的 BIOS、 微碼和韌體更新系統,如果您懷疑系統可能有問題。

其他相關資訊

Microsoft SQL Server 2000 及較早版本的 SQL Server 使用 Windows 計時機制。計時機制使用毫秒精確度值。 通常,此精確度不過是 10 至 15 ms.,精確度可能 55 ms 一樣大。 SQL Server 查詢經常在單一位數毫秒內完成,或跨越微秒的時間。此整數位數需要高解析度的計時器。 因此,這些版本 SQL Server 報表某些查詢期間為 0 ms.因此很難監視效能,並調整在較早版本的 SQL Server 中的 SQL Server 效能。

SQL Server 2005 可以藉由使用高解析度的 CPU 計數器來提供微秒計時功能改善正確性。當您在 < 摘要 > 一節中使用列出的技術時,報告的時間值可能不正確。

這個問題可能會影響下列物件和功能:
  • 追蹤事件:
    • 注意事項 事件
    • 在 [預存程序] 節點中的事件
    • TSQL 節點中的事件
    • [物件] 節點中的事件
    • 交易節點中的事件
  • 動態管理檢視:
    • sys.dm_exec_query_stats
    • sys.dm_exec_requests
    • sys.dm_exec_sessions
    • sys.dm_io_pending_io_requests
    • sys.dm_os_ring_buffers
    • sys.dm_os_sys_info
    • sys.dm_io_virtual_file_stats
    • sys.dm_os_wait_stats
  • SET 統計資料 TIME 陳述式
  • sysprocesses 系統資料表
安裝 SQL Server 2005 Service Pack 2 (SP2) 之後 SQL Server 會記錄錯誤訊息在錯誤記錄檔中當 SQL Server 會偵測到高解析度計時器是 [CPU 之間不同步。錯誤訊息表示效能計時可能不精確,使用者應該小心使用效能資料。

錯誤訊息的文字會類似下列的錯誤訊息之一:
錯誤訊息 1
排程器識別碼 2 上的 CPU,時間戳記計數器不是與其他 CPU 同步。
錯誤訊息 2
CPU 時間戳記頻率已經由 191469 變更成每毫秒 1794177 刻度。將使用新的頻率
SQL Server 會使用即時戳記計數器 (RDTSC) 指令,來取得 64 位元 CPU 的滴答計數。這個值可以除以 CPU 頻率將值轉換為毫秒值。 當 CPU 頻率變更或三藏發生時,可能就會發生計時變化。

CPU 逐步執行

CPU 逐步執行以 CPU 頻率定義為蓄意的變更。 CPU 逐步執行可能也被稱為 Intel SpeedStep 技術或 AMD PowerNow!技術。當 CPU 逐步執行發生,CPU 速度可能會增加或減少以節省能源和降低熱度輸出 50 MHz 為小的增量。 相同的非一致的記憶體存取 (NUMA) 節點內的 CPU 並不會獨立調整頻率。

下表說明了 CPU 踏腳變更可能會如何影響執行時間的計算。
摺疊此表格展開此表格
動作RDTSC 刻度每毫秒 (頻率) 的刻度牆時鐘時間
啟動批次12000
向下的頻率步驟2001001ms
結束批次5003ms
總計5004ms
SQL Server 會擷取 RDTSC 刻度,在 [開始] 及 [結束 RDTSC 刻度。然後,SQL Server 會將刻度的頻率值除以。

在這個範例使用 200 或 100 的頻率值時,會發生下列時間計算:
  • 頻率 200: 500 200 = 2.5 ms
  • 頻率 100: 500 100 = 5 毫秒
兩者都不計時計算符合實際牆時鐘時間的 4 毫秒。

如果這項計算中使用的 RPC: 已完成 追蹤事件、 工期結束時間 資料行所報告不正確。RPC: 已完成 事件擷取起始牆時鐘時間和 CPU 刻度計數。 若要取得更高解析度計時非 Windows 在 SQL Server 2005、 工期結束時間] 資料欄在 SQL Server 提供追蹤是由使用 24 小時制的 CPU 滴答計數計算。結束時間] 資料行的計算方式是將 [開始時間] 資料行中加入 持續時間 資料行。 在這個範例 結束時間] 資料行的計算方式是不正確地新增 2.5 毫秒或 5 毫秒來開始時間。

三藏

三藏是在 CPU 的時鐘值分歧。 多處理器的系統可能會產生相同的點不同的 CPU 時鐘值的時間。 雖然不常見,CPU 可能會遇到經過一段時間的時鐘分離。

下列範例會示範如何三藏變更可能會影響 SQL Server 追蹤中的 [工期] 資料行的結果。 此範例假設 CPU 頻率會保持穩定在 200 刻度每毫秒數。下表說明了此案例中的事件。
摺疊此表格展開此表格
動作Windows 排程 CPUCPU 1 RDTSCCPU 2 RDTSC牆時鐘時間
啟動批次110011000
結束批次290019004 毫秒
總計4 毫秒
SQL Server 會擷取 RDTSC 刻度在開始點和結束點。然後,SQL Server 會將 RDTSC 刻度的頻率值除以。在這個範例 Windows 會排程於兩個不同的 CPU SQL Server 背景工作執行緒。 在第一個 CPU (CPU 1) 上第一次執行服務批次的 SQL Server 背景工作執行緒。

不過,批次執行遭到中斷有些時候,SQL Server 傳送批次執行至暫止佇列。當 SQL Server 會傳送一次服務至可執行佇列此批次的 SQL Server 背景工作執行緒時,Windows 發送執行緒來執行第二個 CPU (CPU 2) 上。 SQL Server 背景工作執行緒完成 CPU 2 上執行。 因為的 CPU 三藏 CPU 2 從擷取結束刻度值是 1900 代替 900。 如果您啟用 SQL Server 處理器相關性,您可以避免這種行為。

在這個範例中使用下列時間計算:
  • 正確但報告值: (1900年 100 = 1800年) / 200 = 9 ms
  • 更正值: (900 100 = 800) / 200 = 4 毫秒
持續時間 資料行的值 RPC: 已完成 事件會被回報為代替 4 ms.這個結果是 9 毫秒以上加倍 4 毫秒的正確的值。

以指出先前所述之效能輸出可能不可靠的 SQL Server 2005 就會加入三藏警告訊息。在某些發現的情況下 SQL Server 2005 SP2 可能會報告有關下列的警告訊息:
  • false 三藏警告訊息
  • 三藏可能會變得數萬毫秒為單位),而不造成一個明顯的系統效果
當評估效能相關的輸出,並比較效能相關的輸出,以便牆時脈的時,您必須小心。如果都沒有其他效能問題的徵兆您通常可以忽略三藏警告訊息。比方說您通常可以忽略三藏警告訊息,請在下列情況下:
  • 如預期般執行處理程序。
  • SQL Server 查詢並未奇怪 durational 模式中執行。
  • 您看不到其他瓶頸的徵兆。
但是,您忽略警告訊息,我們建議您連絡三藏之前您的製造商,以確定沒有已知 RDTSC 問題存在。

您可以使用追蹤旗標 8033 (–T8033),若要回到 [報告行為在原始發行版本的 SQL Server 2005 和 SQL Server 2005 SP1 中。原始發行版本的 SQL Server 2005 和 SQL Server 2005 SP1 並不會報告三藏警告訊息。如果您正在執行原始發行版本的 SQL Server 2005 或 SQL Server 2005 SP1 沒有問題,您通常可以忽略該郵件。

為什麼 WAITFOR 延遲陳述式運作正常? 定期的系統處理程序呢?

逾時機制不會受到高解析度的設計。SQL Server 並不使用計時器活動高解析度的計時器。 某些逾時的活動都是以使用 GetTickCount 函式在降低的解析度計時器為基礎。這些逾時活動包括鎖定逾時、 延遲 WAITFOR 陳述式和死結偵測。
如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件]:
938448如果伺服器使用雙核心 AMD Opteron 處理器或多重處理器 AMD Opteron 處理器 Windows Server 2003 架構的伺服器可能會遇到的時間戳記計數器三藏
895980使用 QueryPerformanceCounter 函式的程式可能會不佳執行,Windows Server 2003 中和在 Windows XP 中
在本文所討論的協力廠商產品是由 Microsoft 以外的公司所製造的。Microsoft 不保證,暗示或其他有關這些產品的效能或可靠性。

屬性

文章編號: 931279 - 上次校閱: 2008年12月16日 - 版次: 7.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
關鍵字:?
kbmt kbtshoot kbexpertiseadvanced kbsql2005engine kbprb KB931279 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:931279
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