Compartilhar via


Coleção de dados e conjuntos de dados do observador de banco de dados (versão prévia)

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, ingerindo-os 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 notável no desempenho da carga 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 pelas consultas de monitoramento é limitado a uma pequena fração do total de recursos disponíveis para o banco de dados. Isso prioriza as cargas de trabalho do aplicativo em vez das consultas de monitoramento.

Para evitar conflitos de simultaneidade, como bloqueios e deadlocks, entre a coleção de dados e as cargas de trabalho de banco de dados em execução nos seus recursos do SQL do Azure, as consultas de monitoramento usam tempos limite de bloqueio curtos e baixa prioridade de deadlock. Se houver um conflito de simultaneidade, será dada prioridade às consultas de carga de trabalho do aplicativo.

Você pode observar lacunas nos dados coletados nos seguintes cenários:

  • Se a utilização geral de recursos for alta ou se houver conflitos de simultaneidade entre consultas de monitoramento e cargas de trabalho de aplicativo. Nesses casos, as consultas de monitoramento são despriorizadas em favor de cargas de trabalho do aplicativo.
  • Se você tiver uma automação que encerra sessões de longa duração. Para evitar lacunas nos dados coletados, exclua qualquer sessão em que a coluna program_name na visão do sistema sys.dm_exec_sessions seja SQLExternalMonitoring ou x_ms_reserved_sql_external_monitoring.

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. Um observador se conecta ao banco de dados âncora. Como o observador manté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 de â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, como métricas de utilização de recursos e taxa de solicitação para cada banco de dados. Para alguns cenários, adicionar um destino SQL de pool elástico para monitorar um pool elástico como um todo pode tornar 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 do banco de dados, metadados de tabela e índice, só estarão disponíveis se você adicionar bancos de dados individuais como destinos do SQL.

Se você adicionar bancos de dados individuais de um pool elástico como destinos do SQL, também deverá adicionar o pool elástico como um destino do SQL. 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 uma economia substancial de custos mantendo a alocação de recursos de computação no mínimo.

É importante ressaltar que essa abordagem pressupõe que apenas um pequeno número de bancos de dados no pool tenha consultas em execução ao mesmo tempo.

Aviso

Como as consultas de monitoramento devem ser executadas continuamente em todos os bancos de dados monitorados, não é recomendável monitorar mais do que alguns bancos de dados individuais em um pool elástico denso.

Se você adicionar muitos bancos de dados de um pool elástico denso como destinos do SQL, a utilização cumulativa de recursos pelas consultas de monitoramento em execução em cada banco de dados poderá afetar as cargas de trabalho do aplicativo devido a recursos insuficientes no pool.

Pelo mesmo motivo, você pode ver lacunas nos dados coletados ou intervalos maiores do que o esperado entre amostras de dados.

Para monitorar um pool elástico denso, habilite o monitoramento no nível do pool adicionando o próprio pool elástico como um destino SQL. Ao reduzir o número total de consultas de monitoramento no pool elástico, você evita o risco de afetar as cargas de trabalho do aplicativo, enquanto ainda coleta dados acionáveis no nível do pool nos conjuntos de dados do pool elástico do SQL.

Coleta de dados em bancos de dados sem servidor

Se um banco de dados sem servidor tiver a pausa automática desabilitada, o observador de banco de dados o monitorará como um banco de dados provisionado.

Se você habilitar a pausa automática em um banco de dados sem servidor, a coleta de dados do observador de banco de dados será interrompida quando o banco de dados for pausado. As consultas de monitoramento do observador de banco de dados não impedem que um banco de dados sem servidor faça uma pausa se ele estiver qualificado para pausar caso contrário.

Pouco depois que um banco de dados sem servidor faz a transição para um estado pausado , seu status no painel de resumo do observador é alterado para Não coletar. Os dados coletados anteriormente para o banco de dados permanecem no repositório de dados do inspetor e podem ser acessados por meio de dashboards e consultas.

A coleta de dados é retomada em poucos minutos após a transição do banco de dados da Pausa para o estado Online .

Residência de dados

Os clientes podem optar por armazenar dados de monitoramento do SQL coletados em um dos três tipos de armazenamento de dados:

  • Um banco de dados em um cluster do Azure Data Explorer. Por padrão, um novo cluster do Azure Data Explorer é criado para cada novo observador e está localizado na mesma região do Azure que o observador.

    Os clientes podem escolher a região específica do Azure em uma geografia do Azure como o local do cluster do Azure Data Explorer e do banco de dados. Para saber mais sobre capacidades de replicação de dados no Azure Data Explorer, consulte Visão geral da continuidade dos negócios e recuperação de desastres.

  • Um banco de dados em um cluster gratuito do Azure Data Explorer.

    Os clientes podem escolher a geografia específica do Azure, mas não a região específica do Azure como o local do cluster gratuito do Azure Data Explorer e do banco de dados. Não há suporte para a replicação de dados para uma região ou geografia diferente.

  • Um banco de dados na Análise em Tempo Real no Microsoft Fabric.

    Os clientes não podem escolher a localização geográfica do banco de dados.

Para controlar totalmente a localização dos dados para dados de monitoramento do SQL coletados, os clientes devem escolher um banco de dados em um cluster do Azure Data Explorer para armazenamento de dados.

Os clientes podem alinhar a geografia e a região de seu cluster do Azure Data Explorer à geografia e região dos recursos do SQL do Azure que estão sendo monitorados. Quando os recursos do SQL do Azure estão localizados em várias regiões, os clientes podem precisar criar vários observadores e vários clusters do Azure Data Explorer para atender aos requisitos de residência de dados.

Conjunto de dados

Esta seção descreve os conjuntos de dados disponíveis para cada tipo de destino do SQL, 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 agregadas 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:30 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 falta de memória 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 tempo de execução 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:30 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 na primária e réplicas secundárias quando coletadas em uma secundária.
Utilização de recursos sqldb_database_resource_utilization 00:00:15 Cada linha representa estatísticas de uso de CPU, E/S de dados, E/S de log e outros recursos de consumo 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 SOS sqldb_database_sos_schedulers 00:01:00 Cada linha representa um agendador SOS e inclui estatísticas para o agendador, o nó de CPU e o nó de memória.
E/S 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ões Persistentes.
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. Coletado quando o número de tabelas e exibições indexadas no banco de dados é 100 ou menos.
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 as estatísticas de espera no escopo do 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 Estatísticas de espera é coletado, mas contém apenas esperas no escopo do 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 do SQL, os conjuntos de dados têm colunas comuns, conforme descrito nas tabelas a seguir.

Nome da coluna Descrição
subscription_id A ID de assinatura do Azure do banco de dados SQL.
resource_group_name O nome do grupo de recursos do banco de dados SQL.
resource_id A ID de recurso do Azure do banco de dados SQL.
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 Uma das opções: 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 ID 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 visualização de gerenciamento dinâmico (DMV) sys.dm_db_resource_stats. O 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 um observador consulta essa DMV, o conjunto de resultados pode conter várias linhas, cada uma com um diferente end_time. Todas essas linhas têm o mesmo valor de collection_time_utc.