O Performance Agent é um plug-in do PolarDB for MySQL que grava estatísticas de desempenho no nível do nó em uma tabela na memória, com intervalo configurável. Consulte essa tabela diretamente via SQL ou integre-a a uma plataforma de monitoramento como o Grafana para acompanhar métricas de CPU, memória, I/O, conexões e do mecanismo InnoDB em tempo real.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster do PolarDB for MySQL 8.0 na versão de revisão 8.0.2.1.0 ou posterior. Para verificar a versão, consulte Consultar a versão do mecanismo.
O parâmetro
loose_performance_schemadefinido comoON. Para atualizá-lo, consulte Especificar parâmetros de cluster e nó.
Como funciona
O Performance Agent coleta dados de desempenho em um intervalo configurável e grava cada snapshot como uma linha na tabela de memória PERF_STATISTICS, localizada no banco de dados de sistema performance_schema. Essa tabela armazena os dados de desempenho gerados durante o período mais recente.
Ativar o performance_schema permite monitorar locks, transações e métricas de memória, mas consome uma quantidade significativa de memória do sistema e pode afetar o desempenho do cluster. Ele vem desativado por padrão no PolarDB for MySQL. Caso decida ativá-lo, configure apenas as métricas necessárias, considerando as especificações do seu cluster e os recursos disponíveis.
Parâmetros
|
Parâmetro |
Descrição |
Padrão |
|
|
Ativa ou desativa o Performance Agent. Valores válidos: |
|
|
|
Frequência de coleta de dados pelo Performance Agent. Valores válidos: 1–60. Unidade: segundos. |
|
|
|
Número máximo de linhas na tabela |
|
Com os valores padrão (interval = 1, volume_size = 3600), a tabela retém aproximadamente uma hora de dados.
Para modificar esses parâmetros, consulte Especificar parâmetros de cluster e nó.
Tabela PERF_STATISTICS
Schema
CREATE TEMPORARY TABLE `PERF_STATISTICS` (
`TIME` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`PROCS_MEM_USAGE` double NOT NULL DEFAULT '0',
`PROCS_CPU_RATIO` double NOT NULL DEFAULT '0',
`PROCS_IOPS` double NOT NULL DEFAULT '0',
`PROCS_IO_READ_BYTES` bigint(21) NOT NULL DEFAULT '0',
`PROCS_IO_WRITE_BYTES` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_CONN_ABORT` int(11) NOT NULL DEFAULT '0',
`MYSQL_CONN_CREATED` int(11) NOT NULL DEFAULT '0',
`MYSQL_USER_CONN_COUNT` int(11) NOT NULL DEFAULT '0',
`MYSQL_CONN_RUNNING` int(11) NOT NULL DEFAULT '0',
`MYSQL_LOCK_IMMEDIATE` int(11) NOT NULL DEFAULT '0',
`MYSQL_LOCK_WAITED` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_INSERT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_UPDATE` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_DELETE` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_SELECT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_COMMIT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_ROLLBACK` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_PREPARE` int(11) NOT NULL DEFAULT '0',
`MYSQL_LONG_QUERY` int(11) NOT NULL DEFAULT '0',
`MYSQL_TCACHE_GET` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_TCACHE_MISS` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_TMPFILE_CREATED` int(11) NOT NULL DEFAULT '0',
`MYSQL_TMP_TABLES` int(11) NOT NULL DEFAULT '0',
`MYSQL_TMP_DISKTABLES` int(11) NOT NULL DEFAULT '0',
`MYSQL_SORT_MERGE` int(11) NOT NULL DEFAULT '0',
`MYSQL_SORT_ROWS` int(11) NOT NULL DEFAULT '0',
`MYSQL_BYTES_RECEIVED` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_BYTES_SENT` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_BINLOG_OFFSET` int(11) NOT NULL DEFAULT '0',
`MYSQL_IOLOG_OFFSET` int(11) NOT NULL DEFAULT '0',
`MYSQL_RELAYLOG_OFFSET` int(11) NOT NULL DEFAULT '0',
`EXTRA` json NOT NULL DEFAULT 'null'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Referência de colunas
As colunas estão agrupadas por área funcional.
Recursos do sistema
|
Coluna |
Descrição |
|
|
Timestamp da linha. Formato: |
|
|
Memória física utilizada pelo cluster. Unidade: bytes. |
|
|
Utilização da CPU. |
|
|
Quantidade de operações de I/O executadas. |
|
|
Volume de dados lido pelas operações de I/O. Unidade: bytes. |
|
|
Volume de dados gravado pelas operações de I/O. Unidade: bytes. |
Conexões e sessões
|
Coluna |
Descrição |
|
|
Total de conexões encerradas. |
|
|
Total de novas conexões estabelecidas. |
|
|
Contagem geral de conexões. |
|
|
Quantidade de conexões ativas no momento. |
Locks
|
Coluna |
Descrição |
|
|
Quantidade de locks mantidos. |
|
|
Total de eventos de espera por lock. |
Instruções SQL
|
Coluna |
Descrição |
|
|
Instruções INSERT executadas. |
|
|
Instruções UPDATE executadas. |
|
|
Instruções DELETE executadas. |
|
|
Instruções SELECT executadas. |
|
|
Transações confirmadas explicitamente. |
|
|
Transações revertidas. |
|
|
Prepared statements processados. |
|
|
Consultas lentas identificadas. |
Cache e objetos temporários
|
Coluna |
Descrição |
|
|
Acessos bem-sucedidos ao cache (hits). |
|
|
Falhas de acesso ao cache (misses). |
|
|
Arquivos temporários gerados. |
|
|
Tabelas temporárias criadas em memória. |
|
|
Tabelas temporárias criadas em disco. |
Operações de ordenação
|
Coluna |
Descrição |
|
|
Mesclagens de dados realizadas durante a ordenação. |
|
|
Linhas submetidas a processos de ordenação. |
Rede e replicação
|
Coluna |
Descrição |
|
|
Dados recebidos pelo nó. Unidade: bytes. |
|
|
Dados enviados pelo nó. Unidade: bytes. |
|
|
Tamanho do arquivo de log binário gerado. Unidade: bytes. |
|
|
Tamanho do arquivo de log binário transmitido pelo nó primário. Unidade: bytes. |
|
|
Tamanho do arquivo de log binário aplicado pelo nó somente leitura. Unidade: bytes. |
Mecanismo InnoDB (coluna EXTRA)
A coluna EXTRA armazena estatísticas do mecanismo InnoDB como um objeto JSON. Os valores correspondem àqueles retornados pelo comando SHOW STATUS.
Utilize expressões de caminho JSON para extrair campos individuais:
SELECT TIME, EXTRA->'$.INNODB_ROWS_READ', EXTRA->'$.INNODB_ROWS_INSERTED'
FROM performance_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;
|
Campo |
Descrição |
|
|
Total de transações. |
|
|
Volume de dados lido. Unidade: bytes. |
|
|
Páginas mescladas. |
|
|
Esperas do InnoDB para gravar dados de log. |
|
|
Transações removidas. |
|
|
Locks pendentes aguardados pelo InnoDB. |
|
|
Linhas lidas. |
|
|
Gravações de dados de log pelo InnoDB. |
|
|
Mesclagens de dados efetuadas pelo InnoDB. |
|
|
Volume de dados gravado. Unidade: bytes. |
|
|
Operações de doublewrite executadas. |
|
|
Tamanho dos dados inseridos no insert buffer. |
|
|
Linhas excluídas. |
|
|
Linhas atualizadas. |
|
|
Transações confirmadas (committed). |
|
|
Comprimento da lista ociosa. |
|
|
Transações do MySQL. |
|
|
Linhas inseridas. |
|
|
Transações em andamento. |
|
|
Dados de log gravados em disco. Unidade: bytes. |
|
|
Views ativas. |
|
|
Comprimento da tabela |
|
|
Tempo médio para confirmar uma transação. |
|
|
Tempo máximo registrado para confirmar uma transação. |
|
|
Páginas escritas por operações de doublewrite. |
Exemplos de consulta
Todos os exemplos consultam a tabela performance_schema.PERF_STATISTICS e ordenam os resultados por TIME DESC.
Recuperar snapshots brutos
Consulte a utilização de CPU e o uso de memória nos últimos 30 segundos:
MySQL> SELECT TIME, PROCS_MEM_USAGE, PROCS_CPU_RATIO
FROM performance_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;
+---------------------+-----------------+-----------------+
| TIME | PROCS_MEM_USAGE | PROCS_CPU_RATIO |
+---------------------+-----------------+-----------------+
| 2020-02-27 11:15:36 | 857812992 | 18.55 |
| 2020-02-27 11:15:35 | 857808896 | 18.54 |
| 2020-02-27 11:15:34 | 857268224 | 19.64 |
| 2020-02-27 11:15:33 | 857268224 | 21.06 |
| 2020-02-27 11:15:32 | 857264128 | 20.39 |
| 2020-02-27 11:15:31 | 857272320 | 20.32 |
| 2020-02-27 11:15:30 | 857272320 | 21.35 |
| 2020-02-27 11:15:29 | 857272320 | 28.8 |
| 2020-02-27 11:15:28 | 857268224 | 29.08 |
| 2020-02-27 11:15:27 | 857268224 | 26.92 |
| 2020-02-27 11:15:26 | 857268224 | 23.84 |
| 2020-02-27 11:15:25 | 857264128 | 13.76 |
| 2020-02-27 11:15:24 | 857264128 | 15.12 |
| 2020-02-27 11:15:23 | 857264128 | 14.76 |
| 2020-02-27 11:15:22 | 857264128 | 15.38 |
| 2020-02-27 11:15:21 | 857260032 | 13.23 |
| 2020-02-27 11:15:20 | 857260032 | 12.75 |
| 2020-02-27 11:15:19 | 857260032 | 12.17 |
| 2020-02-27 11:15:18 | 857255936 | 13.22 |
| 2020-02-27 11:15:17 | 857255936 | 20.51 |
| 2020-02-27 11:15:16 | 857255936 | 28.74 |
| 2020-02-27 11:15:15 | 857251840 | 29.85 |
| 2020-02-27 11:15:14 | 857251840 | 29.31 |
| 2020-02-27 11:15:13 | 856981504 | 28.85 |
| 2020-02-27 11:15:12 | 856981504 | 29.19 |
| 2020-02-27 11:15:11 | 856977408 | 29.12 |
| 2020-02-27 11:15:10 | 856977408 | 29.32 |
| 2020-02-27 11:15:09 | 856977408 | 29.2 |
| 2020-02-27 11:15:08 | 856973312 | 29.36 |
| 2020-02-27 11:15:07 | 856973312 | 28.79 |
+---------------------+-----------------+-----------------+
30 rows in set (0.08 sec)
Consulte as linhas lidas e inseridas no InnoDB nos últimos 30 segundos:
MySQL> SELECT TIME, EXTRA->'$.INNODB_ROWS_READ', EXTRA->'$.INNODB_ROWS_INSERTED'
FROM performance_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;
+---------------------+-----------------------------+---------------------------------+
| TIME | EXTRA->'$.INNODB_ROWS_READ' | EXTRA->'$.INNODB_ROWS_INSERTED' |
+---------------------+-----------------------------+---------------------------------+
| 2020-02-27 11:22:17 | 39209 | 0 |
| 2020-02-27 11:22:16 | 36098 | 0 |
| 2020-02-27 11:22:15 | 38035 | 0 |
| 2020-02-27 11:22:14 | 37384 | 0 |
| 2020-02-27 11:22:13 | 38336 | 0 |
| 2020-02-27 11:22:12 | 33946 | 0 |
| 2020-02-27 11:22:11 | 36301 | 0 |
| 2020-02-27 11:22:10 | 36835 | 0 |
| 2020-02-27 11:22:09 | 36900 | 0 |
| 2020-02-27 11:22:08 | 36402 | 0 |
| 2020-02-27 11:22:07 | 39672 | 0 |
| 2020-02-27 11:22:06 | 39316 | 0 |
| 2020-02-27 11:22:05 | 37830 | 0 |
| 2020-02-27 11:22:04 | 36396 | 0 |
| 2020-02-27 11:22:03 | 34820 | 0 |
| 2020-02-27 11:22:02 | 37350 | 0 |
| 2020-02-27 11:22:01 | 39463 | 0 |
| 2020-02-27 11:22:00 | 38419 | 0 |
| 2020-02-27 11:21:59 | 37673 | 0 |
| 2020-02-27 11:21:58 | 35117 | 0 |
| 2020-02-27 11:21:57 | 36140 | 0 |
| 2020-02-27 11:21:56 | 37592 | 0 |
| 2020-02-27 11:21:55 | 39765 | 0 |
| 2020-02-27 11:21:54 | 35553 | 0 |
| 2020-02-27 11:21:53 | 35882 | 0 |
| 2020-02-27 11:21:52 | 37061 | 0 |
| 2020-02-27 11:21:51 | 40699 | 0 |
| 2020-02-27 11:21:50 | 39608 | 0 |
| 2020-02-27 11:21:49 | 39317 | 0 |
| 2020-02-27 11:21:48 | 37413 | 0 |
+---------------------+-----------------------------+---------------------------------+
30 rows in set (0.08 sec)
Conectar a uma plataforma de monitoramento
Integre a tabela PERF_STATISTICS a uma plataforma externa de monitoramento para visualizar as métricas ao longo do tempo. A imagem abaixo exibe um exemplo de painel do Grafana conectado aos dados de desempenho do PolarDB.
