Мониторинг служб машинного обучения SQL Server с помощью динамических административных представлений

Применимо к: SQL Server 2016 (13.x) и более поздним версиям Управляемый экземпляр SQL Azure

Динамические административные представления можно использовать для отслеживания выполнения внешних скриптов (Python и R), мониторинга используемых ресурсов, диагностики проблем и настройки производительности в службах машинного обучения SQL Server.

В этой статье вы найдете динамические административные представления (DMV), специфичные для SQL Server Машинное обучение Services. Кроме того, в ней приводятся примеры запросов, которые демонстрируют:

  • Настройки и параметры конфигурации для служб машинного обучения
  • Активные сеансы, выполняющие внешние скрипты Python или R
  • Статистика выполнения для внешней среды выполнения Python и R
  • Счетчики производительности для внешних скриптов
  • Использование памяти для ОС, SQL Server и внешних пулов ресурсов
  • Конфигурация памяти для SQL Server и внешних пулов ресурсов
  • Пулы ресурсов регулятора ресурсов, включая внешние пулы ресурсов
  • Установленные пакеты для Python и R

Общие сведения о динамических административных представлениях см. в разделе Системные динамические административные представления.

Совет

Пользовательские отчеты также можно использовать для наблюдения за службами машинного обучения SQL Server. Дополнительные сведения см. в статье Мониторинг служб машинного обучения с помощью настраиваемых отчетов в Management Studio.

Представления динамического управления

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

Динамическое представление управления Тип Описание
sys.dm_external_script_requests Выполнение Возвращает строку для каждой активной рабочей учетной записи, в которой выполняется внешний скрипт.
sys.dm_external_script_execution_stats Выполнение Возвращает по одной строке для каждого типа запроса внешнего скрипта.
sys.dm_os_performance_counters Выполнение Возвращает по одной строке для каждого счётчика производительности, поддерживаемого сервером. Если используется условие поиска WHERE object_name LIKE '%External Scripts%', на основе этих сведений можно узнать, сколько скриптов выполнялось, какой режим проверки подлинности использовался для каждого из них или общее количество отправленных вызовов R или Python для экземпляра.
sys.dm_resource_governor_external_resource_pools Управляющий ресурсами Возвращает информацию о текущем состоянии внешнего пула ресурсов в Resource Governor, текущую конфигурацию пула ресурсов и статистику пула ресурсов.
sys.dm_resource_governor_external_resource_pool_affinity Управляющий ресурсами Возвращает сведения о привязке к ЦП для текущей конфигурации внешнего пула ресурсов в Resource Governor. Возвращает по одной строке для каждого планировщика в SQL Server, при этом каждому планировщику соответствует отдельный процессор. Используйте это представление для отслеживания состояния планировщика или выявления задач, вышедших из-под контроля.

Сведения о мониторинге экземпляров SQL Server см. в разделах Представления каталога и Динамические административные представления, связанные с регулятором ресурсов.

Параметры и конфигурация

Просмотр параметров установки и конфигурации служб машинного обучения.

Выходные данные запроса параметров и конфигурации

Чтобы получить эти выходные данные, выполните приведенный ниже запрос. Дополнительные сведения об используемых представлениях и функциях см. в разделах sys. dm_server_registry, sys.configurations и SERVERPROPERTY.

SELECT CAST(SERVERPROPERTY('IsAdvancedAnalyticsInstalled') AS INT) AS IsMLServicesInstalled
    , CAST(value_in_use AS INT) AS ExternalScriptsEnabled
    , COALESCE(SIGN(SUSER_ID(CONCAT (
                    CAST(SERVERPROPERTY('MachineName') AS NVARCHAR(128))
                    , '\SQLRUserGroup'
                    , CAST(serverproperty('InstanceName') AS NVARCHAR(128))
                    ))), 0) AS ImpliedAuthenticationEnabled
    , COALESCE((
            SELECT CAST(r.value_data AS INT)
            FROM sys.dm_server_registry AS r
            WHERE r.registry_key LIKE 'HKLM\Software\Microsoft\Microsoft SQL Server\%\SuperSocketNetLib\Tcp'
            AND r.value_name = 'Enabled'
            ), - 1) AS IsTcpEnabled
FROM sys.configurations
WHERE name = 'external scripts enabled';

Этот запрос возвращает следующие столбцы:

Столбец Описание
IsMLServicesInstalled Возвращает значение 1, если для экземпляра установлены службы машинного обучения SQL Server. В противном случае возвращается 0.
ExternalScriptsEnabled Возвращает значение 1, если для экземпляра включены внешние скрипты. В противном случае возвращается 0.
Подразумеваемая проверка подлинности включена Возвращает значение 1, если включена подразумеваемая проверка подлинности. В противном случае возвращается 0. Конфигурация для неявной проверки подлинности проверяется путем проверки наличия имени входа для SQLRUserGroup.
IsTcpEnabled Возвращает значение 1, если для экземпляра включен протокол TCP/IP. В противном случае возвращается 0. Для получения дополнительных сведений см. раздел Конфигурация сетевого протокола SQL Server по умолчанию.

Активные сеансы

Просмотр активных сеансов, выполняющих внешние скрипты.

Выходные данные запроса активных параметров

Чтобы получить эти выходные данные, выполните приведенный ниже запрос. Дополнительные сведения об используемых динамических административных представлениях см. в разделах sys.dm_exec_requests, sys.dm_external_script_requests и sys.dm_exec_sessions.

SELECT r.session_id, r.blocking_session_id, r.status, DB_NAME(s.database_id) AS database_name
    , s.login_name, r.wait_time, r.wait_type, r.last_wait_type, r.total_elapsed_time, r.cpu_time
    , r.reads, r.logical_reads, r.writes, er.language, er.degree_of_parallelism, er.external_user_name
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_external_script_requests AS er
ON r.external_script_request_id = er.external_script_request_id
INNER JOIN sys.dm_exec_sessions AS s
ON s.session_id = r.session_id;

Этот запрос возвращает следующие столбцы:

Столбец Описание
session_id Идентификатор сеанса, связанный со всеми активными первичными соединениями.
blocking_session_id Идентификатор сеанса, блокирующего данный запрос. Если этот столбец содержит значение NULL, то запрос не блокирован или сведения о сеансе блокировки недоступны (или не могут быть идентифицированы).
статус Состояние запроса.
database_name Имя текущей базы данных для каждого сеанса.
Имя пользователя Имя входа SQL Server, под которым выполняется текущий сеанс.
время_ожидания Если запрос в настоящий момент блокирован, в столбце содержится продолжительность текущего ожидания (в миллисекундах). Не допускает значение NULL.
wait_type Если запрос в настоящий момент блокирован, в столбце содержится тип ожидания. Сведения о типах ожиданий см. в разделе sys.dm_os_wait_stats.
last_wait_type Если запрос был блокирован ранее, в столбце содержится тип последнего ожидания.
общее_прошедшее_время Общее время, истекшее с момента поступления запроса (в миллисекундах).
время_процессора Время ЦП (в миллисекундах), затраченное на выполнение запроса.
читает Количество операций чтения, выполненных данным запросом.
логические_чтения Число логических операций чтения, выполненных данным запросом.
записывает Число операций записи, выполненных данным запросом.
язык Ключевое слово, которое представляет поддерживаемый язык скриптов.
степень_параллелизма Число, указывающее количество созданных параллельных процессов. Это значение может отличаться от количества запрошенных параллельных процессов.
external_user_name Рабочая учетная запись Windows, под которой был выполнен скрипт.

Статистика выполнения.

Просмотр статистики выполнения для внешней среды выполнения R и Python. В настоящее время доступна статистика по функциям пакетов RevoScaleR, revoscalepy или microsoftml.

Выходные данные запроса статистики выполнений

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

SELECT language, counter_name, counter_value
FROM sys.dm_external_script_execution_stats
WHERE counter_value > 0
ORDER BY language, counter_name;

Этот запрос возвращает следующие столбцы:

Столбец Описание
язык Имя зарегистрированного языка внешних скриптов.
counter_name Имя зарегистрированной функции внешних скриптов.
counter_value Общее количество вызовов зарегистрированной функции внешнего скрипта на сервере. Это значение является накопительным, начиная с момента установки функции в экземпляре, и его нельзя сбросить.

Счетчики производительности

Просмотр счетчиков производительности, связанных с выполнением внешних скриптов.

Выходные данные запроса счетчиков производительности

Чтобы получить эти выходные данные, выполните приведенный ниже запрос. Дополнительные сведения об используемом динамическом административном представлении см. в разделе sys.dm_os_performance_counters.

SELECT counter_name, cntr_value
FROM sys.dm_os_performance_counters 
WHERE object_name LIKE '%External Scripts%'

В результате запроса sys.dm_os_performance_counters выдаются следующие счетчики производительности для внешних скриптов:

Счетчик Описание
Общее количество выполнений Количество внешний процессов, запущенных с помощью локальных или удаленных вызовов.
Параллельное выполнение Количество раз, когда скрипт включал спецификацию @parallel, и когда SQL Server мог создать и использовать план параллельного запроса.
Потоковое выполнение Сколько раз была вызвана функция потоковой передачи.
Выполнение SQL CC Количество внешний скриптов, в которых вызов был создан удаленно, а SQL Server использовался в качестве контекста вычислений.
Подразумеваемые входы с проверкой подлинности Количество раз, когда вызов обратного цикла ODBC был выполнен с помощью подразумеваемой проверки подлинности; То есть SQL Server выполнил вызов от имени пользователя, отправляющего запрос скрипта.
Общее время выполнения (мс) Время, прошедшее между вызовом и его завершением.
Ошибки выполнения Количество ошибок, возникших при выполнении скриптов. Это количество не включает ошибки R или Python.

Использование памяти

Просмотр сведений о памяти, используемой ОС, SQL Server и внешними пулами.

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

Чтобы получить эти выходные данные, выполните приведенный ниже запрос. Дополнительные сведения об используемых динамических административных представлениях см. в разделе sys.dm_resource_governor_external_resource_pools и sys.dm_os_sys_info.

SELECT physical_memory_kb, committed_kb
    , (SELECT SUM(peak_memory_kb)
        FROM sys.dm_resource_governor_external_resource_pools AS ep
        ) AS external_pool_peak_memory_kb
FROM sys.dm_os_sys_info;

Этот запрос возвращает следующие столбцы:

Столбец Описание
physical_memory_kb Общий объем физической памяти компьютера.
committed_kb Выделенная память в килобайтах (КБ) в диспетчере памяти. Не включает зарезервированную память в диспетчере памяти.
external_pool_peak_memory_kb Максимальный суммарный объем памяти (в килобайтах), используемой всеми внешними пулами ресурсов.

Конфигурация памяти

Просмотр сведений о максимальной конфигурации памяти (в процентах) для SQL Server и внешних пулов ресурсов. Если SQL Server работает со значением max server memory (MB) по умолчанию, оно принимается за 100% памяти ОС.

Выходные данные запроса конфигурации памяти

Чтобы получить эти выходные данные, выполните приведенный ниже запрос. Дополнительные сведения об используемых представлениях см. в разделах sys.configurations и sys.dm_resource_governor_external_resource_pools.

SELECT 'SQL Server' AS name
    , CASE CAST(c.value AS BIGINT)
        WHEN 2147483647 THEN 100
        ELSE (SELECT CAST(c.value AS BIGINT) / (physical_memory_kb / 1024.0) * 100 FROM sys.dm_os_sys_info)
        END AS max_memory_percent
FROM sys.configurations AS c
WHERE c.name LIKE 'max server memory (MB)'
UNION ALL
SELECT CONCAT ('External Pool - ', ep.name) AS pool_name, ep.max_memory_percent
FROM sys.dm_resource_governor_external_resource_pools AS ep;

Этот запрос возвращает следующие столбцы:

Столбец Описание
имя Имя внешнего пула ресурсов или SQL Server.
max_memory_percent Максимальный объем памяти, который может использовать SQL Server или внешний пул ресурсов.

Пулы ресурсов

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

Выходные данные запроса пулов ресурсов

Чтобы получить эти выходные данные, выполните приведенный ниже запрос. Дополнительные сведения об используемых динамических административных представлениях см. в разделах sys.dm_resource_governor_resource_pools и sys.dm_resource_governor_external_resource_pools.

SELECT CONCAT ('SQL Server - ', p.name) AS pool_name
    , p.total_cpu_usage_ms, p.read_io_completed_total, p.write_io_completed_total
FROM sys.dm_resource_governor_resource_pools AS p
UNION ALL
SELECT CONCAT ('External Pool - ', ep.name) AS pool_name
    , ep.total_cpu_user_ms, ep.read_io_count, ep.write_io_count
FROM sys.dm_resource_governor_external_resource_pools AS ep;

Этот запрос возвращает следующие столбцы:

Столбец Описание
pool_name Имя пула ресурсов. Пулы ресурсов SQL Server имеют префикс SQL Server, а внешние пулы ресурсов — префикс External Pool.
общее_количество_часов_использования_цп Совокупное использование ЦП (в миллисекундах) с момента сброса статистики Resource Governor.
read_io_completed_total Общее количество операций чтения ввода-вывода, завершенных с момента сброса статистики Resource Governor.
write_io_completed_total Общее число завершенных операций записи ввода-вывода с момента сброса статистики Resource Governor.

Установленные пакеты

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

Установленные пакеты для R

Просмотр пакетов R, установленных в службах машинного обучения SQL Server.

Выходные данные запроса установленных пакетов для R

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

EXECUTE sp_execute_external_script @language = N'R'
, @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", "Version", "Depends", "License", "LibPath")]);'
WITH result sets((Package NVARCHAR(255), Version NVARCHAR(100), Depends NVARCHAR(4000)
    , License NVARCHAR(1000), LibPath NVARCHAR(2000)));

Возвращаются следующие столбцы:

Столбец Описание
Пакет Имя установленного пакета.
Версия Версия пакета.
Зависит Выводит список пакетов, от которых зависит установленный пакет.
Лицензия Лицензия установленного пакета.
LibPath Каталог, в котором находится пакет.

Установленные пакеты для Python

Просмотр пакетов Python, установленных в службах машинного обучения SQL Server.

Выходные данные запроса установленных пакетов для Python

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

EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pkg_resources
import pandas
OutputDataSet = pandas.DataFrame(sorted([(i.key, i.version, i.location) for i in pkg_resources.working_set]))'
WITH result sets((Package NVARCHAR(128), Version NVARCHAR(128), Location NVARCHAR(1000)));

Возвращаются следующие столбцы:

Столбец Описание
Пакет Имя установленного пакета.
Версия Версия пакета.
Расположение Каталог, в котором находится пакет.