Как я перехитрил MS SQL Server 2012

Недавно предложили посмотреть один интересный сервер, работал не очень хорошо, жаловались.

Версия 2012 стандарт, 2 х 14 ядер процессора + Hyper-Threading. То есть, всего 56 логических ядер.

Исследование показало, что сервер поделил буфер на ноды. Но на одну ноду пришлось 28 ядер, а на другую 4. Почему?

Дело в том, что версия имеет ограничение по числу ядер. Допустимо 16 или 32 с HT. Сервер HT распознал, и согласился подключить 16 х 2 =32 ядра, но по очереди! Попытка добавить ядра приводила к браной ругани сервера на лицензионные ядра, заявленная конфигурация оплачена и лицензирована.

Дальше дело техники, в каждой ноде affinity mask по 16 логических ядер или 8 физических выходит. Но закралась такая нехорошая мысль..

У сервера задействованы 32 логических ядра из 56, нерационально.

Что сделал- affinity mask на ЧЕТНЫЕ ядра. 0, 2, 4.. HT делит физическое ядро на две половинки, при этом общая производительность растет на 10-15%. Чудес не происходит, нагрузка второго логического ядра сильно тормозит первое. Вот я эту нагрузку и убрал.

Получилось 28 четных ядер, а нечетные половинки отключил. 28 физических ядер!

Производительность сразу повысилась, ноды были задействованы равномерно, ожидания связанные с распараллеливанием резко снизились. С сервером еще много чего сделать пришлось, но это меня удивило- сервер позволил так распределить процессоры, чтобы под видом логических подложить ему физические ядра.

Как я перехитрил MS SQL Server 2012: 2 комментария

  1. Дмитрий

    Каким способом было выявлено неравномерное распределение?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *