Professional Documents
Culture Documents
MySQL
Mezgani Ali
August 31, 2009
Objectifs :
* Tirer les performances maximales du matériel disponible.
* Eviter les temps d’arrêt des applications critiques.
* Eviter le ralentissement des applications en période de pointe.
Je devrais installer une machine pour une application faisant un usage intensif
du SGBD MySQL avec n concurrences, sur Linux. Cependant l’optimisation de
MySQL passera par trois composants :
* Optimisation du serveur MySQL
* Optimisation de la base de données
* Optimisation des requêtes
1
RAID (Redundant Array of Inexpensive Disks) :
Une des premières questions à se poser, quel niveau de RAID nous allons utilisé
pour notre serveur de base de données. Probablement vers le RAID 10 si nous
avons plusieurs écritures sur la base, le RAID 10 est une meilleurs solution aussi
la plus chère pour les base de données nécessitantes une grande performance
I/O vu sa grande vitesse de lecture/écriture, par rapport aux autres RAID.
Donc pour implémenter le RAID 10 sur un spare de disque de 7TB, nous ne
profitons que du 3.5TB d’espace, chose que nous pouvons pas implémenter pour
le moment. Le cas ou nous avons plusieurs lectures par rapport aux nombre
écritures, le RAID 5 reste un bon choix, malgré qu’il est rapide en lecture et
lent en écriture, mais comme même rapide en écriture par rapport à un seul
disque.
IO (Input/Output) :
Les I/O subsystem ou bien les ordonnanceurs des E/S, sont un ensemble de
processus responsable du déplacement des blocs de donnée entre le disque et
la mémoire. Ils sont complètement paramétrables, généralement les I/O subsys-
tem ne se comportent pas comme des simple FIFO (first in first out), mais ils
reposent sur certains algorithmes afin de gérer les blocs de données, on peut en
citer : cfq, noop,deadline, anticipatory.
Le choix d’un bon scheduler peut remarquablement influencer les performances
de notre machine nibiru, depuis la version 2.6.18 du kernel l’algorithme d’ordon-
nancement des E/S CFQ est activé par défault, et qui permet des importantes
performances, surtout pour les grosses applications qui nécessitent un grand
nombre d’opérations I/O. Le principe du cfq (Completely Fair Queuing) comme
son nom l’indique est maintenir une queue afin de distribuer la bande passante
E/S sur l’ensemble de requête E/S, selon certaines règles.
Pour plus d’information sur le temps de réponse des ces algorithmes consul-
ter le tableau d’après :
2
plus complètes nous devons developper un peu plus cet étude, en prenant con-
sidération de plusieurs kernels et plusieurs systèmes de fichiers. Ces tests peuvent
être automatiser grâce au superbe tool sysbench developpé par Alexey Kopytov
(ingénieur logiciel @ MySQL AB).
OS (Operating system) :
Le serveur MySQL est préconisé pour un fonctionnement optimal sur SOLARIS,
néanmoins, il est possible de l’optimiser sur notre OS pour se rapprocher de son
rendement idéal.
le système d’exploitation existant actuellement sur nibiru est la CentOS re-
lease 5.2 (Final), sur une architecture i686 avec le kernel 2.6.18-92.1.22.el5PAE,
donc si vous faites attention vous pouvez remarquer que la présence du module
PAE (Physical address extension), a priori c’est une CentOS pour un processeur
32bit, pourtant notre machine est une intel 64bit, pourquoi ne pas installer une
CentOS x86-64 ? La réponse est simple le fait de passer de 32 bits à 64 bits
augmente la consommation de mémoire. Donc si un programme consomme 100
MB en 32 bits il consommera automatiquement plus en 64 bits. Pour le moment
l’OS correspond parfaitement à notre besoin pour 16GB de RAM.
FS (File system) :
En travaillant sur l’optimisation d’une base de donnée, penser au système de
fichiers correpondant est une étape obligatoire, tout au long de se projet d’op-
timisation.
A vrai dire et comme vous le savez un système de fichiers est une structure
de donnée qui sert à stocker les data sous format lisible ordonnée, tel que les
fichiers. chaque fichier est décrit par des métadata tel que les droit d’accès, le
propriétaire, ...
Cette procédure de stockage changent de file system à un autre, puisque il existe
plusieurs sur le terrain propriétaire et free tel que GPFS, QFS, XFS, EXT2/3/4,
JFS, REISERFS... J’ai travaillé sur un benchmarking de trois types de système
de fichiers (JFS, XFS, EXT3) sur une machine modeste et le résultat était bien
évidement pour le JFS, dû a son faible coup de consomation de CPU. JFS
repéresente le système de fichiers journalisé mis au point par IBM et qui est
disponible sous la licence GPL.
Pour plus de détails sur cette étude vous pouvez consultez mon blog Notez que
ce benchmarking ne projete pas réellement le comportement des système fichiers
(JFS, XFS, EXT3) face au MySQL. L’outil utilisé mène ses tests en créant un
grand nombre de fichiers (ce qui ne reflète pas vraiment ce que fait un SGBD).
MySQL :
Il est préconisé d’utiliser la version code source du serveur MySQL et de la
compiler en prenant en considération les différents paramètres du système à
savoir le jeu de caractère à utiliser, le micro-processeur ... Pour question de
rapidité et facilité durant le process d’installation et mise à jour, nous pouvons
biensure l’installer depuis les repository de la CentOS.
3
2 Optimisation de la base de données :
Avant de passer au tuning de notre SGBDR, plusieurs questions viennent à
l’esprit :
Quel moteur de stockage choisir InnoDB ou bien MyISAM ?
Quel sont les Input/Ouput methodes (random, sequential) ?
Quel est le nombre de connections par seconde ?
Quel est le nombre de threads crée par seconde ?
Quel est le nombre maximal de connections ?
Dans le cas ou vous n’avez pas besoin de transaction ni de clé étrangère, My-
ISAM est votre choix pourvue ses importantes performances, notez que My-
ISAM est fournit par défault par MySQL.
4
qu’avec l’assembleur. Il est donc fréquent qu’une requête SQL qui n’aie pas l’air
bien méchante prenne des heures à s’exécuter. Heureusement, MySQL dispose
d’une excellent commande EXPLAIN qui explique ce qu’elle va faire et ce qui
va prendre du temps. Cependant prenez toujours votre temps afin de detecter
les requêtes lentes, et profiter de la commande EXPLAIN pour les analyser.
Arrivons vers la fin de ce draft, je pense que le meilleurs outil mis à dispo-
sitions de chaque ingénieur systèmes, est le livre ainsi, J’aimerais en profiter
pour recommender l’excellent livre High Performance MySQL sur l’éditeur or-
eilly, d’ailleurs qui devrait être dans la bibliothèque de la FONDEP. Et ceci est
un autre projet :)