Влияние настроек энергопотребления на производительность SQL Server

Сегодняшняя моя заметка будет посвящена тому, как настройки энергопотребления в операционной системе и в 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. Если у вас есть возможность провести подобное тестирование нагрузки на процессор, то призываю вас делиться результатами в комментариях – обсудим.

  • ya.a

    Сергей, отличная статья. Но в ней упущен один момент, как собственно понять что эта проблема есть и нужно работать над её решением. Исправляю сей недочёт. Для того что бы понять что у вас некоторые процессоры не используются на всю катушку (спят) нужно установить счетчик “Processor: %Processor Time)” на сутки и посмотреть равномерно ли распределяется нагрузка на процессоры с утра. Если вы увидите что при наступлении нагрузки (как правило с утра) она не равномерно распределена по всем CPU, то скорее всего ваши процессоры после ночного сна, ещё не успели проснуться и в этом виноват режим “Balanced”, попробуйте поставить на “High Perfomance” и проверьте считчики повторно. Примечание: если у вас OLTP система (MAXDOP=1), а не OLAP, то возможно что часть процессоров спит, так как на них нет нагрузки.

    Like or Dislike: Thumb up 0 Thumb down 0

    • Отличный комментарий. В свою очередь поделюсь еще информацией: позже я проводил тесты на IBM BladeCenter и там вообще не играло никакой роли, как были установлены параметры – сама система управляла энергопитанием. И время выполнения тестового запроса там сильно колебалось, в то время как на Supermicro оно было стабильным. Я вообще склоняюсь к факту, что энергопотребление в High Performance надо ставить сразу и без всяких дополнительных тестов. Идеальный вариант – создать OU на уровне AD, включить туда все MS SQL сервера в организации и повесить на OU доменную политику, которая сама рулит уже настройками (и не только энергопотребления).

      Like or Dislike: Thumb up 0 Thumb down 0

      • ya.a

        Microsoft в рамках программы Microsoft RAS (Premier Support) советует ставить в High Perfomance. 🙂
        Основы телепатии изучили видимо ))

        Like or Dislike: Thumb up 0 Thumb down 0

        • Да на самом деле набор параметров, значения которых по умолчанию не очень хороши и замена этих значений гарантированно не сделает хуже (на крайний случай просто не будет лучше) достаточно большой. 🙂 Просто они придерживаются консервативного подхода – всегда было такое значение по умолчанию – пусть остается.

          Like or Dislike: Thumb up 0 Thumb down 0