Tag Archives: SSMS

SQL Server 2016: Live Query Statistics

В SQL Server Management Studio появилась возможность наблюдать за ходом выполнения запроса. По мере выполнения плана запроса отображается взаимодействие между операторами и потоки данных. Этот процесс получил название Live Query Plan и показывает время работы запроса, прогресс на каждом операторе и количество данных. С помощью данного функционала можно более детально изучать работу запросов для их последующей оптимизации. Стоит отметить, что возможность появляется именно в новой SQL Server Management Studio, а работать будет как с SQL Server 2014, так и с SQL Server 2016.

Для того, чтобы увидеть Live Query Plan необходимо на панели инструментов нажать кнопку Include Live Query Statistics.

Также вы можете нажать правой кнопкой мыши на запросе и выбрать необходимый пункт из выпавшего меню.

После этого запустите запрос и сможете увидеть, как он будет выполняться вживую. Выглядеть это будет примерно следующим образом.

Зеленым выделен оператор, который уже завершился, стрелки, обозначающие потоки данных, прямые линии. Синим выделен оператор, который еще в процессе выполнения, потоки данных обозначены пунктиром, процент выполнения растет и количество строк тоже. Для каждого оператора отображается соответственно его время выполнения, оценочный процент выполнения, количество прошедших через него строк и ожидаемое количество строк. Если вдруг оптимизатор оценит количество строк неправильно, то у вас будет отображаться 99% выполнения, а количество строк будет постоянно расти. В этом случае предсказать время выполнения становится сложнее. Выглядеть это будет примерно так.

Также существует возможность посмотреть на Live Query Plan прямо из Activity Monitor путем нажатия правой клавишей мыши на интересующий нас запрос и выбора пункта Show Live Execution Plan.

Но для того, чтобы это сработало необходимо, чтобы в сессии, которая выполняет запрос был включен сбор статистики. Это можно сделать с помощью команд SET STATISTICS XML ON или SET STATISTICS PROFILE ON в нужной сессии, а также включив сбор расширенного события query_post_execution_showplan для нужных сессий. Будьте аккуратны, не активируете это для всех сессий на сервере, т.к. сбор статистики замедляет выполнение запросов.

Функциональность требует наличия прав SHOWPLAN и VIEW SERVER STATE, но эти права обычно всегда выдают тем, кто занимается диагностикой и оптимизацией запросов. Существуют также некоторые ограничения. Live Query Plan недоступен для Natively Compiled хранимых процедур.

Генерация скриптов для создания и удаления объектов SQL Server из SSMS

Довольно часто возникает потребность генерации скриптов для создания или удаления различных объектов MS SQL Server. Например, для создания идентичной по структуре базы данных на другом сервере или для сохранения перед внесением каких-либо серьезных изменений. В SQL Server Management Studio есть мощный строенный механизм генерации скриптов. Для этого достаточно щелкнуть правой клавишей мыши на нужной базе данных и выбрать пункт Tasks -> Generate Scripts для запуска мастера генерации скриптов.

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

Следующим этапом будет выбор объектов, для которых мы хотим сгенерировать скрипты. Можно оставить опцию по умолчанию, чтобы сгенерировать скрипты для всех объектов в базе данных, либо выбрать только нужные.

Сразу же мы можем наткнуться на определенные ограничения мастера, если нам необходимо, например, выбрать только объекты из какой-то схемы. Мы можем только вручную указать все объекты этой схемы, но мы не можем просто указать схему.

На следующей странице находится, пожалуй, самое важное – опции генерации скриптов. От них зависит, что в итоге будет сгенерировано для указанных нами раньше объектов. Мы не будем рассматривать возможность публикации сгенерированных скриптов на веб сервис, а ограничимся только сохранением их локальной копии.

Здесь мы можем выбрать путь, куда будет выложен один большой скрипт для всего, либо для каждого отдельного объекта. Также формат файла: Unicode или ANSI. И, несмотря на то, что для сгенерированного скрипта есть возможность не сохранять его в файл, а либо скопировать в буфер обмена, либо открыть его сразу в новом окне SSMS, я не рекомендую использовать эту опцию, т.к. для достаточно больших скриптов это не будет работать, а каким получится скрипт зачастую нельзя предугадать. Однако, если вы заранее знаете, что скрипт получится маленьким, то это вполне оправданно.

Также на этой странице находится самая важная кнопка, Advanced, при нажатии на которую откроется окно различных настроек генерации.

Самые интересные опции, на мой взгляд, значения которых по умолчанию могут вас не строить я выделил красными цифрами.

  1. По умолчанию генерируются только скрипты создания. Есть опция генерации команд на удаления, либо и то и другое одновременно.
  2. Версия SQL Server для которой создается скрипт. Эта опция может быть полезна, если вы хотите создать объекты на более ранней версии сервера, где какие-то возможности не поддерживаются или немного отличаются. В этом случае скрипты будут сгенерированы таким образом, чтобы не вызывать ошибку при их запуске.
  3. Также есть возможность при генерации включить в скрипты команды создания пользователей и их прав на указанные объекты.
  4. Вы можете контролировать, включить ли в скрипт только описание указанных объектов, либо добавить команды вставки данных, либо и то и другое одновременно. Очень полезно, когда есть необходимость для какой-либо таблицы или таблиц сформировать скрипт на вставку данных.
  5. По умолчанию при генерации скриптов таблиц не генерируются команды создания индексов, что также может быть полезно в некоторых случаях.

Конечно, тут еще много других полезных опций, которые могут пригодится по случаю, но это зависит от ситуации и ваших потребностей в генерации скриптов.

Установка offline документации для SQL Server 2012 на Windows 8

SQL Server 2012 поставляется без локальной версии всем привычных нам Books Online. Хорошо это или плохо вопрос спорный. Несомненно, эра широкополосного интернета пришла и одним из главных плюсов онлайн документации – это ее более актуальное состояние: онлайн версия обновляется чаще, чем локальная. Но, offline версия на мой взгляд удобнее в работе и она быстрее. В этой заметке я хотел бы рассказать, как установить локальную версию документации для SQL Server 2012 на Windows 8.

В первую очередь необходимо ее скачать по указанной ссылке http://www.microsoft.com/en-us/download/details.aspx?id=347. На момент написания заметки это версия по состоянию на декабрь 2012, но по этой же ссылке должна будет в будущем быть доступна и более свежая версия. Итак, мы скачали файл SQLServer2012Documentation_December2012_EN.exe размером чуть более 200 мегабайт. Запускаем его. Файл представляет из себя самораспаковывающийся архив. Распаковываем его во временную директорию.

По окончании распаковки мы получаем следующее сообщение.

Далее запускаем Microsoft Help Viewer.

На вкладке Manage Content выбираем Installation source с диска и указываем файл C:\Temp\SQLServer2012Documentation_December2012_EN\HelpContentSetup.msha.

Нажимаем напротив всех пунктов Add и жмем кнопку Update.

Все, процесс установки локальной версии документации завершен.

Что нового в 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 это не просто пакет обновлений и исправлений, он вносит новый достаточно интересный функционал в существующую платформу.

Используем цветовые подсказки при работе c SSMS

В SQL Server Management Studio есть замечательная возможность выделять разными цветами окна с подключениями к экземплрярам SQL Server. Например это может быть полезно, если все рабочие сервера вы выделите одним цветом, а тестовые другим. Таким образом это может служить дополнительной защитой от ошибки при подключении не к тому серверу. Давайте взглянем поближе, как это работает. В меню Registered Servers вы выбираете нужный вам сервер, нажимаете правую клавишу мыши и выбираете пункт Properties.

В появившемся окне со свойствами перейдите на вкладку Connection Properties. Вам нужно будет щелкнуть напротив Use custom color и выбрать тот цвет, который вам нужен. Например выберем красный.

Теперь каждый раз, когда из меню Registered Servers на этом сервере мы будем вызывать New Query, то окошко с запросом будет выглядеть примерно следующим образом:

Ярко-красная полоса снизу хорошо выделяется и может служить неплохим сигналом, если вы подключились к важному серверу и нужно быть осторожнее при выполнении команд.

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

Запуск T-SQL команды на нескольких экземплярах без использования CMS

С появлением SQL Server 2008 R2 стало возможным использовать Central Management Servers для запуска T-SQL команды сразу на нескольких экземплярах. Но, однако, такой трюк можно проделать и без установки и настройки CMS, если вы используете Registered Servers в SQL Server Management Studio. Для этого в SSMS нужно кликнуть правой клавишей мыши на нужной группе серверов или же на всей категории Local Servers Group и выбрать пункт New Query.

New Query on Local Server Group

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

Multiply Servers Query Result

В параметрах подключения для этого окна будет уже не отдельный сервер, а группа.

Query Windows Connection

Таким образом только с помощью SQL Server Management Studio можно с легкостью выполнить T-SQL команду сразу на нескольких серверах, что порой так необходимо при администрировании.