Mysql
 sql >> Base de données >  >> RDS >> Mysql

Travailler avec MyISAM dans MySQL

MyISAM est l'un des moteurs de stockage les plus populaires de MySQL. MyISAM est souvent le deuxième choix après InnoDB - dans cet article de blog, nous essaierons de trouver la meilleure façon de travailler avec ce moteur.

Qu'est-ce que MyISAM ?

MyISAM est l'un des moteurs de stockage de MySQL. MyISAM est basé sur ISAM (Indexed Sequential Access Method), un algorithme d'indexation développé par IBM qui permet de récupérer rapidement des informations à partir de grands ensembles de données. Cependant, il ne fonctionne pas très bien lors de la lecture et de l'écriture simultanées sur une table, en raison de son verrouillage de table. Il ne prend pas non plus en charge les transactions.

Pour certains ingénieurs MySQL, ce moteur est le choix le plus populaire après InnoDB :le moteur de stockage MyISAM était le seul moteur de stockage fourni par MySQL en 2005 et a été disponible pendant plus de 20 ans. MyISAM était le moteur de stockage par défaut pour MySQL jusqu'à la version 5.5.

MyISAM de l'intérieur

Une illustration du fonctionnement de MyISAM de l'intérieur n'entre pas dans le cadre de ce blog, mais nous pouvons vous fournir les paramètres qui vous aident à optimiser les performances du moteur :

  • Myisam_sort_buffer_size définit le tampon qui est alloué lorsque l'index est trié en exécutant des requêtes REPAIR, CREATE INDEX ou ALTER TABLE.
  • Key_buffer_size définit la taille du tampon utilisé pour les blocs d'index dans les tables MyISAM. L'augmentation de ce paramètre peut conduire à une meilleure gestion de l'index.
  • Sort_buffer_size décrit la taille d'un tampon alloué aux threads devant effectuer des opérations de tri.
  • Read_buffer_size décrit la taille d'un tampon alloué aux threads qui effectuent des opérations d'analyse séquentielles.
  • Write_buffer_size décrit la taille du tampon d'écriture.

Ces quatre paramètres sont importants, mais bien qu'ils soient importants, vous devez également garder un œil sur la variable key_buffer_size. La variable key_buffer_size détermine la taille des tampons d'index conservés en mémoire - considérez-la comme la contrepartie innodb_buffer_pool_size, mais pour MyISAM. Si vos serveurs se composent principalement de tables MyISAM, vous pouvez allouer environ 25 % ou plus de la RAM disponible sur le serveur à la variable key_buffer_size. Il existe également un autre moyen de déterminer quelle devrait être la valeur du paramètre key_buffer_size - comparez simplement la valeur key_read_requests (valeur totale des requêtes pour lire un index) et la valeur key_reads (la valeur de key_reads est le nombre de requêtes qui ont dû être lire à partir du disque). Les valeurs de ces paramètres peuvent être récupérées en regardant les variables d'état du serveur (émettez simplement une requête SHOW GLOBAL STATUS sur votre serveur MySQL). Il est également avantageux de garder à l'esprit que si key_reads renvoie une grande valeur, la valeur de key_buffer_size est probablement trop petite.

MyISAM et MySQL 8.0

Si vous demandez à certains ingénieurs MySQL, ils vous diront que MyISAM ne devrait plus être utilisé. Pourquoi? Eh bien, certaines personnes disent cela en raison du fait que lorsque MySQL a avancé, ils ont ajouté la majorité des fonctionnalités qui auparavant ne pouvaient être vues que dans MyISAM dans InnoDB, ce qui a rendu MyISAM obsolète :

  • Les index de texte intégral sont disponibles dans InnoDB depuis la version 5.6.
  • Les tablespaces portables sont disponibles dans InnoDB depuis la version 5.6.
  • Les index spatiaux sont disponibles dans InnoDB depuis la version 5.7.
  • La dernière mise à jour de la table est disponible dans InnoDB depuis la version 5.7.

Alors, devriez-vous toujours utiliser MyISAM ? Probablement pas. Il y a cependant une mise en garde - gardez à l'esprit que les requêtes COUNT(*) simples s'exécuteront probablement plus rapidement sur MyISAM que sur InnoDB - MyISAM stocke le nombre dans les métadonnées de la table, InnoDB ne le fait pas.

J'utilise MyISAM et je souhaite passer à InnoDB, que dois-je faire ?

Si vous utilisez toujours MyISAM et que vous souhaitez passer à InnoDB, convertissez simplement toutes vos tables en InnoDB. Évidemment, c'est plus facile à dire qu'à faire, mais voici un guide simple :

  1. Identifiez les tables de votre instance MySQL qui utilisent MyISAM :
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘database_name’ AND ENGINE = ‘MyISAM’;
  2. Convertissez toutes vos tables MyISAM en InnoDB :
    ALTER TABLE `table_name` ENGINE = InnoDB;

Si vous ne souhaitez pas exécuter plusieurs instructions ALTER TABLE l'une après l'autre, pensez à placer les instructions ALTER TABLE dans une boucle. C'est tout - vous avez terminé !

Résumé

MyISAM est l'un des moteurs MySQL les plus populaires. Le moteur était le moteur par défaut pour les versions de MySQL jusqu'à 5.5. Le moteur est l'un des choix les plus populaires après InnoDB, mais il peut être qualifié d'obsolète à partir de MySQL 8.0 - MySQL s'est déjà assuré que tout ce qui peut être fait avec MyISAM peut également être fait lorsque InnoDB est utilisé, donc à ce stade MyISAM n'est à peu près utile que si vous voulez que les requêtes COUNT(*) simples soient plus rapides. De telles requêtes seront plus rapides car MyISAM stocke le nombre dans les métadonnées de la table - les autres moteurs MySQL ne le font pas.