当您使用实用程序或 $ 更改 CPU 频率的技术 SQL Server 计时值可能不正确

文章翻译 文章翻译
文章编号: 931279 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

Microsoft SQL Server 2005 使用高分辨率的 CPU 计数器提供 microsecond 计时功能。一个 microsecond 是毫秒的一个 millionth 的第二个 (或一个千分之十)。但是,SQL Server 计时值可能不正确,如果您使用更改 CPU 频率的技术。例如对于使用下列技术之一时可能会发生此问题:
  • CPU 单步执行
  • AMD Cool'n 安静技术
  • 各种电源使用方案
本文包含方法和其他信息可帮助您变通解决此问题。

症状

当设定统计 TIME 语句用于显示服务器执行、 分析,和编译时间时,您可能会获得不正确的值。例如对于您可能会注意到经过 SQL Server 执行时间的时间会更多 CPU 时间。此问题可能会影响性能调节的准确性。当您使用在服务器上"概要"一节中列出的技术之一时,会发生此问题。

原因

出现此问题的原因是您使用这些技术时,会更改 CPU 的频率。SQL Server 2005 使用高分辨率的 CPU 计数器提供 microsecond 计时功能。如果 CPU 的频率会更改为节能和降低散热输出,计算出的工期可能不正确。

解决方案

服务包信息

若要解决此问题,获得最新的 service pack,SQL Server 2005 年。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
913089如何获取最新的 service pack,SQL Server 2005 年
注意SQL Server 2005 Service Pack 3 中和更高版本的服务包中,则不使用处理器时间戳。这些版本的 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 数量若要启用处理器关系的语句
2002 年 cpuexec sp_configure 0x00000003 亲和力掩码

重新配置
2004 年 cpuexec sp_configure 0x0000000F 亲和力掩码

重新配置
8 cpuexec sp_configure 0x000000FF 亲和力掩码

重新配置
16 cpuexec sp_configure 0x0000FFFF 亲和力掩码

重新配置
32 cpuexec sp_configure 0xFFFFFFFF 亲和力掩码

重新配置
注意它可能不足以禁用 CPU 频率变体功能,而且在 BIOS 级别。 各种第三方实用程序可以更改 CPU 的频率。 甚至当 cpu 最大电源使用方案设置下,某些实现将启用频率调整。在这种情况下,执行性能调整 SQL Server 2005 中时,您必须禁用这些第三方实用程序。

若要同步 CPU 的频率和 CPU 时钟计数器使用第三方实用程序和驱动程序

在极少数的场合的系统可能要求更新从制造商联系以纠正 CPU 频率问题。它是一种最佳做法检查系统的最新的 BIOS、 微码和固件更新,如果您怀疑系统可能会有问题。

更多信息

Microsoft SQL Server 2000 和早期版本的 SQL Server 使用 Windows 计时机制。计时机制使用毫秒精度值。 通常,但是,此精度是 10 到 15 ms.,精度可能 55 毫秒一样大。 一位数的毫秒内频繁地完成 SQL Server 查询或跨越了 microsecond 时间。此精度要求高分辨率计时器。 因此,SQL Server 报告某些查询的持续时间为 0 ms.因此的这些版本很难监视性能和调整在早期版本的 SQL Server SQL Server 性能。

SQL Server 2005 通过提供 microsecond 计时功能使用高分辨率的 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
与其他 cpu 不同步的时间戳的计数器的 CPU 上调度程序 id 2。
错误消息 2
从 191469 CPU 时间戳频率已变为 1794177 每毫秒的刻度数。将使用新的频率
SQL Server 使用实时时间戳计数器 (RDTSC) 指令来获得 64 位 CPU 滴答计数。您可以将此值除以 CPU 频率,以将值转换为毫秒值。 出现 CPU 频率改变或偏移,则可能会出现计时变体。

CPU 单步执行

CPU 单步执行指故意更改 CPU 的频率。 CPU 单步执行可能也被称为 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 毫秒
  • 频率 100: 500/100 = 5 毫秒
这两个计时计算匹配 4 毫秒的实际墙上时钟时间。

如果此计算中使用一个 RPC: 完成 错误地报告跟踪事件,持续时间结束时间 的数据列。在 RPC: 完成 事件捕获开始墙上时钟时间并 CPU 刻度线的计数。 要获得更高分辨率计时比 Windows 提供了一个 SQL Server 的 SQL Server 2005、 持续时间结束时间 的数据列中跟踪的计算使用 24 小时制的 CPU 滴答计数。通过将 持续时间 列添加到 开始时间 列计算 结束时间 列。 在此的示例 结束时间 列计算方法是: 错误地将 2.5 毫秒或 5 毫秒于开始时间。

偏移

偏移为 CPU 时钟值中的一个分歧。 具有多个 cpu 的系统可能会产生不同的同一点的 CPU 时钟值在 $ 时间中。 尽管这不是公共的 cpu 可能会遇到随着时间的推移时钟分离。

下面的示例演示如何偏移更改如何影响 SQL Server 跟踪中的 持续时间 数据列的结果。 本示例假定 CPU 频率保持稳定在 200 毫秒每的计时周期。下表说明了此方案中的事件。
收起该表格展开该表格
操作Windows 计划的 CPUCPU 1 RDTSCCPU 2 RDTSC墙上的时钟时间
开始批处理110011000
结束批处理290019004 毫秒
总计4 毫秒
SQL Server 捕获 RDTSC 刻度,在起始点和终结点。然后,SQL Server RDTSC 滴答数除以频率值。在此的示例 Windows 计划 SQL Server 辅助线程在两个不同的 cpu 上。 第一个 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 毫秒
  • 更正值: (900 100 = 800) / 200 = 4 毫秒
持续时间 列的值在 RPC: 完成 事件将被报告为 9 毫秒,而不是 4 ms.此结果是多个加倍 4 毫秒的正确值。

偏移警告邮件都将添加到 SQL Server 2005,以指示前面提到的性能输出不可能可靠。在某些未覆盖的情况下 SQL Server 2005 SP2 都可能会报告有关以下警告消息:
  • false 偏移警告消息
  • 偏移会变得数十个毫秒为单位),而不会导致明显的系统效果
时,您在评估与性能相关的输出,当您比较与性能相关输出到墙上时钟计时,您必须非常小心。如果没有其他性能问题的迹象,则通常可以忽略偏移警告消息。例如对于您通常可以忽略在下列情况下的偏移警告消息:
  • 进程正在运行,如预期的那样。
  • SQL Server 查询未出现了奇怪的 durational 模式中运行。
  • 看不到其他瓶颈的迹象。
但是,忽略警告消息,我们建议您与该偏移之前与制造商联系,以确保没有已知 RDTSC 问题存在。

您可以返回到报告的行为和 SQL Server 2005 SP1 SQL Server 2005 的原始发行版中使用跟踪标记 8033 (–T8033)。SQL Server 2005 和 SQL Server 2005 SP1 的原始发行版不报告偏移警告消息。如果您正在发布的原始版本 SQL Server 2005 或 SQL Server 2005 SP1 而不会出现问题,您通常可以忽略该消息。

为什么 WAITFOR 延时语句正常工作? 什么是周期性的系统进程?

超时机制不受影响的高分辨率的设计。SQL Server 不使用高分辨率计时器基于计时器的活动。 某些超时活动基于使用 GetTickCount 函数的降低以后的分辨率计时器。这些超时活动包括锁定超时、 WAITFOR 延时语句和死锁检测。
有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
938448如果服务器使用双核 AMD 皓龙处理器或多处理器 AMD 皓龙处理器,基于 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 2005 Server Enterprise
  • 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
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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