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
mysql
, 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 MySQL
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
MySQL. 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 MySQL: 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 em
univ.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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.