web-dev-qa-db-fra.com

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

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 va être en train de convertir certaines d'entre elles en InnoDB. (Ce sera un processus lent, en se concentrant d'abord sur les tables les plus gourmandes en écriture).

Y a-t-il un problème avec l'exécution d'un serveur dédié où les deux types de moteurs de stockage existent?

21
Derek Downey

Il n'y a rien faux avec l'utilisation de 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.

18
randomx

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 mélange tout le temps les moteurs. 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, utiliser le mauvais moteur entraîne plus de ralentissement, peu importe qu'il s'agisse de MyISAM, d'InnoDB ou d'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.

7
Maniero

J'essaie d'éviter de mélanger les tables MyISAM et InnoDB dans la même base de données, mais c'est pour 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.

0
Kenzo