SHOW INNODB STATUS
e o Monitor InnoDB
A partir da versão 3.23.41, o InnoDB
inclui o Monitor InnoDB que imprime informações sobre o estado interno do InnoDB
. A partir das versões 3.23.52 e 4.0.3 você pode usar o comando SQL SHOW INNODB STATUS
para trazer a saída do Monitor InnoDB
padrão para o cliente SQL. os dados são úteis para ajuste do desempenho. Se você estiver usando o cliente SQL interativo MariaDB
, a saída é mais legível se você substituir o ponto e vírgula normalmente usado no final das instruções por \G
:
SHOW INNODB STATUS\G
Outro modo de usar os Monitores InnoDB
é deixá-los gravando dados continuamente na saída padrão do servidor mysqld
(nota: o cliente MariaDB não exibirá nada). Ao ser ligado, os Monitores InnoDB exibirá dados um vez a cada 15 segundos. Se você executar mysqld
como um daemon então esta saída é normalmente direcionada para o log .err
no datadir
do MariaDB. Este dado é útil para ajuste do desempenho. No Windows você deve iniciar o mysqld-max
a partir do Prompt do MSDOS com a opção --standalone --console
para direcionar a saída para a janela do prompt do MS-DOS.
Existe um innodb_lock_monitor
separada que imprime a mesma informação que innodb_monitor
mais informações sobre travas configuradas por cada transação.
A informação impressa inclui dados sobre:
- espera de bloqueios de uma transação,
- espera de semáforo de threads,
- pedido de E/S de arquivos pendentes,
- estatísticas de área de buffer e
- atividade de fusão do buffer de inserção e remoção da thread principal do
InnoDB
.
Você pode iniciar o Monitor InnoDB com o seguinte comando SQL:
CREATE TABLE innodb_monitor(a INT) type = innodb;
e pará-lo com
DROP TABLE innodb_monitor;
A sintaxe CREATE TABLE
é só um modo de passar um comando ao mecanismo InnoDB
através do analisador SQL do MariaDB: a tabela criada não é relevante para o Monitor InnoDB
. Se você fechar o banco de dados quando o manitor estiver em execução, e você quiser iniciar o monitor novamente, você deve apagar a tabela antes de executar um novo CREATE TABLE
para iniciar o monitor. A sinstaxe pode alterar em distribuição futuras.
Uma saída padrão do Monitor InnoDB:
================================ 010809 18:45:06 INNODB MONITOR OUTPUT ================================ -------------------------- LOCKS HELD BY TRANSACTIONS -------------------------- LOCK INFO: Number of locks in the record hash table 1294 LOCKS FOR TRANSACTION ID 0 579342744 TABLE LOCK table test/mytable trx id 0 582333343 lock_mode IX RECORD LOCKS space id 0 page no 12758 n bits 104 table test/mytable index PRIMARY trx id 0 582333343 lock_mode X Record lock, heap no 2 PHYSICAL RECORD: n_fields 74; 1-byte offs FALSE; info bits 0 0: len 4; hex 0001a801; asc ;; 1: len 6; hex 000022b5b39f; asc ';; 2: len 7; hex 000002001e03ec; asc ;; 3: len 4; hex 00000001; ... ----------------------------------------------- CURRENT SEMAPHORES RESERVED AND SEMAPHORE WAITS ----------------------------------------------- SYNC INFO: Sorry, cannot give mutex list info in non-debug version! Sorry, cannot give rw-lock list info in non-debug version! ----------------------------------------------------- SYNC ARRAY INFO: reservation count 6041054, signal count 2913432 4a239430 waited for by thread 49627477 op. S-LOCK file NOT KNOWN line 0 Mut ex 0 sp 5530989 r 62038708 sys 2155035; rws 0 8257574 8025336; rwx 0 1121090 1848344 ----------------------------------------------------- CURRENT PENDING FILE I/O'S -------------------------- Pending normal aio reads: Reserved slot, messages 40157658 4a4a40b8 Reserved slot, messages 40157658 4a477e28 ... Reserved slot, messages 40157658 4a4424a8 Reserved slot, messages 40157658 4a39ea38 Total of 36 reserved aio slots Pending aio writes: Total of 0 reserved aio slots Pending insert buffer aio reads: Total of 0 reserved aio slots Pending log writes or reads: Reserved slot, messages 40158c98 40157f98 Total of 1 reserved aio slots Pending synchronous reads or writes: Total of 0 reserved aio slots ----------- BUFFER POOL ----------- LRU list length 8034 Free list length 0 Flush list length 999 Buffer pool size in pages 8192 Pending reads 39 Pending writes: LRU 0, flush list 0, single page 0 Pages read 31383918, created 51310, written 2985115 ---------------------------- END OF INNODB MONITOR OUTPUT ============================ 010809 18:45:22 InnoDB starts purge 010809 18:45:22 InnoDB purged 0 pages
Algumas notas sobre a saída:
- Se a seção LOCKS HELD BY TRANSACTIONS relatar espera de bloqueios, então a sua aplicação pode ter diputa de travas. A saida também ajuda a rastrear as razões de deadlocks nas transações.
- A seção SYNC INFO irá relatar semáforos reservados se você compilar o InnoDB com
UNIV_SYNC_DEBUG
definido emuniv.i
. - A seção SYNC ARRAY INFO relatas as threads que esperam por semáforos e estatísticas sobre quantas vezes a thread precisou esperar por um mutex ou por um semáforo de trava de leitura/escrita. Um número grande de espera da thread pelo semáforo pode ser um resultado de E/S de disco ou problemas de disputa dentro do InnoDB. As disoutas pode ser devido a paralelismo pesado de consultas ou problemas na programação das threads no sistema operacional.
- A seção CURRENT PENDING FILE I/O'S lista os pedidos de E/S de arquivos que estão pendente. Um número grande indica que a carga de trabalho esta no limite de disco.
- A seção BUFFER POOL lhe dá estatíticas sobre leitura e escrita das páginas. Você pode calcular a partir destes números quanto de E/S em arquivos de dados a sua consulta esta fazendo atualmente.