MySQL 5 - Le moteur de stockage "BlackWhole"

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…