J'ai un site Drupal et je souffre de problèmes de performances. J'ai trouvé Comment convertir une base de données de MyISAM en InnoDB? indiquant que les performances peuvent s'améliorer en changeant.
Comment savoir si ma base de données MySQL est InnoDB ou MyISAM?
performance
database
chrisjlee
la source
la source
Réponses:
Vous pouvez exécuter une requête personnalisée:
pour répertorier toutes les tables de votre base de données et le moteur utilisé pour chacune.
Alternativement, vous pouvez vous connecter à votre base de données en utilisant phpMyAdmin et sélectionner votre base de données ... vous verrez le moteur dans la
Type
colonne de la liste des tableaux.Personnellement, je recommanderais Navicat pour MySQL , c'est une très belle interface graphique MySQL et rend la découverte de choses comme celle-ci très facile.
Source: http://www.electrictoolbox.com/mysql-table-storage-engine/
la source
SHOW TABLE STATUS
. Pour obtenir un compte simple du nombre de tableaux dans chaque type de moteur, c'est le casSELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
.Ma meilleure expérience a été de décider par table. InnoDB est agréable, car il peut éviter le verrouillage de table (aucun autre processus ne peut lire à partir d'une table pendant qu'un processus écrit), mais il fonctionne très bien avec COUNT () qui est souvent utilisé pour les requêtes de pageur.
(Modifier: veuillez voir le commentaire de Clives ci-dessous)
Il existe également des implications sur votre configuration MySQL, selon la base de données que vous utilisez. Si vous avez accès au serveur, mysqltuner devrait être votre première étape, pour vérifier la configuration:
https://github.com/rackerhacker/MySQLTuner-perl#readme
la source
COUNT
requêtes, selon cet article par l'ancien directeur du groupe de haute performance pour MySQL si elle n'affecte vraiment une requête contenantCOUNT(*)
sans uneWHERE
clause.SELECT COUNT(*) FROM table
peut retourner instantanément avec cette valeur. InnoDB ne le fait pas, il doit donc analyser l'intégralité de l'index de clé primaire. Cela dit, bien que Drupal en fasse beaucoupSELECT COUNT(*)
, je ne peux penser qu'à un seul endroit dans tout le code qui le fasse sansWHERE
clause. Par conséquent, n'utilisez pas MyISAM par souci pour ce cas particulier. InnoDB avec un pool de mémoire tampon de taille décente sera plus rapide pour toutes les requêtes du monde réel.Essayer simplement des choses pour obtenir un site Web plus rapidement, c'est comme changer aveuglément des voitures et espérons que vous obtiendrez un plus rapide la prochaine fois.
Essayez d'abord les fruits bas, si cela n'aide pas, essayez de trouver le vrai goulot d'étranglement.
Souvent, c'est juste une requête DB lente qui a besoin d'un index, ou d'un module qui fait les choses lentement.
J'ai également découvert de grandes différences entre les hébergeurs. Si vous installez un nouveau drupal hors de la boîte, les performances sont-elles correctes? Sinon, il est temps de chercher un autre hébergeur.
la source
FWIW, notre site Drupal 6.x de près de 20 000 nœuds rencontrait des problèmes de performances et j'ai choisi de déplacer toutes les tables vers InnoDB. C'était facile et la façon dont je l'ai géré était d'utiliser mysqldump pour vider tout le contenu dans un fichier sql, utiliser un éditeur (sed) pour remplacer toutes les occurrences de MyISAM dans InnoDB puis recharger la base de données à partir de ce fichier. L'un des inconvénients est que vous ne pouvez pas récupérer d'espace à partir d'une base de données InnoDB (IIRC), mais tant que vous conservez vos tables en double dans une base de données distincte, vous ne devriez avoir aucun problème. Oh, et nous avons vu une augmentation significative des performances. Et parce que nous avons quatre instances Drupal, le grand nombre de fichiers de table a été éliminé du système de fichiers (oui, ils sont contenus dans le fichier InnoDB lui-même). C'est ma valeur de 0,02 $.
la source
innodb_file_per_table
option.for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. Ajoutez des options appropriées (-uroot -psomepass
, par exemple) aux deuxmysql
s si nécessaire.Juste un avertissement. Si vous êtes sur Drupal 6, vous pouvez installer le module DBTuner ; il peut facilement déplacer vos tables de MyISAM vers InnoDB. Alors oui, il y a un module pour ça!
la source