光标
偏移是 CPU 时钟值的分歧。 具有多个 Cpu 的系统可以为同一时间点生成不同的 CPU 时钟值。 尽管这种情况不太常见,但 Cpu 可能会在一段时间内遇到时钟分隔。以下示例演示了偏差更改如何影响 SQL Server 跟踪中 duration 数据列的结果。 此示例假定 CPU 频率保持稳定,每毫秒200计时周期。 下表说明了此方案中的事件。
行为
Windows 计划 CPU
CPU 1 RDTSC
CPU 2 RDTSC
时钟时间
开始批处理
1
100
1100
0
结束批处理
2
900
1900
4毫秒
求和
4毫秒
SQL Server 在起始点和结束点处捕获 RDTSC 计时周期。 然后,SQL Server 将 RDTSC 计时周期除以 frequency 值。 在此示例中,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 毫秒
正确的值: (900-100 = 800)/200 = 4 毫秒
RPC:已完成事件的duration列的值将报告为9毫秒,而不是4毫秒。 此结果的精度超过4毫秒的正确值。将警告消息添加到 SQL Server 2005 以指示之前提到的性能输出可能不可靠。 在某些发现的情况下,SQL Server 2005 SP2 可能会报告有关以下内容的警告消息:
假偏差警告消息
偏移可能会变得数十毫秒,而不会导致系统显著影响
当你评估性能相关输出时,如果将性能相关输出与时钟时钟计时进行比较,则必须小心。 如果没有其他性能问题的迹象,通常可以忽略警告消息。 例如,在以下情况下,通常可以忽略警告消息:
进程按预期运行。
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 而没有问题,则通常可以忽略这些消息。