2017-09-27 9 views
3

De temps en temps, il arrive que certains index de nos tables se brisent et que la base de données commence à consommer 100% de la charge du processeur et qu'elle soit complètement bloquée. Même les requêtes simples ne finiront pas et les redémarrages n'aideront pas. Ce que j'ai trouvé est de laisser tomber et de recréer des index un par un (ce qui pourrait prendre beaucoup de temps et beaucoup d'enquête) ou d'appeler simplement alter table mytable engine=innodb; sur une table suspecte. Cela fonctionne plutôt bien, tout corrige et tout redevient normal. Mais je n'ai aucune idée de ce qui se passe réellement en arrière-plan et pourquoi cela aide. Aussi - serait-il utile de le faire manuellement une fois par mois? Est-ce une bonne idée d'automatiser cela? Existe-t-il un moyen de faire un contrôle de santé DB?InnoDB: décomposer et corriger les index

+0

Utilisez-vous la version la plus récente de MySQL? Avez-vous essayé un vidage complet, restauration de votre DB? Pouvez-vous reproduire le problème sur une autre machine? Vous avez peut-être affaire à un logiciel bogué ou à un matériel défectueux, comme une banque de mémoire glitchy. – tadman

+0

Oui, cela se produit à peu près une fois l'année et la dernière fois sur une autre machine. Je cours Percona sur Debian. –

+0

Cela vaut la peine d'expérimenter avec MariaDB et MySQL pour voir si c'est un problème et/ou contacter le support Percona. – tadman

Répondre

0

Une estimation ...

Vous avez une ancienne version de MySQL/Percona, qui soit ne dispose pas de statistiques « persistantes » ou ne l'ont pas permis.

Et vous avez une requête désagréable qui amène parfois l'Optimiseur à choisir le mauvais plan de requête.

Le correctif rapide (qui peut ou ne peut pas fonctionner) est d'exécuter ANALYZE TABLE de la table (s) dans la requête lente.

Une meilleure solution peut être de mettre à niveau la version.

En attendant, voyons la requête, ses EXPLAIN et SHOW CREATE TABLE pour chaque table concernée. Le peut être un moyen de le reformuler pour qu'il soit moins feuilleté.

+0

Eh bien, nous avons Percona version 5.7.16-10, qui ne devrait pas être trop vieux. Aussi cela nous est arrivé avant il y a quelque temps sur une table/requête complètement différente. De 'analyser table' je n'ai jamais rien d'autre que' OK'. Je préférerais savoir ce qui se passe quand 'alter table mytable engine = innodb;' est exécuté. Cela a toujours aidé et je ne sais pas pourquoi. –

+0

Alter..engine est la même chose que 'OPTIMIZE'. Analyser rapidement fait quelques sondes pour recalculer les "statistiques", puis dit "OK". Je crois que les statistiques étaient détraquées par la requête. –

+0

D'accord, serait-il prudent d'exécuter 'OPTIMIZE' automatiquement une fois par mois sur toutes les tables? –