Partilhar via


Monitorizar os Serviços de Aprendizagem Automática do SQL Server usando visões de gestão dinâmica (DMVs)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Instância Gerenciada SQL do Azure

Use exibições de gerenciamento dinâmico (DMVs) para monitorar a execução de scripts externos (Python e R), recursos usados, diagnosticar problemas e ajustar o desempenho nos Serviços de Aprendizado de Máquina do SQL Server.

Neste artigo, você encontrará os DMVs específicos para os Serviços de Aprendizado de Máquina do SQL Server. Você também encontrará exemplos de consultas que mostram:

  • Definições e opções de configuração para aprendizagem automática
  • Sessões ativas executando scripts Python ou R externos
  • Estatísticas de execução para o tempo de execução externo para Python e R
  • Contadores de desempenho para scripts externos
  • Uso de memória para o SO, SQL Server e pools de recursos externos
  • Configuração de memória para SQL Server e pools de recursos externos
  • Pools de recursos do Administrador de Recursos, incluindo pools de recursos externos
  • Pacotes instalados para Python e R

Para obter mais informações gerais sobre DMVs, consulte Vistas de Gestão Dinâmica do Sistema.

Sugestão

Você também pode usar os relatórios personalizados para monitorar os Serviços de Aprendizado de Máquina do SQL Server. Para obter mais informações, consulte Monitorar o aprendizado de máquina usando relatórios personalizados no Management Studio.

Visualizações de gerenciamento dinâmico

As exibições de gerenciamento dinâmico a seguir podem ser usadas ao monitorar cargas de trabalho de aprendizado de máquina no SQL Server. Para consultar os DMVs, você precisa de VIEW SERVER STATE permissão na instância.

Visualização de gerenciamento dinâmico Tipo Description
sys.dm_external_script_requests Execution Retorna uma linha para cada conta de trabalhador ativa que está executando um script externo.
sys.dm_external_script_execution_stats Execution Retorna uma linha para cada tipo de solicitação de script externo.
sys.dm_os_performance_counters Execution Retorna uma linha por contador de desempenho mantido pelo servidor. Se você usar a condição WHERE object_name LIKE '%External Scripts%'de pesquisa , poderá usar essas informações para ver quantos scripts foram executados, quais scripts foram executados usando qual modo de autenticação ou quantas chamadas R ou Python foram emitidas na instância em geral.
sys.dm_resource_governor_external_resource_pools Administrador de Recursos Retorna informações sobre o estado atual do pool de recursos externos no Administrador de Recursos, a configuração atual dos pools de recursos e as estatísticas do pool de recursos.
sys.dm_resource_governor_external_resource_pool_affinity Administrador de Recursos Retorna informações de afinidade de CPU sobre a configuração atual do pool de recursos externos no Administrador de Recursos. Retorna uma linha por agendador no SQL Server onde cada agendador é mapeado para um processador individual. Use esse modo de exibição para monitorar a condição de um agendador ou para identificar tarefas descontroladas.

Para obter informações sobre como monitorar instâncias do SQL Server, consulte Exibições de catálogo e Exibições de gerenciamento dinâmico relacionadas ao administrador de recursos.

Definições e configuração

Veja a definição de instalação e as opções de configuração dos Serviços de Aprendizado de Máquina.

Saída da consulta de definições e configuração

Execute a consulta abaixo para obter essa saída. Para obter mais informações sobre as exibições e funções usadas, consulte sys.dm_server_registry, sys.configurations e 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';

A consulta retorna as seguintes colunas:

Coluna Description
IsMLServicesInstalled Retorna 1 se o SQL Server Machine Learning Services estiver instalado para a instância. Caso contrário, retorna 0.
ScriptsExternosAtivados Retorna 1 se scripts externos estiverem habilitados para a instância. Caso contrário, retorna 0.
ImpliedAuthenticationEnabled Retorna 1 se a autenticação implícita estiver habilitada. Caso contrário, retorna 0. A configuração para autenticação implícita é verificada verificando se existe um logon para SQLRUserGroup.
IsTcpEnabled Retorna 1 se o protocolo TCP/IP estiver habilitado para a instância. Caso contrário, retorna 0. Para obter mais informações, consulte Default SQL Server Network Protocol Configuration.

Sessões ativas

Exiba as sessões ativas executando scripts externos.

Resultados da consulta das configurações ativas

Execute a consulta abaixo para obter essa saída. Para obter mais informações sobre as exibições de gerenciamento dinâmico usadas, consulte sys.dm_exec_requests, sys.dm_external_script_requests e 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;

A consulta retorna as seguintes colunas:

Coluna Description
identificador_de_sessão Identifica a sessão associada a cada conexão primária ativa.
ID_sessão_de_bloqueio ID da sessão que está bloqueando a solicitação. Se esta coluna for NULL, a solicitação não será bloqueada ou as informações da sessão de bloqueio não estarão disponíveis (ou não poderão ser identificadas).
estado Estado do pedido.
nome_da_base_de_dados Nome do banco de dados atual para cada sessão.
nome_de_login Nome de logon do SQL Server sob o qual a sessão está sendo executada no momento.
tempo_de_espera Se a solicitação estiver bloqueada no momento, esta coluna retornará a duração, em milissegundos, da espera atual. Não é anulável.
tipo_de_espera Se a solicitação estiver bloqueada no momento, esta coluna retornará o tipo de espera. Para obter informações sobre tipos de espera, consulte sys.dm_os_wait_stats.
last_wait_type Se essa solicitação tiver sido bloqueada anteriormente, esta coluna retornará o tipo da última espera.
tempo_total_decorrido Tempo total decorrido em milissegundos desde que o pedido chegou.
Tempo de CPU Tempo da CPU em milissegundos que é usado pela solicitação.
leituras Número de leituras realizadas por esta solicitação.
leituras_lógicas Número de leituras lógicas que foram executadas pela solicitação.
escritas Número de gravações realizadas por esta solicitação.
linguagem Palavra-chave que representa uma linguagem de script suportada.
grau_de_paralelismo Número que indica o número de processos paralelos que foram criados. Esse valor pode ser diferente do número de processos paralelos solicitados.
nome_utilizador_externo A conta de trabalho do Windows sob a qual o script foi executado.

Estatísticas de execução

Visualize as estatísticas de execução para o tempo de execução externo para R e Python. Apenas estatísticas de funções de pacote RevoScaleR, revoscalepy ou microsoftml estão disponíveis no momento.

Saída da consulta de estatísticas de execução

Execute a consulta abaixo para obter essa saída. Para obter mais informações sobre o modo de exibição de gerenciamento dinâmico usado, consulte sys.dm_external_script_execution_stats. A consulta retorna apenas funções que foram executadas mais de uma vez.

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

A consulta retorna as seguintes colunas:

Coluna Description
linguagem Nome da linguagem de script externa registrada.
nome_do_contador Nome de uma função de script externa registrada.
counter_value Número total de instâncias em que a função de script externo registada foi chamada no servidor. Esse valor é cumulativo, começando com a hora em que o recurso foi instalado na instância, e não pode ser redefinido.

Contadores de desempenho

Exiba os contadores de desempenho relacionados à execução de scripts externos.

Saída da consulta de contadores de desempenho

Execute a consulta abaixo para obter essa saída. Para obter mais informações sobre o modo de exibição de gerenciamento dinâmico usado, consulte 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 produz os seguintes contadores de desempenho para scripts externos:

Counter Description
Total de execuções Número de processos externos iniciados por chamadas locais ou remotas.
Execuções paralelas Número de vezes que um script incluiu a especificação @parallel e que o SQL Server foi capaz de gerar e usar um plano de consulta paralela.
Execuções de streaming Número de vezes que o recurso de streaming foi invocado.
Execuções do SQL CC Número de scripts externos executados onde a chamada foi instanciada remotamente e o SQL Server foi usado como contexto de computação.
Logins de autenticação implícitos Número de vezes que uma chamada de loopback ODBC foi feita usando autenticação implícita; ou seja, o SQL Server executou a chamada em nome do usuário que envia a solicitação de script.
Tempo Total de Execução (ms) Tempo decorrido entre a chamada e a conclusão da chamada.
Erros de execução Número de vezes que os scripts reportaram erros. Esta contagem não inclui erros R ou Python.

Utilização da memória

Exiba informações sobre a memória usada pelo sistema operacional, pelo SQL Server e pelos pools externos.

Saída da consulta de uso de memória

Execute a consulta abaixo para obter essa saída. Para obter mais informações sobre as exibições de gerenciamento dinâmico usadas, consulte sys.dm_resource_governor_external_resource_pools e 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;

A consulta retorna as seguintes colunas:

Coluna Description
memória_física_kb A quantidade total de memória física na máquina.
committed_kb A memória alocada em kilobytes (KB) no gestor de memória. Não inclui memória reservada no gerenciador de memória.
external_pool_peak_memory_kb A soma da quantidade máxima de memória usada, em kilobytes, para todos os pools de recursos externos.

Configuração de memória

Exiba informações sobre a configuração máxima de memória em porcentagem do SQL Server e pools de recursos externos. Se o SQL Server estiver sendo executado com o valor padrão de max server memory (MB), ele será considerado como 100% da memória do sistema operacional.

Saída da consulta de configuração de memória

Execute a consulta abaixo para obter essa saída. Para obter mais informações sobre os modos de exibição usados, consulte sys.configurations e 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;

A consulta retorna as seguintes colunas:

Coluna Description
nome Nome do pool de recursos externos ou SQL Server.
max_memory_percent A memória máxima que o SQL Server ou o pool de recursos externos pode usar.

Conjuntos de recursos

No Administrador de Recursos do SQL Server, um pool de recursos representa um subconjunto dos recursos físicos de uma instância. Você pode especificar limites na quantidade de CPU, E/S física e memória que as solicitações de aplicativos de entrada, incluindo a execução de scripts externos, podem usar dentro do pool de recursos. Exiba os pools de recursos usados para o SQL Server e scripts externos.

Saída da consulta de pools de recursos

Execute a consulta abaixo para obter essa saída. Para obter mais informações sobre as exibições de gerenciamento dinâmico usadas, consulte sys.dm_resource_governor_resource_pools e 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;

A consulta retorna as seguintes colunas:

Coluna Description
nome_do_pool Nome do pool de recursos. Os pools de recursos do SQL Server são prefixados com SQL Server e os pools de recursos externos são prefixados com External Pool.
total_horas_uso_cpu O uso cumulativo da CPU em milissegundos desde que as estatísticas do Administrador de Recursos foram redefinidas.
total_leituras_io_concluídas O número total de leituras de IO concluídas desde que as estatísticas do Governador de Recursos foram redefinidas.
escrita_io_concluída_total Os IOs de escrita totais concluídos desde que as estatísticas do Administrador de Recursos foram redefinidas.

Pacotes instalados

Você pode exibir os pacotes R e Python instalados nos Serviços de Aprendizado de Máquina do SQL Server executando um script R ou Python que os produz.

Pacotes instalados para R

Exiba os pacotes R instalados nos Serviços de Aprendizado de Máquina do SQL Server.

Saída dos pacotes instalados para consulta R

Execute a consulta abaixo para obter essa saída. A consulta usa um script R para determinar pacotes R instalados com o 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)));

As colunas retornadas são:

Coluna Description
Package Nome do pacote instalado.
Versão Versão do pacote.
Depends Lista o(s) pacote(s) do qual o pacote instalado depende.
Licença Licença para o pacote instalado.
LibPath Diretório onde você pode encontrar o pacote.

Pacotes instalados para Python

Exiba os pacotes Python instalados nos Serviços de Aprendizado de Máquina do SQL Server.

Saída dos pacotes instalados para consulta Python

Execute a consulta abaixo para obter essa saída. A consulta usa um script Python para determinar os pacotes Python instalados com o 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)));

As colunas retornadas são:

Coluna Description
Package Nome do pacote instalado.
Versão Versão do pacote.
Localização Diretório onde você pode encontrar o pacote.

Próximos passos