Tag Archives: resource governor

MAXDOP и Resource Governor в MS SQL Server

В этой небольшой заметке я бы хотел немного рассказать о тонкостях в настройках параллелизма в Microsoft SQL Server. Очень многим из вас давно известна опция Max Degree od Parallelism, которая присутствует в SQL Server уже очень давно. По умолчанию она выставлена в 0, что значит, что SQL Server будет сам выбирать оптимальную степень параллелизма, то есть количество процессоров\потоков, задействованных для выполнения одной инструкции. Я сейчас не буду останавливаться и рассуждать, в какое же именно значении лучше выставлять эту опцию – это тема для отдельное заметки. Я лишь рассмотрю, как значение этой опции влияет на выполнение запросов. Например, ниже на рисунке, эта опция выставлена в 1, что означет, что параллельные планы для всех запросов по умолчанию отключены.

Также данная опция доступна для просмотра с помощью следующей команды T-SQL:

И действительно, любой план запроса по умолчанию будет последовательным. Например:

Однако, у разработчика и любого пользователя по-прежнему остается возможность повлиять на это путем использования подсказок (hints). Для этого всего лишь нужно указать нужную степень параллелизма, и генерируется нужный план запроса, например:

И если мы понаблюдаем на этот запрос через представление sys.dm_exec_query_profiles, то увидим, что он действительно выполняется в 10 потоков.

Таким образом, в системе остается потайной лаз, который могут использовать разработчики и пользователи, чтобы «ускорить» (тут я специально поставил в кавычки, т.к. не всегда большая степень параллелизма ведет к уменьшению времени выполнения запроса) свои запросы путем увеличения степени параллелизма. Но, таким образом, они могут просто «убить» сервер, запуская множество неконтролируемых параллельных запросов одновременно. Что же мы можем с этим сделать? Вот тут нам на помощь приходит Resource Governor, очень мощная и совершенно недооцененная система, которая позволяет очень гибко распределить ресурсы между разными группами пользователей. Опять же, я сейчас не буду останавливаться на том, как он устроен, и какими возможностями обладает. Я лишь остановлюсь подробно, как влияют его настройки ограничения параллелизма. Давайте для начала взглянем в настройки по умолчанию:

Опять мы видим, что по умолчанию опция выставлена в 0 и решение о выборе максимальной степени отдано на откуп SQL Server. Теперь посмотрим, что будет, если я поменяю это значение в 5. Внимание, ни в коем случае не делайте такие настройки на реальной системе, т.к. я даже не определил функцию классификации для Resource Governor и меняю default группу. Но для теста и понимания, как все работает конкретно сейчас на моем примере, этого хватит. Таким образом, я ограничиваю для всех максимальную степень параллелизма 5 потоками. Напомню, что опция Max Degree of Parallelism, которую мы рассматривали ранее выставлена по-прежнему в значение 1. Если мы теперь посмотрим на план выполнения нашего изначального запроса, то по умолчанию он будет последовательный, а с опцией maxdop 10 – параллельный. Но, если мы запустим параллельный план, то увидим кое-что интересное.

Теперь наш запрос выполняется только в 5 потоков, несмотря на то, что опция maxdop для него имеет значение 10. И, если вы укажете для запроса опцию maxdop 4, он будет выполняться в 4 потока (опция в Resource Governor установлена в 5). В этом случае подсказка maxdop меньше настройки Resource Governor, поэтому дополнительного ограничения не накладывается. Пример этого я уже не привожу.

Таким образом, Resource Governor является более мощным средством, который уже реально ограничивает максимальную степень параллелизма для запросов, и эту степень можно задать разную для разных групп пользователей. При этом опция Max Degree of Parallelism по-прежнему продолжает работать и вносит свою лепту (или слегка запутывает администраторов, разработчиков и пользователей, когда работает в купе с Resource Governor). Далее, лишь только вашей фантазией ограничены варианты выставления значений этих 2х параметров, но важно помнить лишь две вещи: Max Degree of Parallelism и подсказка (hint) maxdop для запроса влияет на то, какой план будет сгенерирован, сколько максимальное количество потоков будет возможно для этого запроса, а Resource Governor еще дополнительно сверху ограничивает запрос уже во время выполнения.

Что нового в SQL Server 2014

Microsoft SQL Server 2014 был анонсирован 3 июня на основном вступительном докладе Microsoft TechEd 2013. В этом месяце будет доступна для скачивания публичная сборка CTP1, а окончательная версия выйдет ориентировочно в начале 2014 года. Если откинуть в сторону все громкие маркетинговые заявления, что же действительно нового и полезного появляется в этом релизе?

  • In-Memory OLTP (кодовое название Hekaton) – встроенный в движок механизм, позволяющий создавать таблицы с данными, оптимизированные для непосредственного размещения в оперативной памяти, а также для хранимых процедур становится доступна возможность компилирования их в машинный код. Все это позволяет получить выигрыш в производительности в несколько раз. Наверное, это самая главная и ожидаемая «фишка» новой версии.
  • Колоночные индексы (Column Store Indexes) теперь становятся обновляемыми.
  • Появляется возможность расширения буферного пула на SSD.
  • Будут изменения непосредственно в движке исполнения запросов, что опять же должно будет положительно сказаться на производительности.
  • В AlwaysOn теперь будет поддерживаться до 8 реплик вместо 4х.
  • Улучшения при перестроении индексов в режиме онлайн.
  • Через Resource Governor теперь можно будет управлять IO ресурсами.
  • Также обещают возможность более гибкой выдаче прав, например, администратор сможет управлять системой и не иметь доступа к важным данным.
  • В SSMS появится мастер миграции БД с обычного сервера в Windows Azure Infrastructure Services.
  • Резервное копирование в Azure Storage.
  • Интеграция AlwaysOn с Windows Azure Infrastructure Services: появится возможность иметь реплики в облаке, а также мастер в SSMS для их легкого развертывания.

Также нас порадовали тем, что выйдет Windows Server 2012 R2 и SQL Server сможет воспользоваться новыми возможностями этой ОС:

  • Поддержка до 640 логических процессоров и до 4 TB оперативной памяти (для виртуальных машин поддерживается до 64 логических процессоров и до 1 TB RAM).
  • Виртуализация сетей облегчит миграцию SQL Server между ЦОД.
  • Появится возможность более гибко управлять дисковыми ресурсами. Например, автоматически вынести наиболее запрашиваемые данные на быстрое хранилище, а данные, к которым обращаются редко, наоборот, на более медленные диски.

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

Что нового в SQL Server 2012 SP1

Сегодня компания Microsoft на основном докладе конференции PASS анонсировала первый пакет обновления для SQL Server 2012 (Service Pack 1). Он уже доступен для скачивания по указанной ссылке. Я постараюсь кратко описать, что же нового в нем появилось и показать пару примеров.

Межкластерная миграция для AlwaysOn Availability Groups

В SQL Server 2012 SP1 появляется возможность миграции одной или нескольких AlwaysOn Availability Groups на новый экземпляр кластера Windows Server Failover Clustering (WSFC). Это значительно облегчит обновление существующего кластера на Windows Server 2012 благодаря уменьшению времени простоя.

Selective XML Index

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

DBCC SHOW_STATISTICS работает с правами SELECT

В предыдущих версиях SQL Server необходимо было обладать правами администратора или владельца объекта, чтобы просматривать результаты с помощью DBCC SHOW_STATISTICS. Данное ограничение очень сильно влияло, если мы использовали распределенные запросы, т.к. пользователи не имеют административных прав на удаленные объекты. Соответственно отсутствие информации о статистиках на удаленных объектах приводит к построению оптимизатором менее оптимальных планов запросов. В SQL Server 2012 SP1 теперь достаточно прав SELECT на таблицу целиком или на отдельные столбцы, чтобы посмотреть статистики для них. Для тех, кто использует распределенные запросы и может столкнуться с какими-либо проблемами введен флаг трассировки (trace flag) 9485, чтобы вернуть поведение новой функциональности до увроня SQL Server 2012 RTM. Хочу привести сразу пример результатов. Слева план запроса, который использует в качестве удаленного источника SQL Server 2012 RTM, а справа SQL Server 2012 SP1. Как мы видим – статистка начала использоваться.

Новая функция для просмотра статистики

Новая динамическая функция sys.dm_db_stats_properties возвращает информацию о статистиках для указанной таблицы или индексированного представления. Вы можете использовать эту функцию для просмотра тако информации как время последнего обновления статистики, количество строк, которое было использовано для построения статистики, а также количество изменений произошедших в столбце, что раньше было доступно только через недокументированные системные таблицы. Кстати, функция стала также доступна и в SQL Server 2008 R2 SP2. Привожу пример результатов работы данной функции:

Полная версия SQL Server Management Studio в редакциях Express

Теперь с редакциями Express поставляется полнофункциональная версия SQL Server Management Studio.

Поддержка SQL Server Management Objects для управления Resource Governor

В SQL Server 2012 SP1, SQL Server Management Objects обновлены и поддерживают синтаксис команды CREATE RESOURCE POOL (Transact-SQL):

  • CAP_CPU_PERCENT
  • AFFINITY SCHEDULER
  • AFFINITY NUMANODE

Следующие объекты SMO можно использовать для ограничения использования CPUи привязки ресурсных пулов к scheduler’ам и NUMA нодам:

Также появилось несколько улучшений в инструментах бизнес анализа, но так как я к бизнес анализу имею достаточно поверхностное отношение, то не буду о них рассказывать. Я думаю, вы при желании без труда найдете о них информацию. Как мы видим SQL Server 2012 SP1 это не просто пакет обновлений и исправлений, он вносит новый достаточно интересный функционал в существующую платформу.