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 :
-
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.
Vous pouvez démarrer le moniteur InnoDB avec la commande SQL suivante :
CREATE TABLE innodb_monitor(a int) type = innodb;
|
et le stopper avec
DROP TABLE innodb_monitor;
|
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.
Un exemple de résultat du moniteur 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
|
Quelques notes sur le résultat :
-
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.
|