Share via


Conjuntos e coleção de dados do observador de dados (preview)

Aplica-se a:Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

O observador de banco de dados coleta dados de monitoramento de exibições do sistema SQL e os ingere no armazenamento de dados na forma de conjuntos de dados. Cada conjunto de dados é formado usando os dados de uma ou mais exibições do sistema SQL. Para cada conjunto de dados, há uma tabela separada no armazenamento de dados.

Coleta de dados

O observador de banco de dados coleta dados de monitoramento em intervalos periódicos usando consultas T-SQL. Os dados coletados em cada execução de uma consulta são denominados amostra. A frequência de coleta de amostra varia de acordo com o conjunto de dados. Por exemplo, dados que mudam com frequência, como contadores de desempenho de SQL, podem ser coletados a cada dez segundos, enquanto a maioria dos dados estáticos, como a configuração do banco de dados, pode ser coletada a cada cinco minutos. Para saber mais, confira Conjuntos de dados

O observador de banco de dados aproveita a ingestão de streaming no Azure Data Explorer e a Análise em Tempo Real no Microsoft Fabric para fornecer monitoramento quase em tempo real. Normalmente, os dados de monitoramento de SQL coletados ficam disponíveis para relatórios e análises em menos de dez segundos. Você pode monitorar a latência de ingestão de dados nos painéis do observador de banco de dados usando o link Estatísiticas de ingestão.

Interação entre o observador de banco de dados e cargas de trabalho do aplicativo

A habilitação do observador de banco de dados provavelmente não terá um impacto observável nas cargas de trabalho do aplicativo. Consultas de monitoramento mais frequentes geralmente são executadas no intervalo de subsegundos, enquanto consultas que podem exigir mais tempo, por exemplo, para retornar grandes conjuntos de dados, são executadas em intervalos pouco frequentes.

Para reduzir ainda mais o risco de impacto nas cargas de trabalho do aplicativo, todas as consultas do observador de banco de dados no Banco de Dados SQL do Azure são regidas por recursos como uma carga de trabalho interna. Quando a contenção de recursos está presente, o consumo de recursos por meio de consultas de monitoramento é limitado a uma pequena fração do total de recursos disponíveis para um banco de dados ou um pool elástico. Isso prioriza as cargas de trabalho do aplicativo em vez das consultas de monitoramento.

Na Instância Gerenciada de SQL do Azure, você pode habilitar o Resource Governor para gerenciar o consumo de recursos pelas consultas de monitoramento de maneira semelhante, se necessário.

O exemplo a seguir configura o Resource Governor em uma instância gerenciada de SQL. Ele limita o consumo de CPU por consultas do observador de banco de dados a 30% quando não há contenção de CPU. Quando há contenção de CPU, essa configuração reserva 5% da CPU para as consultas de monitoramento e limita seu uso da CPU a 10%. Ele também limita o tamanho de concessão de memória para cada consulta de monitoramento a 10% da memória disponível.

USE master;
GO

CREATE OR ALTER FUNCTION dbo.dbw_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN

DECLARE @WorkloadGroupName sysname = 'default';

IF APP_NAME() IN (N'SQLExternalMonitoring',N'x_ms_reserved_sql_external_monitoring')
    SET @WorkloadGroupName = N'database_watcher_workload_group'

RETURN @WorkloadGroupName;

END;
GO

BEGIN TRY

IF EXISTS (
          SELECT 1
          FROM sys.resource_governor_configuration
          WHERE classifier_function_id <> 0 OR is_enabled <> 0
          )
    THROW 50001, 'Resource Governor is already configured. No changes were made.', 1;

CREATE RESOURCE POOL database_watcher_resource_pool
WITH (MIN_CPU_PERCENT = 5, MAX_CPU_PERCENT = 10, CAP_CPU_PERCENT = 30);

CREATE WORKLOAD GROUP database_watcher_workload_group
WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10)
USING database_watcher_resource_pool;

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.dbw_classifier);

ALTER RESOURCE GOVERNOR RECONFIGURE;

END TRY
BEGIN CATCH
    THROW;
END CATCH;

Observação

Para tornar a configuração do Resource Governor imediatamente efetiva em uma réplica secundária de alta disponibilidade de uma instância gerenciada de SQL, conecte-se à réplica e execute ALTER RESOURCE GOVERNOR RECONFIGURE;.

Para evitar conflitos de simultaneidade, como bloqueios e deadlocks entre cargas de trabalho de coleção de dados e de banco de dados em execução em seus recursos de SQL do Azure, as consultas de monitoramento usam tempos limite de bloqueio e prioridade de deadlock baixos. Se houver um conflito de simultaneidade, será dada prioridade às consultas de carga de trabalho do aplicativo. Dependendo dos padrões de carga de trabalho do aplicativo, isso pode causar lacunas ocasionais nos dados coletados para alguns conjuntos de dados.

Coleção de dados em pools elásticos

Para monitorar um pool elástico, você deve designar um banco de dados no pool como o banco de dados âncora. O observador de banco de dados se conecta ao banco de dados âncora. Como o observador detém a permissão VIEW SERVER PERFORMANCE STATE, as exibições do sistema no banco de dados âncora fornecem dados de monitoramento para o pool como um todo.

Dica

Você pode adicionar um banco de dados vazio a cada pool elástico que deseja monitorar e designá-lo como o banco de dados âncora. Dessa forma, você pode mover outros bancos de dados para dentro e para fora do pool, ou entre pools, sem interromper o monitoramento do pool elástico.

Os dados coletados do banco de dados âncora contêm métricas no nível do pool e determinadas métricas de desempenho no nível do banco de dados para cada banco de dados no pool. Por exemplo, isso inclui a utilização de recursos e métricas de taxa de solicitação para cada banco de dados. Para alguns cenários, o monitoramento de um pool elástico como um todo torna desnecessário monitorar cada banco de dados individual no pool.

Determinados dados de monitoramento, como CPU no nível do pool, utilização de memória e armazenamento e estatísticas de espera, são coletados apenas no nível do pool elástico porque não podem ser atribuídos a um banco de dados individual em um pool. Por outro lado, outros dados, como estatísticas de runtime de consulta, propriedades de banco de dados, metadados de tabela e índice, estão disponíveis somente no nível do banco de dados.

Caso adicione bancos de dados individuais de um pool elástico como destinos do observador de banco de dados, você também deverá adicionar o pool elástico como destino. Dessa forma, você obtém uma visão mais completa do desempenho do banco de dados e do pool.

Monitorar pools elásticos densos

Um pool elástico denso contém uma grande quantidade de bancos de dados, mas tem um tamanho de computação relativamente pequeno. Essa configuração permite que os clientes obtenham economias substanciais de custos mantendo a alocação de recursos de computação no mínimo, supondo que apenas um pequeno número de bancos de dados no pool esteja ativo ao mesmo tempo.

Os recursos de computação disponíveis para consultas do observador de banco de dados em um pool elástico denso são ainda mais limitados para evitar afetar as consultas de aplicativos. Devido a isso, o observador de banco de dados talvez não possa coletar dados de monitoramento de todos os bancos de dados em um pool elástico denso.

Dica

Para monitorar um pool elástico denso, habilite o monitoramento no nível do pool adicionando o pool elástico como destino.

Não é recomendável monitorar mais do que alguns poucos bancos de dados individuais em um pool elástico denso. Você pode ver lacunas nos dados coletados ou intervalos maiores do que o esperado entre amostras de dados devido a recursos de computação insuficientes disponíveis para consultas do observador de banco de dados.

Conjunto de dados

Esta seção descreve os conjuntos de dados disponíveis para cada tipo de destino, incluindo frequências de coleta e nomes de tabela no armazenamento de dados.

Observação

Na preview, os conjuntos de dados podem ser adicionados e removidos. As propriedades do conjunto de dados, como nome, descrição, frequência de coleta e colunas disponíveis, estão sujeitas a alterações.

Nome do conjunto de dados Nome da tabela Frequência de coleta (hh:mm:ss) Descrição
Sessões ativas sqldb_database_active_sessions 00:00:30 Cada linha representa uma sessão que está executando uma solicitação, é um bloqueador ou tem uma transação aberta.
Histórico de backup sqldb_database_sql_backup_history 00:05:00 Cada linha representa um backup de banco de dados concluído com êxito.
Alterar o processamento sqldb_database_change_processing 00:01:00 Cada linha representa um instantâneo das estatísticas de verificação de logs agregados para um recurso de processamento de alterações, como Captura de Dados de Alterações ou Feed de Alterações (Link do Azure Synapse).
Erros de processamento de alterações sqldb_database_change_processing_errors 00:01:00 Cada linha representa um erro que ocorreu durante o processamento de alterações ao usar um recurso de processamento de alterações, como Captura de Dados de Alterações ou Feed de Alterações (Link do Azure Synapse).
Conectividade sqldb_database_connectivity 00:00:30 Cada linha representa um teste de conectividade (um logon e uma consulta) para um banco de dados.
Réplicas geográficas sqldb_database_geo_replicas 00:00:30 Cada linha representa uma réplica geográfica primária ou secundária, incluindo metadados e estatísticas de replicação geográfica.
Metadados de índice sqldb_database_index_metadata 00:30:00 Cada linha representa uma partição do índice e inclui as propriedades, as estatísticas operacionais e a definição de índice.
Utilização da memória sqldb_database_memory_utilization 00:00:10 Cada linha representa um administrador de memória e inclui o consumo de memória pelo administrador na instância do mecanismo de banco de dados.
Índices ausentes sqldb_database_missing_indexes 00:15:00 Cada linha representa um índice que pode melhorar o desempenho da consulta, se criado.
Eventos de memória insuficiente sqldb_database_oom_events 00:01:00 Cada linha representa um evento de memória insuficiente no mecanismo de banco de dados.
Contadores de desempenho (comuns) sqldb_database_performance_counters_common 00:00:10 Cada linha representa um contador de desempenho da instância do mecanismo de banco de dados. Esse conjunto de dados inclui contadores comumente usados.
Contadores de desempenho (detalhados) sqldb_database_performance_counters_detailed 00:01:00 Cada linha representa um contador de desempenho da instância do mecanismo de banco de dados. Esse conjunto de dados inclui contadores que podem ser necessários para o monitoramento detalhado e a solução de problemas.
Propriedades sqldb_database_properties 00:05:00 Cada linha representa um banco de dados e inclui opções de banco de dados, limites de governança de recursos e outros metadados de banco de dados.
Estatísticas de runtime de consultas sqldb_database_query_runtime_stats 00:15:00 Cada linha representa um intervalo de runtime do Repositório de Consultas e inclui estatísticas de execução de consultas.
Estatísticas de espera da consulta sqldb_database_query_wait_stats 00:15:00 Cada linha representa um intervalo de runtime do Repositório de Consultas e inclui estatísticas de categorias de espera.
Réplicas sqldb_database_replicas 00:00:10 Cada linha representa uma réplica de banco de dados, incluindo metadados e estatísticas de replicação. Inclui a réplica primária e réplicas geográficas quando coletadas no primário, e réplicas secundárias quando coletadas no secundário.
Utilização de recursos sqldb_database_resource_utilization 00:00:15 Cada linha representa CPU, E/S de dados, E/S de logs e outras estatísticas de consumo de recursos para um banco de dados em um intervalo de tempo.
Estatísticas da sessão sqldb_database_session_stats 00:01:00 Cada linha representa um resumo das estatísticas de sessão de um banco de dados, agregado por atributos de sessão não aditivos, como nome de logon, nome do host, nome do aplicativo etc.
Agendadores de SOS sqldb_database_sos_schedulers 00:01:00 Cada linha representa um agendador de SOS e inclui estatísticas para o agendador, o nó da CPU e o nó de memória.
ES de armazenamento sqldb_database_storage_io 00:00:10 Cada linha representa um arquivo de banco de dados e inclui IOPS cumulativas, produtividade e estatísticas de latência para o arquivo.
Utilização do armazenamento sqldb_database_storage_utilization 00:01:00 Cada linha representa um banco de dados e inclui seu uso de armazenamento, incluindo tempdb, Repositório de Consultas e Repositório de Versão Persistente.
Metadados da tabela sqldb_database_table_metadata 00:30:00 Cada linha representa uma tabela ou uma exibição indexada e inclui metadados, como contagem de linhas, uso de espaço, compactação de dados, colunas e restrições.
Estatísticas de espera sqldb_database_wait_stats 00:00:10 Cada linha representa um tipo de espera e inclui estatísticas de espera cumulativas da instância do mecanismo de banco de dados. Para bancos de dados em um pool elástico, somente estatísticas de espera com escopo de banco de dados são coletadas.

Observação

Para bancos de dados em um pool elástico, os conjuntos de dados do banco de dados SQL que contêm dados no nível de pool não são coletados. Isso inclui os conjuntos de dados de Utilização de memória, Eventos de memória insuficiente, Contadores de desempenho (comuns) e Contadores de desempenho (detalhados). O conjunto de dados de estatísticas de espera é coletado, mas contém apenas esperas com escopo de banco de dados. Isso evita a coleta dos mesmos dados de todos os bancos de dados no pool.

Os dados no nível de pool são coletados nos conjuntos de dados do pool elástico de SQL. Para um determinado pool elástico, os conjuntos de dados de Contadores de desempenho (comuns) e os Contadores de desempenho (detalhados) contêm métricas no nível do pool e determinadas métricas no nível do banco de dados, como CPU, E/S de dados, Gravação de logs, Solicitações, Transações etc.

Colunas comuns

Para cada tipo de destino, os conjuntos de dados têm colunas comuns, conforme descrito nas tabelas a seguir.

Nome da coluna Descrição
sample_time_utc O tempo em que os valores na linha foram observados, em UTC.
collection_time_utc A hora em que a linha foi coletada pelo observador, em UTC. Esta coluna está presente em conjuntos de dados em que o tempo de coleta pode ser diferente do tempo de amostra.
replica_type Um deles: Primário, Secundário de HA, Encaminhador de replicação geográfica, Secundário nomeado.
logical_server_name O nome do servidor lógico no Banco de Dados SQL do Azure que contém o banco de dados monitorado ou o pool elástico.
database_name O nome do banco de dados monitorado.
database_id A ID do banco de dados do banco de dados monitorado, exclusivo no servidor lógico.
logical_database_id Um identificador de banco de dados exclusivo que permanece inalterado durante a vida útil do banco de dados de usuário. Renomear o banco de dados ou alterar seu objetivo de serviço não altera esse valor.
physical_database_id Um identificador de banco de dados exclusivo para o banco de dados físico atual correspondente ao banco de dados de usuário. A alteração do objetivo do serviço de banco de dados faz com que esse valor seja alterado.
replica_id Um identificador exclusivo para uma réplica de computação de hiperescala.

Um conjunto de dados terá as colunas sample_time_utc e collection_time_utc se contiver amostras observadas antes de a linha ser coletada pelo observador de banco de dados. Caso contrário, o tempo de observação e o tempo de coleta serão os mesmos, e o conjunto de dados conterá apenas a coluna sample_time_utc.

Por exemplo, o conjunto de dados sqldb_database_resource_utilization é derivado da exibição de gerenciamento dinâmico (DMV) sys.dm_db_resource_stats. A DMV contém a coluna end_time, que é o tempo de observação de cada linha que relata estatísticas de recursos agregados para um intervalo de 15 segundos. Esse tempo é relatado na coluna sample_time_utc. Quando o observador de banco de dados consulta essa DMV, o conjunto de resultados pode conter várias linhas, cada uma com um end_time diferente. Todas essas linhas têm o mesmo valor de collection_time_utc.