Visualização
Ainda estamos trabalhando nesse recurso, mas adoraríamos que você experimentasse!
Atualmente, esse recurso é fornecido como parte de uma prévia, de acordo com nossas políticas de pré-lançamento.
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 feito a cada scrape, 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 em 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 o 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.query_plan / mysql.query_plan.hash | Plano de consulta, se disponível, e sua chave de cache |
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 tuplas {thread_id, session_id}, uma por bloqueador de bloqueio de linha do InnoDB simultâneo 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 de poder 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 de 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 != 0 — null != 0 avalia TRUE no NRQL, o que incluiria silenciosamente sessões não bloqueadas em seus resultados.
db.server.top_query
As consultas que consomem o maior 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 amostra. 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. Essas são contagens de linhas, não leituras lógicas. |
mysql.query_plan / mysql.query_plan.hash | Plano de consulta (via EXPLAIN), se disponível — consulte Coleta do plano de execução |
db.query.comment_tags / .nr_service_guid | Igual a query_sample |
db.query.text.normalized.hash | Igual a query_sample |
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 — sem query_sample_text para explicar |
Se uma instrução capturada for truncada (terminar em ...), EXPLAIN será 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 workloads apenas 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-o 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.