| 16.12 Conseils pour l'amélioration des performances InnoDB
 16 Tables InnoDB
 Manuel de Référence MySQL 4.1 : Version Française
 
 ->Le moniteur InnoDB
 
 
 | 
  16.12.1 Le moniteur InnoDB Depuis la version 3.23.42, InnoDB inclut le moniteur InnoDB 
(InnoDB Monitor) qui affiche des informations sur l'état interne
des tables InnoDB. 
Depuis les versions 3.23.52 et 4.0.3 vous pouvez aussi utiliser la commande
SQL  
SHOW INNODB STATUS
  pour lire les informations de 
 
InnoDB Monitor
  depuis le client SQL.
Les données lue sont importantes pour les réglages de performances.
Si vous utilisez le client  
mysql
  interactif, le résultat
est plus lisible si vous remplacez le point virgule classique
par  
\G
  : 
Une autre méthode pour utiliser le  
InnoDB Monitors
  est de 
le laisser écrit continuellement des données dans la sortie de  
mysqld
  :
(note : le client MySQL n'affichera rien).
Lorsqu'il est activé,  
InnoDB
  peut afficher des données toutes les 15 secondes.
Si vous utilisez  
mysqld
  comme démon, alors ces données
sont dirigées vers le fichier de log  
.err
  dans le dossier  
datadir
 .
Les données lue sont importantes pour les réglages de performances.
Sous Windows, vous devez lancer  
mysqld-max
  depuis une fenêtre MS-DOS,
avec l'option  
--console
 , si vous voulez voir le résultat affiché
dans la fenête.Il existe aussi  
innodb_lock_monitor
  qui affiche les mêmes
informations que  
innodb_monitor
 , mais qui indique aussi
les verrous posés par les transactions.Les informations affichées inclut des données sur : 
Vous pouvez démarrer le moniteur InnoDB avec la commande SQL suivante :
les attentes de verrous par les transactions,
Les attentes de sémaphores pour les threads,
les requêtes en attente d'accès aux fichiers,
les statistiques sur les buffers, et
les statistiques sur les purges et buffers d'insertion sur
le thread principal InnoDB.
 et le stopper avec| 
CREATE TABLE innodb_monitor(a int) type = innodb;
 | 
 La syntaxe  
CREATE TABLE
  est simplement un moyen de passer une commande à
une table InnoDB, via l'analyseur MySQL : la table créée n'est pas importante pour
le moniteur InnoDB. Si vous interrompez le serveur lorsque le moniteur fonctionne,
et que vous voulez redémarrer le moniteur, vous devez alors effacer la table
avant de pouvoir exécuter la même commande  
CREATE TABLE
 
pour démarrer le moniteur. Cette syntaxe est susceptible de changer dans le futur.| 
DROP TABLE innodb_monitor;
 | 
 
Un exemple de résultat du moniteur InnoDB :
 Quelques notes sur le résultat :| 
================================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
 | 
 
Si la section LOCKS HELD BY TRANSACTIONS rapporte des attentes de verrous,
alors votre application a des problèmes de rétention de verrous. Le rapport
peut vous aider à trouver les blocages de verrous, et les transactions
bloquantes.
La section SYNC INFO va vous indiquer les sémaphores réservés si vous
compilez InnoDB avec la constante  
UNIV_SYNC_DEBUG
  définie dans 
le fichier  
univ.i
 .
La section SYNC ARRAY INFO rapporte les threads en attente
d'un sémaphore, et les statistiques d'attentes pour un mutex 
ou un verrou en lecture/écriture. Les longues attentes peuvent
être dues à des requêtes paralèlles, ou des problèmes avec la
programmation des threads.
La section CURRENT PENDING FILE I/O'S list les demandes d'accès
aux fichiers. Un nombre important indique que le disque est un
facteur limitant dans votre installation.
La section BUFFER POOL vous donne des statistiques sur les pages
qui ont été lues et écrites. Vous pouvez calculer depuis ces
nombres combien d'accès disques vos requêtes réalisent actuellement.
 |