mysql & # 8220; déposer la base de données & # 8221; prend du temps & # 8212; Pourquoi?

StackOverflow https://stackoverflow.com/questions/150058

  •  02-07-2019
  •  | 
  •  

Question

mysql5.0 avec une paire de bases de données " A " et "B", les deux avec de grandes tables innodb. "déposer la base de données A;" gèle la base de données " B " pendant quelques minutes. Rien n'utilise " A " alors pourquoi est-ce une opération si intensive?

Points bonus: étant donné que nous utilisons "A", téléchargeons des données vers "B", puis passons à "B", comment pouvons-nous procéder plus rapidement? L’abandon de bases de données n’est pas le genre de choses qu’il faut faire tout le temps, c’est donc un peu en dehors des charts.

Était-ce utile?

La solution

Je ne suis donc pas sûr que la réponse de Matt Rogish aide 100%.

Le problème est que MySQL * a un mutex (verrou mutuellement exclusif) autour des tables d’ouverture et de fermeture, ce qui signifie que si une table est en cours de fermeture / suppression, no autre les tables peuvent être ouvertes.

Ceci est décrit par un de mes collègues ici: http://www.mysqlperformanceblog.com/2009/06/16 / slow-drop-table /

Une excellente stratégie de réduction d'impact consiste à utiliser un système de fichiers tel que XFS.

La solution de contournement est laide. Vous devez essentiellement grignoter toutes les données des tableaux avant de les supprimer (voir le commentaire n ° 11 sur le lien ci-dessus).

Autres conseils

À la suite de skaffman:

Modifiez votre fichier my.cnf (et redémarrez MySQL) pour inclure:

innodb_file_per_table = 1

( http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html )

Ceci donnera à vos bases de données un stockage de fichiers dédié et le retirera du pool partagé. Cela vous permettra ensuite de faire des choses amusantes, comme placer les tables / index sur différents disques physiques, afin de fractionner encore davantage les E / S et d'améliorer les performances.

Notez que cela ne modifie pas les tables existantes; vous devrez travailler pour les avoir dans leur propre dossier ( http://capttofu.livejournal.com /11791.html ).

Par défaut, toutes les bases de données innodb d'une installation de serveur mysql donnée utilisent le même pool physique de fichiers de données. Il est donc concevable de "supprimer la base de données A". pourrait affecter la base de données B. Depuis " supprimer la base de données " Cela nécessitera probablement une réorganisation importante des fichiers de données innodb. Il est concevable qu’il s’agisse d’une opération de blocage, soit en raison de son intensité, soit de par sa conception.

Cependant, je pense que vous pouvez faire en sorte que chaque base de données utilise différents fichiers physiques, bien que je n’aie pas essayé moi-même, vous devrez donc déterminer vous-même les détails. Sinon, vous devrez peut-être utiliser deux installations mysql différentes côte à côte sur le même ordinateur, ce qui est parfaitement faisable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top