Monitore o desempenho do banco de dados MySQL com métricas abrangentes coletadas pelo NRDOT Collector. Por padrão, o New Relic coleta as métricas referenciadas na seção Métricas padrão. É possível aprimorar o monitoramento ativando as métricas desejadas listadas na seção Métricas adicionais.
Métricas adicionais
As seguintes métricas estão desativadas por padrão, mas podem ser ativadas para obter insights mais profundos sobre o desempenho e a integridade do MySQL. Essas métricas são organizadas por funcionalidade e a maioria exige uma conexão direta com o MySQL.
Evento de log
db.server.query_sample
Visibilidade em tempo real das instruções de banco de dados atualmente em execução: um snapshot pontual obtido a cada coleta, não um log de execução completo. Desativado por padrão.
| Atributo | Descrição |
|---|---|
db.system.name | mysql |
mysql.threads.thread_id | Identificador exclusivo para a thread executando a instrução |
mysql.session.id | PROCESSLIST_ID: o ID da conexão visível via SHOW PROCESSLIST |
user.name | Usuário de thread em primeiro plano; vazio para threads em segundo plano |
db.namespace | Banco de dados atual da thread (processlist_db) |
mysql.threads.processlist_command | Tipo de comando, ou Sleep se ocioso |
mysql.threads.processlist_state | Ação/estado atual da thread |
db.query.text | Texto da instrução SQL |
mysql.events_statements_current.digest | Digest da instrução SHA-256 |
mysql.events_statements_current.timer_start | Contador monotônico de picossegundos marcando o início da instrução: uma chave estável por execução entre ciclos de coleta |
mysql.events_statements_current.timer_wait | Tempo de execução decorrido, em segundos |
mysql.events_waits_current.timer_wait | Tempo de espera decorrido, em segundos (exige o consumidor events_waits_current) |
mysql.wait_event_type | Classificação de espera de nível superior derivada do nome do evento de espera (io, lock, synch), ou CPU/User sleep/other quando não estiver realmente em espera. Emparelhado com mysql.wait_event. |
mysql.wait_event | Detalhamento da espera: o nome do evento de espera com seu segmento de categoria removido (por exemplo, table/sql/handler, mutex/innodb/checkpoint_state), ou CPU/User sleep/other quando não estiver realmente em espera. Emparelhado com mysql.wait_event_type. |
mysql.wait_type | Nome bruto e não processado do instrumento que produziu o evento de espera. Para o detalhamento analisado/categorizado, consulte mysql.wait_event_type / mysql.wait_event. |
mysql.session.status | waiting, running, ou other |
mysql.event_id | Thread + número do evento atual quando o evento foi iniciado |
client.address / client.port | Host/porta do cliente (porta preenchida apenas no MySQL 8.0.22+, caso contrário, 0) |
network.peer.address / network.peer.port | O mesmo, como atributos da camada de rede |
mysql.blocking.blockers | matriz JSON de {thread_id, session_id} tuplas, uma por bloqueador de bloqueio de linha concorrente do InnoDB para esta sessão (não apenas a primeira, se houver mais de uma). "[]" quando não bloqueado; o session_id de um bloqueador é null se ele se desconectou antes que pudesse ser resolvido. |
mysql.blocking.blocker.count | Contagem inteira de bloqueadores simultâneos. 0 significa não bloqueado. |
mysql.session.client_name | Identidade autorrelatada do driver do cliente (por exemplo, MySQL Connector/J), de session_connect_attrs. Vazio se o driver não enviar atributos de conexão. |
db.query.comment_tags / .nr_service_guid | Tags de comentário de correlação do APM: consulte (Opcional) Configurar a correlação entre APM e banco de dados |
db.query.text.normalized.hash | MD5 do SQL normalizado para correlação entre mecanismos |
Dica
Filtre o bloqueio com mysql.blocking.blocker.count > 0, não com != 0. null != 0 avalia TRUE em NRQL, o que incluiria silenciosamente sessões não bloqueadas em seus resultados.
db.server.top_query
As consultas que consomem mais tempo de execução, agregadas no lado do servidor pelo próprio performance_schema.events_statements_summary_by_digest do MySQL: um verdadeiro contador de execução por digest, não uma contagem de amostras. Desativado por padrão.
| Atributo | Descrição |
|---|---|
db.system.name | mysql |
db.query.text | Texto da instrução SQL (ofuscado) |
db.namespace | Do Digest SCHEMA_NAME |
mysql.events_statements_summary_by_digest.digest | Digest da instrução SHA-256 |
mysql.events_statements_summary_by_digest.count_star | Vezes que a instrução foi executada, relatadas como um delta por coleta, não cumulativo |
mysql.events_statements_summary_by_digest.sum_timer_wait | Tempo total de execução, delta em segundos |
mysql.events_statements_summary_by_digest.sum_rows_examined / .sum_rows_sent | Contagens de linhas delta. Dividir por count_star fornece médias por execução. Estas são contagens de linhas, não leituras lógicas. |
db.query.comment_tags / .nr_service_guid | Igual a query_sample |
db.query.text.normalized.hash | Igual a query_sample |
db.server.query_plan
Plano de execução para uma instrução, reportado como seu próprio evento para que o plano possa ser filtrado, roteado ou descartado independentemente das próprias estatísticas de top_query/query_sample. Requer que pelo menos um de db.server.top_query ou db.server.query_sample também esteja ativado. Uma vez ativado, mysql.query_plan não é mais incluído nos registros de db.server.top_query/db.server.query_sample. Consulte Coleta do plano de execução para entender a mecânica de EXPLAIN.
| Atributo | Descrição |
|---|---|
db.system.name | mysql |
db.namespace | O banco de dados/esquema padrão para a consulta. Nas amostras de consulta, este é o banco de dados atual da thread (processlist_db); nas principais consultas, é o SCHEMA_NAME do digest. Vazio quando nenhum banco de dados padrão foi selecionado. |
mysql.query_plan.hash | Definido como o mesmo valor de mysql.events_statements_summary_by_digest.digest (digest da consulta) por design |
mysql.query_plan.source | O evento para o qual o plano foi relatado (db.server.top_query ou db.server.query_sample), para que os planos possam ser roteados ou descartados por evento de origem |
mysql.query_plan | O plano de consulta para a instrução, se disponível |
Coleta do plano de execução
EXPLAIN precisa de uma instrução SQL literal: o texto de resumo normalizado usa espaços reservados (SELECT ? FROM t WHERE id = ?) que o MySQL não pode executar.
| Versão do MySQL | Disponibilidade do plano |
|---|---|
8.0.3+ | Disponível: query_sample_text na tabela de resumo do digest contém uma instrução real para EXPLAIN |
5.x, 8.0.0–8.0.2 | Não disponível: nenhum query_sample_text para explicar |
Se uma instrução capturada for truncada (terminar em ...), EXPLAIN é ignorado em todas as versões. Consulte Parâmetros de servidor recomendados.
explain_mode | Comportamento |
|---|---|
inline (padrão) | Executa EXPLAIN FORMAT=json <statement> diretamente; suficiente para workload exclusivo de SELECT |
procedure | Encaminha por meio de um procedimento SQL SECURITY DEFINER (<schema>.explain_statement) para que as instruções de gravação (UPDATE/DELETE/INSERT/REPLACE) possam ser explicadas sem conceder DML ao usuário de monitoramento. Recorre a inline se o procedimento estiver ausente. Requer a etapa de configuração única por esquema. Consulte Planos de consulta para instruções de gravação. |
Importante
mysql.query_plan é a saída bruta de EXPLAIN FORMAT=json, envolvida em uma matriz JSON de um elemento antes do armazenamento em cache, para que a ingestão de logs do New Relic não a achate automaticamente e a destrua. Analise o índice [0] para recuperar o objeto do plano.
Unidades de temporizador
Tipo de telemetria | Campos | Unidade |
|---|---|---|
Evento de log (
,
) |
,
,
| segundos |
Métricas (eventos de instrução, espera de I/O de tabela/índice, espera de bloqueio de tabela) | por unidade de
: ns | nanossegundos |
Importante
mysql.events_waits_current.timer_wait é o único campo que é uma duração de espera/bloqueio genuína e distinta (não o tempo total decorrido). Combine com mysql.wait_event_type / mysql.wait_event (ou o mysql.wait_type bruto).
Documentação relacionada
Instrumentação em ambientes auto-hospedados
Saiba como configurar o monitoramento do MySQL em ambientes auto-hospedados com o New Relic.
Instrumentação em ambientes RDS
Saiba como configurar o monitoramento do MySQL em ambientes RDS com o New Relic.
Guia de solução de problemas
Saiba como solucionar problemas comuns com o monitoramento do MySQL.