Est-il courant de mélanger les tables InnoDB et MyISAM sur le même serveur?


21

J'ai une seule base de données d'environ 4,5 Go fonctionnant sur un serveur avec 8 Go de RAM. La grande majorité des tables sont MyIsam (environ 4,3 Go), mais je vais bientôt en convertir certaines en InnoDB. (Ce sera un processus lent, en se concentrant sur les tables les plus gourmandes en écriture au début).

Existe-t-il quelque chose de mal à exécuter un serveur dédié où les deux types de moteurs de stockage existent?


Is there anything wrong with running a dedicated server where both types of storage engines exist? Peut-être reformuler Multiple types?
John

La seule raison pour laquelle j'ai dit «les deux» est parce que cette question concerne les deux moteurs principaux configurés pour être «finement réglés». J'essaie d'ignorer d'autres types de moteurs comme MEMORY ou MERGE, qui sont assez rares pour que les afaik ne soient pas l'objet d'un réglage des performances.
Derek Downey

Réponses:


18

Il n'y a rien de mal à utiliser plusieurs moteurs de stockage sur la même machine physique, tant que vous comprenez les avantages et les inconvénients de chacun. Il existe des considérations de performances, des limitations de fonctionnalités et des cas d'utilisation pour tous les types de stockage de plug-in.

Par exemple, si vous avez une petite table qui écrit à 90%, vous pouvez choisir MyISAM. Si les données peuvent être régénérées facilement et qu'il s'agit d'une petite table, par exemple pour la mise en file d'attente, vous pouvez choisir Mémoire. Si vous avez une table qui est lue à 90% et que les données doivent être là lorsque vous la recherchez, vous choisirez probablement un moteur de stockage qui prend en charge les transactions et l'atomicité configurable, comme InnoDB. Si vous souhaitez l'accessibilité via le système de fichiers sans données dommageables, vous pouvez choisir CSV.

Néanmoins, vous pouvez utiliser en toute sécurité plusieurs moteurs de stockage dans le même schéma ainsi que l'hôte physique.

Permettez-moi de noter cependant que vos tampons jouent un rôle dans tout ce bordel. Si vous utilisez à la fois MyISAM et InnoDB, vous devrez faire attention à ce que votre key_buffer et innodb_buffer_pool ne rivalisent pas. Cela nécessitera une planification minutieuse de votre part, mais c'est ce que nous faisons.


4
+1 Un autre cas d'utilisation courant est MyISAM pour les tables nécessitant une recherche en texte intégral et InnoDB pour toutes les autres tables.
Asaph

@Aseph: Même au moment de votre commentaire, InnoDB supportait les indices Fulltext .
BlueRaja - Danny Pflughoeft

2
^^^^ "MySQL 5.6 features" n'était pas GA avant le 2013-02-05
randomx

1
@randymelder Belle réponse. Seriez-vous en mesure de préciser ce que vous entendez par "Vous devrez faire attention à ce que votre key_buffer et innodb_buffer_pool ne se disputent pas"?
Neel

1
Je veux avoir tort, mais la logique semble opposée à celle de stackoverflow.com/a/6796566/5645769 ici.
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

7

Je ne peux pas vous dire si c'est une pratique courante. Je peux parler de ma propre expérience.

J'utilise toujours le meilleur outil pour le travail, donc je mixe les moteurs tout le temps. La plupart de mes projets utilisent MyISAM comme moteur par défaut.

Lorsque j'ai besoin de fonctionnalités spéciales disponibles uniquement sur InnoDB, je me lance.

Lorsqu'une table est principalement en lecture seule, je choisis le moteur d'archivage avant de pouvoir clignoter.

Sachant que le serveur de la machine a suffisamment de mémoire, toutes mes données temporaires sont stockées sur des tables Heap.

J'ai vu dans le passé des ralentissements mélangeant MyISAM et InnoDB mais ce n'est pas un problème spécifique à MySQL. C'est un problème de conception qui n'apparaît pas lorsque vous utilisez un seul moteur. En fait, l'utilisation du mauvais moteur entraîne un ralentissement plus important, que ce soit juste MyISAM, juste InnoDB ou un mélange des deux. Il est difficile de définir une formule pour savoir quand le ralentissement se produira. De simples tests pourraient vous le dire.

Bien sûr, vous ne pouvez pas préserver l'intégrité et la cohérence en mélangeant InnoDB et MyISAM sur une requête unique.


le moteur d'archivage ne prend pas en charge l'indexation, alors pourquoi le stocker dans l'archive.
user4951

0

J'essaie d'éviter de mélanger les tables MyISAM et InnoDB dans la même base de données, mais c'est pour des raisons de raison plutôt que pour des raisons pratiques. Cependant, je trouve utile d'avoir une base de données avec des tables MyISAM pour la recherche plein texte afin de pouvoir l'exécuter sur des sites. Le conserver dans une base de données distincte avec une clé étrangère pour chaque entrée permet à tout autre développeur travaillant sur la base de données de voir facilement ce qui se passe.


Comment pouvez-vous avoir une clé étrangère lorsque vous utilisez MyISAM?
a_horse_with_no_name

Mauvaise terminologie, mais fonctionne comme une clé étrangère. Je stocke le numéro d'identification de l'élément dans la table InnoDB et je l'utilise pour faire la recherche de page sur le résultat de la recherche.
Kenzo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.