
Dirceu Resende 是微软的高级项目经理,不久前,他曾验证服务器电源选项对查询的性能影响。他也是看了某 SQL Server 顾问的文章而验证的。文章提到,客户购买的新服务器比旧服务器要好得多,但查询比旧服务器却慢了一倍时间,这是由于Windows 电源计划设置引起的。
作者也想亲自测试一遍,以验证Windows 电源计划对SQL Server查询的影响。
创建测试数据
IF (OBJECT_ID('dbo.TesteCPU') IS NOT NULL) DROP TABLE dbo.TesteCPUSELECT TOP(10000) MyInt = CONVERT(BIGINT, o1.[object_id]) + CONVERT(BIGINT, o2.[object_id]) + CONVERT(BIGINT, o3.[object_id])INTO dbo.TesteCPUFROM sys.objects o1JOIN sys.objects o2 ON o1.[object_id] < o2.[object_id]JOIN sys.objects o3 ON o1.[object_id] < o3.[object_id]GO
用于测试的SQL脚本(强制使用所有 16 个逻辑CPU)
SELECT SUM(CONVERT(BIGINT, o1.MyInt) + CONVERT(BIGINT, o2.MyInt))FROM dbo.TesteCPU o1JOIN dbo.TesteCPU o2 ON o1.MyInt < o2.MyIntOPTION(MAXDOP 16) -- Forçar usar todos os cores do meu servidorGO
用于测试的处理器是 Intel i9 9900K,有 8 个核心( 16 个逻辑核心),启用了 Turbo Boost 2.0,最高频率设置为 4.7 GHz。
这里使用一个简单测试工具是SQLQueryStress,用于对数据库压测,这是很不错的工具,值得推荐。同时,为了管理电源计划、打开/关闭 Turbo Boost 以及管理CPU频率,使用了 Quick CPU 工具,该工具用于检查CPU运行情况也很不错。
使用 SQLQueryStress 工具,作者将在 10 次迭代中运行上面查询语句(强制使用所有 16 个内核),每次迭代同时运行 2 次。在每个查询之间添加了 2 秒的等待时间,让处理器“休息”并减少时钟。
使用“节能”计划:
总运行时间 59.21 秒,平均执行时间 3.91 秒,每次迭代的 CPU(并行度)为 18.5 秒

使用“高性能”计划:
总运行时间 43.64 秒,平均执行时间 2.33 秒,每次迭代的 CPU(并行度)为 10.56 秒

如上所见,在高性能电源计划中,总持续时间减少了 21%,平均执行时间减少了 40.4%,CPU 时间减少了 43%。
发生了什么?
要了解由于Windows 电源计划配置而导致性能如此差异的原因,我们先了解这些电源计划的工作原理。Windows 中默认有 3 个电源计划可选
平衡:此计划在你真正需要时为你提供全面的性能。此计划可在不活动期间节节能能。
节能:此计划通过降低系统性能来节节能力。它可以帮助移动 PC (如笔记本)用户有效利用电池电量。
高性能:此计划最大化系统性能和响应能力。对于移动 PC 用户的电池电量不会持续太长时间。
你也可以更改电源计划。打开电源选项,请打开 DOS 提示屏幕或运行窗口 (Windows + R),然后键入:
%windir%\system32\control.exe name Microsoft.PowerOptions

要准确了解这些 Windows 电源计划的不同之处,我们可以查看每个电源计划的高级设置:
节能(最低 CPU 使用率 5%,最高使用率 100%,被动冷却)

平衡(最低 CPU 使用率为 5%,最高使用率为 100%,主动冷却)

高性能(最低 CPU 使用率100%, 最高使用率为 100%,主动冷却)

正如我们所看到的,最大的区别在于冷却策略(主动/被动)和最低 CPU 使用率。在“平衡”和“节能”模式下,最低使用率为 5%,CPU 时钟频率在最大容量的 5% 到 100% 之间,具体取决于使用情况。在“高性能”电源模式下,Windows 将始终使用始终保持最大 CPU 容量。
在“平衡”和“节能”电源模式下,如果服务器有一段时间几乎没有活动并且突然收到一些复杂查询,那么当这个复杂查询到达时,它最终将不得不提高处理器速度,之后运行时,它会自动降低时钟以节约能量。
测试启用 Turbo Boost(睿频加速,Intel提高CPU时钟频率的超频技术),“节能”电源计划仅将处理器频率提升到处理器的额定最大值 (3.6 GHz) 并达到 1.4 GHz 的低点。当运行一些查询时,“平衡”电源计划达到 4.7 GHz,运行后,它在 3.5 GHz 和 4.5 GHz 之间变化。在“高性能”计划中,时钟在 4.5 和 4.7 GHz 之间变化。
这就是使用不同电源计划时存在的不同之处。使用 Quick CPU 你能更详细地分析电源计划。
重要提示:请记住检查“Turbo Boost”选项是否已启用(如果您的处理器是 Intel),因为它会自动增加 CPU 时钟频率,从而提高查询速度。此功能是处理器固有的,不被视为超频,因为它是由 CPU 本身和主板一起完成的。
查看或更改当前的电源计划
从控制面板、或者搜索、或者命令行打开“电源计划”面板
%windir%\system32\control.exe name Microsoft.PowerOptions
使用 Quick CPU 工具

使用命令行查看或修改
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\ControlPanel\NameSpace\{025A5937-A6BE-4686-A844-36FE4BEC8B6D}# PreferredPlan 的值有3种可选,可通过命令查看:C:\Users\JEESON>Powercfg List现有电源使用方案 (* Active)-----------------------------------电源方案 GUID: 381b4222-f694-41f0-9685-ff5bb260df2e (平衡) *电源方案 GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c (高性能)电源方案 GUID: a1841308-3541-4fab-bc81-f71556f20b4a (节能)# 更改powercfg.exe setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
使用TSQL查看或修改
-- 查看电源计划DECLARE @value VARCHAR(64)EXEC master.dbo.xp_regread@rootkey = 'HKEY_LOCAL_MACHINE',@key = 'SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes',@value_name = 'ActivePowerScheme',@value = @value OUTPUT;SELECT (CASEWHEN @value = '381b4222-f694-41f0-9685-ff5bb260df2e' THEN '(Balanced)'WHEN @value = '8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c' THEN '(High performance)'WHEN @value = 'a1841308-3541-4fab-bc81-f71556f20b4a' THEN '(Power saver)'END)-- 更改电源计划,如改为 High Performance 模式EXEC sys.xp_cmdshell 'powercfg.exe setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c'
最近文章推荐:
历史文章推荐:





