Свойства шага задания

Введение

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

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

Более подробно план выполнения запроса мы рассматривали в материале

Сегодня мы с Вами поговорим о том, как посмотреть план запроса и начать его анализировать. Однако сначала обязательно стоит отметить, что существует несколько типов планов запроса.

Типы планов выполнения запроса

Оптимизатор запросов Microsoft SQL Server формирует только один план выполнения для запроса, однако существует несколько типов планов выполнения запроса, которые можно отобразить с помощью SQL Server Management Studio (SSMS).

Предполагаемый план выполнения

Предполагаемый план выполнения (Estimated Execution Plan) – это план, созданный оптимизатором запросов на основе оценок.

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

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

За счет того, что запрос фактически не выполняется, это не создает никакой серьезной задержки перед отображением предполагаемого плана выполнения запроса.

Такой план удобно использовать в тех случаях, когда запрос выполняется долго, а нам необходимо посмотреть план, который собирается использовать SQL Server для данного запроса.

Действительный план выполнения

Действительный план выполнения (Actual Execution Plan) – это план, созданный оптимизатором запросов после фактического выполнения запроса. Иными словами, план становится доступным после выполнения SQL инструкции. Поэтому такой план отображает фактические метрики использования ресурсов.

Статистика активных запросов

Статистика активных запросов (Live Query Statistics) – это план, который создаётся в режиме реального времени. Такой план доступен во время выполнения SQL запроса и обновляется каждую секунду, что позволяет нам просматривать динамический план выполнения активного запроса.

Такая возможность позволяет нам анализировать процесс выполнения запроса в режиме реального времени по мере передачи управления от одного оператора плана запроса другому.

Динамический план запроса отображает общий ход выполнения запроса и текущую статистику выполнения на уровне оператора, например, число полученных строк, затраченное время, ход выполнения оператора и т. д. Так как эти данные доступны в режиме реального времени, чтобы их увидеть, не нужно дожидаться завершения запроса, такая статистика бывает полезна для отладки проблем с производительностью запросов. Статистика активных запросов доступна с версии SQL Server 2016.

Запуск PowerShell из агента SQL Server

Есть несколько типов шагов заданий агента SQL Server. Каждый тип связан с некоторой подсистемой, в которой реализуется определенная среда, например агент репликации или среда командной строки. Можно создавать скрипты Windows PowerShell, а затем использовать агент SQL Server, чтобы включить скрипты в задания, которые выполняются в запланированное время или в ответ на события агента SQL Server. Скрипты Windows PowerShell можно запускать либо с помощью шагов задания командной строки, либо с помощью шагов задания PowerShell.

  • Используйте шаги задания PowerShell для запуска подсистемой агента SQL Server служебной программы sqlps, запускающей PowerShell и импортирующей модуль sqlps. Если вы используете SQL Server 2019 или более поздней версии, мы рекомендуем использовать модуль в шаге задания Агента SQL.

  • Используйте шаг задания командной строки для запуска PowerShell.exe и укажите скрипт, импортирующий модуль sqlps .

Предупреждение, касающееся потребления памяти

Каждый шаг задания агента SQL Server, запускающий PowerShell с модулем sqlps, запускает процесс, которому требуется приблизительно 20 МБ памяти. Одновременный запуск большого числа шагов задания Windows PowerShell может иметь негативное влияние на производительность.

Создание шага задания PowerShell

Создание шага задания PowerShell

  1. Разверните раздел Агент SQL Server, создайте задание или щелкните правой кнопкой мыши существующее задание и выберите Свойства. Дополнительные сведения о создании заданий см. в разделе Создание заданий.

  2. В диалоговом окне Свойства задания выберите страницу Шаги и щелкните Создать.

  3. В диалоговом окне Новый шаг задания введите имя шага задания.

  4. В раскрывающемся списке Тип выберите PowerShell.

  5. В списке Выполнять как выберите учетную запись-посредник с учетными данными, используемыми в задании.

  6. В поле Команда введите синтаксис скрипта PowerShell, который будет выполняться в данном шаге. Или щелкните Открыть и выберите файл, содержащий скрипт.

  7. Выберите страницу Дополнительно, чтобы задать следующие параметры шага задания: какие действия будут предприняты в случае успешного или неуспешного выполнения шага задания, сколько раз агенту SQL Server пытаться его выполнить и как нужно часто повторять эти попытки.

Подключение к экземпляру SQL Server

  1. Запустите среду SQL Server Management Studio. При первом запуске SSMS откроется окно Подключение к серверу. Если этого не происходит, вы можете открыть его вручную, последовательно выбрав Обозреватель объектов > Подключить > Ядро СУБД.

  2. Откроется диалоговое окно Соединение с сервером . Введите следующие сведения:

    Параметр Рекомендуемые значения Описание
    Тип сервера Ядро СУБД В поле Тип сервера выберите Ядро СУБД (обычно это параметр по умолчанию).
    Имя сервера Полное имя сервера В поле Имя сервера введите имя SQL Server (при локальном подключении в качестве имени сервера также можно использовать localhost). Если вы НЕ ИСПОЛЬЗУЕТЕ экземпляр по умолчанию — MSSQLSERVER — необходимо ввести имя сервера и имя экземпляра. Если вы не знаете, как определить имя экземпляра SQL Server, см. раздел .
    Аутентификация Проверка подлинности Windows Проверка подлинности SQL Server По умолчанию используется проверка подлинности Windows. Также для подключения можно использовать режим Проверка подлинности SQL Server. Если выбран режим Проверка подлинности SQL Server, необходимо ввести имя пользователя и пароль. Дополнительные сведения о типах проверки подлинности см. в разделе Подключение к серверу (ядро СУБД).
    Имя входа Идентификатор пользователя учетной записи сервера Идентификатор пользователя учетной записи сервера, используемой для входа на сервер. Имя для входа, используемое для проверки подлинности SQL Server.
    Пароль Пароль учетной записи сервера Пароль учетной записи сервера, используемой для входа на сервер. Пароль, используемый для проверки подлинности SQL Server.
  3. После заполнения всех полей выберите Подключить.

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

  4. Чтобы убедиться в успешном подключении к экземпляру SQL Server, разверните и изучите объекты в обозревателе объектов, для которых отображаются имя сервера, версия SQL Server и имя пользователя. Эти объекты могут различаться в зависимости от типа сервера.

Изменение учетных записей, используемых службами

С помощью диспетчера конфигурации SQL Server можно управлять службами SQL Server .

Важно!

Всегда используйте такие средства SQL Server , как диспетчер конфигурации SQL Server , для изменения учетной записи, используемой службами SQL Server или агентом SQL Server , либо для изменения пароля учетной записи. Диспетчер конфигурации SQL Server не только изменяет имя учетной записи, но и выполняет дополнительную настройку, например установку разрешений в реестре Windows, чтобы новая учетная запись могла считывать настройки SQL Server . Другие средства, такие как диспетчер управления службами Windows, могут изменить имя учетной записи, но не изменяют соответствующие параметры. Если служба не может получить доступ к разделу реестра SQL Server , она может запуститься некорректно.

Дополнительное преимущество диспетчера конфигурации SQL Server , SMO и инструментария WMI заключается в том, что новые параметры вступают в силу немедленно без перезапуска службы.

Парсинг и компиляция запроса

 Первое, что должна сделать задача, когда она начинает выполнять запрос — это понять содержимое запроса. На этом этапе SQL Server ведёт себя как виртуальная машина для интерпретируемых языков: тест запроса будет распарсен и на его основе будет построено абстрактное синтаксическое дерево. Запрос (или пакет запросов) парсится сразу и полностью весь. Если на этом этапе возникает ошибка, запрос прерывается с ошибкой компиляции (запрос при этом считается завершённым, задача выполнена и рабочий поток может приступить к следующей ожидающей задаче).

SQL и TSQL – это высокоуровневые декларативные языки с крайне сложными выражениями (представьте SELECT с несколькими JOIN’ами). Компиляция запроса не приводит к появлению ассемблерных инструкций – или даже чего-то похожего на байт-код для JVM. Вместо этого строится план обращения к данным (или план запроса). План описывает, как именно обращаться к таблицам и индексам, как искать и находить нужные строки и выполнять дальнейшие манипуляции с полученными данными. Условно, план может звучать так:

Тут же сразу важное замечание:

Многие разработчики пытаются сделать из запроса швейцарский перочинный нож, который пригодится сразу в 10 разных ситуациях. Для этого обычно используются хитрые условия в секции WHERE, часто содержащие несколько вариантов, соединённых через OR (COLUMN = @parameter OR @parameter IS NULL). Это хорошая практика для разработчиков, придерживающихся принципа DRY — и старающихся избегать дублирования кода. Но в случае SQL-запросов это выливается в большие проблемы. Компиляция должна завершиться с планом, который будет приемлемым для каждой из 10 ситуаций, для которых предназначен такой запрос. Это значит, что план скорее всего будет хуже, чем 10 планов, подобранных для каждой из ситуаций по отдельности

Если вы следите за чистотой клиентского кода, рекомендую обратить внимание на приёмы динамического SQL

Пример интерактивной команды sqlcmd

Ниже приведен пример интерактивного выполнения программы sqlcmd .

При открытии окна командной строки там отображается только одна строка:

Это означает, что текущей папкой является , и если задать имя файла, то ОС Windows будет искать его в этой папке.

Для подключения к экземпляру sqlcmd по умолчанию на локальном компьютере введите SQL Server . Командная строка будет выглядеть следующим образом:

Это означает, что вы подключились к экземпляру SQL Server и что программа готова обрабатывать инструкции Transact-SQL и команды . Мерцающий знак подчеркивания после является приглашением , отмечающим местоположение вводимых инструкций и команд. Теперь введите USE AdventureWorks2012 и нажмите клавишу ВВОД, а затем введите GO и снова нажмите клавишу ВВОД. Содержимое окна командной строки будет выглядеть следующим образом.

Результирующий набор:

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

В следующем примере показано содержимое окна командной строки после ввода инструкции , команды для выполнения и команды для завершения программы :

Результирующий набор:

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

Задачи (Tasks)

«Задачи», упомянутые выше, создаются для выполнения запроса – и будут представлять запрос от начала и до конца выполнения. Например, если мы выполняем пакетный запрос (Batch request), задача будет представлять собой не отдельные команды, но весь скрипт. Отдельные команды из этого скрипта не будут создавать новые задачи. Некоторые команды из пакета могут выполняться с учётом параллелизма (тут надо вспомнить настройки, касающиеся степени параллелизма, Degree of Parallelism). Так вот, в этом случае Задача создаст Подзадачи для выполнения в несколько потоков.

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

Список задач можно увидеть, обратившись к sys.dm_os_tasks.

Когда новый запрос попадает на сервер и создаётся новая задача для выполнения этого запроса, она получает статус «ожидание» (PENDING). В этот момент сервер не имеет никакого понятия о том, что вообще делает новый запрос. В первую очередь задача должна начать выполняться – и для этого ей должны назначить рабочий поток (worker).

Подключение к экземпляру SQL Server

  1. Запустите среду SQL Server Management Studio. При первом запуске SSMS откроется окно Подключение к серверу. Если этого не происходит, вы можете открыть его вручную, последовательно выбрав Обозреватель объектов > Подключить > Ядро СУБД.

  2. Откроется диалоговое окно Соединение с сервером . Введите следующие сведения:

    Параметр Рекомендуемые значения Описание
    Тип сервера Ядро СУБД В поле Тип сервера выберите Ядро СУБД (обычно это параметр по умолчанию).
    Имя сервера Полное имя сервера В поле Имя сервера введите имя SQL Server (при локальном подключении в качестве имени сервера также можно использовать localhost). Если вы НЕ ИСПОЛЬЗУЕТЕ экземпляр по умолчанию — MSSQLSERVER — необходимо ввести имя сервера и имя экземпляра. Если вы не знаете, как определить имя экземпляра SQL Server, см. раздел .
    Аутентификация Проверка подлинности Windows Проверка подлинности SQL Server По умолчанию используется проверка подлинности Windows. Также для подключения можно использовать режим Проверка подлинности SQL Server. Если выбран режим Проверка подлинности SQL Server, необходимо ввести имя пользователя и пароль. Дополнительные сведения о типах проверки подлинности см. в разделе Подключение к серверу (ядро СУБД).
    Имя входа Идентификатор пользователя учетной записи сервера Идентификатор пользователя учетной записи сервера, используемой для входа на сервер. Имя для входа, используемое для проверки подлинности SQL Server.
    Пароль Пароль учетной записи сервера Пароль учетной записи сервера, используемой для входа на сервер. Пароль, используемый для проверки подлинности SQL Server.
  3. После заполнения всех полей выберите Подключить.

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

  4. Чтобы убедиться в успешном подключении к экземпляру SQL Server, разверните и изучите объекты в обозревателе объектов, для которых отображаются имя сервера, версия SQL Server и имя пользователя. Эти объекты могут различаться в зависимости от типа сервера.

Результаты

Результаты возвращаются обратно в клиентскую программу по мере выполнения запроса. Как только строка «всплывёт» в дереве выполнения, самый первый оператор обычно сразу записывает ее в сетевой буфер и отправляет клиенту. Результат не «подготавливается» в каком-то промежуточном хранилище (в памяти или на диске) – вместо этого он отправляется сразу по мере получения (то есть, по мере выполнения запроса). На этом этапе, конечно, свою роль играют сетевые протоколы управления потоком. Если клиент не выбирает результат (например, не выполняет SqlDataReaded.Read()), то сетевой поток заблокирует передающую сторону, а это, в свою очередь, приостановит выполнение запроса. Запрос продолжит выполнение и вернёт следующие строки результата (то есть, продолжит выполнение плана запроса) как только сетевой стек восстановит необходимые ресурсы.

Здесь интересно упомянуть возвращаемые (OUTPUT) параметры, связанные с запросом. Для того, чтобы вернуть возвращаемое значение клиенту, это значение должно быть вставлено в сетевой поток, передаваемый от запроса обратно клиенту. Значение может быть записано в поток только по окончании выполнения, как только запрос завершится. Именно поэтому возвращаемые параметры могут быть проверены только после получения всех результатов запроса или пакета запросов.

Параметры шагов задания скриптов ActiveX

Важно!

Подсистема сценариев ActiveX будет удалена из агента SQL Server в последующей версии MicrosoftSQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

VBScript
Указывает Microsoft Visual Basic Scripting Edition в качестве языка, используемого шагами задания.

Язык JScript
Указывает JScript в качестве языка, используемого шагами задания.

Другое
Введите имя языка для шагов задания, написанных на другом языке сценариев.

Открыть
Загрузить команду из файла.

Выделить все
Выбрать текст команды.

Копировать
Копировать выделенный текст.

Вставить
Вставить содержимое буфера обмена.

Примеры

Б. Выполнение динамически построенной строки

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

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

Примечание

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

Применение процедуры sp_executesql в этом случае более эффективно, чем использование инструкции EXECUTE для выполнения строки. При использовании процедуры sp_executesql формируется только 12 версий инструкции INSERT, по одной для таблицы каждого месяца. При использовании EXECUTE каждая инструкция INSERT должна быть уникальной, так как значения параметров будут различными. И хотя с помощью обоих методов будет создано одинаковое число пакетов, подобие инструкций INSERT, сформированных sp_executesql, увеличивает вероятность того, что оптимизатор запросов повторно использует планы выполнения.

В. Использование параметра OUTPUT

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

Подключение к экземпляру SQL Server

  1. Запустите среду SQL Server Management Studio. При первом запуске SSMS откроется окно Подключение к серверу. Если этого не происходит, вы можете открыть его вручную, последовательно выбрав Обозреватель объектов > Подключить > Ядро СУБД.

  2. Откроется диалоговое окно Соединение с сервером . Введите следующие сведения:

    Параметр Рекомендуемые значения Описание
    Тип сервера Ядро СУБД В поле Тип сервера выберите Ядро СУБД (обычно это параметр по умолчанию).
    Имя сервера Полное имя сервера В поле Имя сервера введите имя SQL Server (при локальном подключении в качестве имени сервера также можно использовать localhost). Если вы НЕ ИСПОЛЬЗУЕТЕ экземпляр по умолчанию — MSSQLSERVER — необходимо ввести имя сервера и имя экземпляра. Если вы не знаете, как определить имя экземпляра SQL Server, см. раздел .
    Аутентификация Проверка подлинности Windows Проверка подлинности SQL Server По умолчанию используется проверка подлинности Windows. Также для подключения можно использовать режим Проверка подлинности SQL Server. Если выбран режим Проверка подлинности SQL Server, необходимо ввести имя пользователя и пароль. Дополнительные сведения о типах проверки подлинности см. в разделе Подключение к серверу (ядро СУБД).
    Имя входа Идентификатор пользователя учетной записи сервера Идентификатор пользователя учетной записи сервера, используемой для входа на сервер. Имя для входа, используемое для проверки подлинности SQL Server.
    Пароль Пароль учетной записи сервера Пароль учетной записи сервера, используемой для входа на сервер. Пароль, используемый для проверки подлинности SQL Server.
  3. После заполнения всех полей выберите Подключить.

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

  4. Чтобы убедиться в успешном подключении к экземпляру SQL Server, разверните и изучите объекты в обозревателе объектов, для которых отображаются имя сервера, версия SQL Server и имя пользователя. Эти объекты могут различаться в зависимости от типа сервера.

Запрос к таблице и просмотр результатов

Результаты запроса выводятся под текстовым окном запроса. Чтобы запросить таблицу Customers и просмотреть вставленные строки, выполните следующие действия:

  1. Вставьте следующий фрагмент кода T-SQL в окно запросов и нажмите кнопку Выполнить.

    Результаты запроса отображаются под областью, где был введен текст.

    Вы также можете изменить представление результатов одним из следующих способов:

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

      Это задано по умолчанию.

      ; это параметр по умолчанию.

    • Третья кнопка позволяет сохранить результаты в файл, по умолчанию имеющий расширение .RPT.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: