Windows电源计划对 SQL Server的查询影响
Tags: MSSQLSQL Server电源计划
简介
Dirceu Resende 是微软的高级项目经理,不久前,他曾验证服务器电源选项对查询的性能影响。他也是看了某 SQL Server 顾问的文章而验证的。文章提到,客户购买的新服务器比旧服务器要好得多,但查询比旧服务器却慢了一倍时间,这是由于Windows 电源计划设置引起的。
作者也想亲自测试一遍,以验证Windows 电源计划对SQL Server查询的影响。
创建测试数据
1 2 3 4 5 6 7 8 | IF (OBJECT_ID('dbo.TesteCPU') IS NOT NULL) DROP TABLE dbo.TesteCPU SELECT TOP(10000) MyInt = CONVERT(BIGINT, o1.[object_id]) + CONVERT(BIGINT, o2.[object_id]) + CONVERT(BIGINT, o3.[object_id]) INTO dbo.TesteCPU FROM sys.objects o1 JOIN 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)
1 2 3 4 5 6 | SELECT SUM(CONVERT(BIGINT, o1.MyInt) + CONVERT(BIGINT, o2.MyInt)) FROM dbo.TesteCPU o1 JOIN dbo.TesteCPU o2 ON o1.MyInt < o2.MyInt OPTION(MAXDOP 16) -- Forçar usar todos os cores do meu servidor GO |
用于测试的处理器是 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),然后键入:
1 | %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 本身和主板一起完成的。
查看或更改当前的电源计划
- 从控制面板、或者搜索、或者命令行打开“电源计划”面板
1 | %windir%\system32\control.exe /name Microsoft.PowerOptions |
- 使用 Quick CPU 工具
- 使用命令行查看或修改
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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查看或修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | -- 查看电源计划 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 (CASE WHEN @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' |