mysql “drop database” prend du temps — pourquoi?
mysql5.0 avec une paire de bases de données "A" et "B", à la fois avec de grandes tables innodb. "la chute de la base de données; le gel de la base de données "B" pour un couple de minutes. Rien n'est à l'aide de "Un" à ce point, alors pourquoi est-ce une exploitation intensive?
Points Bonus: étant Donné que nous utilisons "Un", le téléchargement de données en "B", puis passer à l'utilisation de "B", comment peut-on le faire plus vite? Suppression des bases de données n'est pas le genre de chose que l'on a généralement à faire tout le temps, donc c'est un peu hors des charts.
J'ai eu un problème similaire, mais les autres bases de données ont été opérationnel. La solution était de tuer tous les autres processus à l'aide de cette base de données parce qu'ils étaient de verrouillage (probablement implicitement peu d'avoir cette base de données sélectionnée, comme ils étaient en train de dormir).
OriginalL'auteur JBB | 2008-09-29
Vous devez vous connecter pour publier un commentaire.
Donc je ne suis pas sûr Matt Rogish réponse va l'aider à 100%.
Le problème est que MySQL* a un mutex (mutuellement exclusif de verrouillage) autour de l'ouverture et de la fermeture de tables, de sorte que, fondamentalement signifie que si une table est en cours de fermeture ou supprimés, pas d'autres tables peuvent être ouvert.
C'est décrite par un de mes collègues ici:
http://www.mysqlperformanceblog.com/2009/06/16/slow-drop-table/
Une excellente réduction de l'impact de la stratégie est d'utiliser un système de fichiers comme XFS.
La solution de contournement est laid. Vous avez à grignoter à toutes les données dans les tables avant de les déposer (voir commentaire #11 sur le lien ci-dessus).
Il y a une autre raison d'ailleurs fs lent supprimer - si il y a un très grand pool de mémoire tampon, il peut y avoir un gel d'essayer d'expulser toutes les pages qui appartiennent à la table sur le point d'être abandonné. Ce qui a été amélioré à peut-5.5/5.6 avec un "paresseux" méthode libre.
OriginalL'auteur Morgan Tocker
À la suite de skaffman:
Changer votre mon.cnf (et redémarrer MySQL) pour inclure:
(http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html)
Cela donnera à vos bases de données dédié de stockage de fichiers et de le sortir de la piscine commune. Il va alors vous permettre de faire des choses amusantes comme les tables/index sur des disques physiques différents pour encore plus divisé I/O et d'améliorer les performances.
Noter que ce n'est pas le changement de tables existantes; vous aurez à faire le travail à obtenir 'em dans leur propre fichier (http://capttofu.livejournal.com/11791.html).
Je suis surpris que cette option fait une énorme différence. Vous êtes un épargnant de vie!
OriginalL'auteur Matt Rogish
Par défaut, toutes les bases de données innodb dans un serveur mysql installation utiliser le même physique piscine de fichiers de données, donc en théorie "drop database" pourrait affecter la base de données B. Depuis "drop database" est susceptible d'entraîner de lourdes reorgainsing des fichiers de données innodb, il est concevable que c'est une opération de blocage, soit en raison de l'intensité de l'opération, ou par la conception.
Cependant, je pense que vous pouvez faire chaque base de données utiliser différents fichiers physiques, bien que je n'ai pas essayé moi-même, de sorte que vous aurez à comprendre les spécificités pour vous-même. À défaut, vous devrez peut-être utiliser deux différents mysql s'installe côte à côte sur la même machine, ce qui est parfaitement faisable.
OriginalL'auteur skaffman