Introduction
Le moteur de stockage BlackHole peut à première vue apparaître complètement inutile, c’est loin d’être le cas : les applications pratiques dans la réplication et la mesure de performances pour déterminer les goulots d’étranglement au niveau de l’écriture dans les logs binaires sont très intéressantes.
Cet article présente rapidement la mise en œuvre du moteur de stockage blackhole pour la réplication et présente plus en détail la mesure de performances lors de l’écriture dans les logs binaires grâce à ce moteur à travers un cas pratique.
Vérification de la disponibilité du moteur blackhole
La variable serveur have_blackhole_engine
permet de savoir si ce moteur est
disponible :
mysql-DBA_T1_MYS > show variables like '%blackhole%';
+-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | have_blackhole_engine | YES | +-----------------------+-------+
Si le moteur de stockage « blackhole » n’est pas disponible :
- soit la version standard est utilisée au lieu d’une version Max ou Pro
- soit l’option
--with-blackhole-storage-engine
n’a pas été utilisée lors de la compilation de MySQL
La commande SHOW ENGINES
permet également de vérifier la disponibilité du
moteur Blackhole :
mysql-DBA_T1_MYS > show engines;
Engine | Support | Comment |
---|---|---|
MyISAM |
DEFAULT |
Moteur par défaut à partir de MySQL 3.23 |
MEMORY |
YES |
Moteur de stockage en mémoire (Hash based). Très utile pour les tables temporaires |
InnoDB |
DISABLED |
Support des transactions, du verrouillage lignes et des clés étrangères |
BerkeleyDB |
DISABLED |
Support des transactions et du verrouillage par page |
BLACKHOLE |
YES |
/dev/null (tout ce qui est écrit disparaît) |
EXAMPLE |
YES |
Moteur de stockage Exemple |
ARCHIVE |
YES |
Moteur de stockage d’archive (données compressées) |
CSV |
NO |
Moteur de stockage CSV |
Ndbcluster |
NO |
Cluster, Haute disponibilité (tables en mémoire) |
FEDERATED |
YES |
Moteur Federated MySQL (cross server) |
MRG_MYISAM |
YES |
Collection of identical MyISAM tables |
Binlog |
YES |
Meta moteur de stockage pour la représentation des logs binaires |
ISAM |
NO |
Moteur de stockage obsolète |
Principe du moteur blackhole
Le principe du moteur de stockage blackhole pour une table est simple, les données sont acceptées mais elles ne sont pas stockées
mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE;
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM test;
Empty set (0.00 sec)
Cas pratiques
Cas pratique dans la réplication
Le moteur blackhole peut être particulièrement pratique pour répliquer des données sur des serveurs esclaves sans que le serveur master stocke ces données.
En effet, tous les ordres DML SQL sur une table du serveur master ayant pour moteur de stockage blackhole sont répliqués vers des serveurs esclave via les fichiers de logs binaires. Les données sont ainsi effectivement stockées dans les serveurs esclaves mais pas au niveau du serveur master.
Cas pratique pour déterminer l’overhead (surcoût) de l’écriture des logs binaires
Le moteur blackhole est très intéressant pour déterminer le surcoût (overhead) généré par l’écriture dans les logs binaires d’un serveur.
Par exemple : 9 jeux de tests sont réalisés en insérant dans chaque jeu
118910 lignes dans deux tables t_bck_cpt_ope
et t_myi_cpt_ope
qui ont la même
structure. L’écriture dans les logs binaires est activée sur le serveur en
question.
- pour la table
t_bck_cpt_ope
, le moteur de stockage est le moteur blackhole - pour la table
t_myi_cpt_ope
, le moteur de stockage est MyISAM.
Le résultat des jeux de tests est donné dans le graphique ci-dessous :
Avec ces données, on peut en déduire que dans notre système, environ 50% du temps est pris par l’écriture dans les fichiers de logs binaires.
Conclusion
Ce moteur paraît bien inutile, et c’est loin d’être le cas, pour résumer les applications pratiques sont :
- dans la réplication
- dans la mesure du surcoût (overhead) des fichiers de log binaires
- dans la détermination des goulots d’étranglement non liés au moteur de stockage lui-même : en effet le moteur blackhole permet de déterminer rapidement si la lenteur en écriture est liée à un disque, aux performances de la machine sans mettre en cause le moteur de stockage, etc.