Сегодняшняя моя заметка будет посвящена тому, как настройки энергопотребления в операционной системе и в BIOS могут влиять на производительность SQL Server. Сразу хочу предупредить, что данная статья не является руководством к действию. Все результаты, опубликованные в этой заметке, основаны на тестировании только одной определенной нагрузки и приводятся только в качестве примера. Ни в коем случае не стоит применять указанные в статье настройки преварительно не проведя тестирование на вашей нагрузке.
Для тестирования использовалась платформа Supermicro SuperServer 6017R-N3RF4+ с парой процессоров Intel® Xeon® Processor E5-2650 и включенным Hyper Threading, 64 Гб оперативной памяти и установленным Microsoft SQL Server 2008 R2.
Конфигурацию дисковой подсистемы я не привожу, т.к. для тестирования я выбрал запрос, который дает нагрузку только на процессор. Данные из таблицы объемом приблизительно 500 Мб и содержащие поле типа XML предварительно были закэшированы в Buffer Pool. Запрос проводит выборку из вышеуказанных данных, проводя над XML данными несколько операций с использованием методов nodes, query и value. Запрос я запускал несколько раз для каждой комбинации настроек как параллельно на всех логических процессорах, так и с опцией MAXDOP = 1.
За настройки энергопотребления CPU в BIOS отвечают следующие настройки в разделе CPU Power Management Configuration: Power Technology и Energy Performance Bias. По умолчанию они имеют значения Energy Efficiency и Balanced Performance. Соответственно, чтобы отключить экономию энергии для CPU я переключал эти параметры в значения Disabled и Performance соответственно.
В операционной системе в панели управления в разделе Power Options также можно выбрать один из 3х режимов энергопотребления. Значение по умолчанию Balanced. Причем перезапуск SQL Server или операционной системы после изменения не требуется – все начинает работать сразу.
Теперь я привожу результаты тестирования. Для начала посмотрим на время выполнения запроса с опцией MAXDOP = 1.
BIOS – настройки по умолчанию | BIOS, отключена экономия энергии для CPU | |
Power Options: Balanced | 3 мин. 15 сек. | 4 мин. 18 сек. |
Power Options: High performance | 3 мин. 10 сек. | 4 мин. 18 сек. |
Power Options: Power saver | 5 мин. 48 сек. | 4 мин. 18 сек. |
Как мы видим, если оставить настройки BIOS по умолчанию и менять параметры энергопотребления в операционной системе, то можно приблизительно на 2.5% ускорить запрос только выбрав значение High performance в Power Option. И напротив, что стало для меня удивлением, если изменить настройки в BIOS – мы наоборот, теряем в производительности.
А теперь давайте посмотрим на результаты, когда запрос выполнялся параллельно на 32 логических процессорах.
BIOS – настройки по умолчанию | BIOS, отключена экономия энергии для CPU | |
Power Options: Balanced | 25-26 сек. | 21 сек. |
Power Options: High performance | 18-19 сек. | 21 сек. |
Power Options: Power saver | 29 сек. | 21 сек. |
И опять получились довольно интересные результаты. Если изменить настройки BIOS по умолчанию, то мы получаем некоторый выигрыш в производительности. Но наилучший результат показывает ситуация, когда настройки BIOS не изменяются, а в настройках энергопотребления операционной системы мы выбираем High performance.
Итак, согласно результатам получается, что не стоит изменять настройки BIOS, но изменение параметров операционной системы может ускорить время выполнения от 2.5 до 30 процентов, что, согласитесь, очень и очень неплохо. Но опять же напомню, что я проверял только одну определенную нагрузку, хотя она и была в основном на CPU. Если у вас есть возможность провести подобное тестирование нагрузки на процессор, то призываю вас делиться результатами в комментариях – обсудим.