Pourquoi l'importation d'un fichier .sql de 12 Go prend-elle plus de 36 heures?


16

J'attends maintenant depuis 36 heures qu'un fichier .sql de 12 Go soit importé avec une simple type site.sql | mysqlcommande. Je peux voir que le ibdata1est toujours en croissance, actuellement près de 40 Go.

Étant donné que les déclencheurs et les procédures stockées se trouvent à la fin du .sql, je pense seulement que MySQL devrait ajouter des données et des index clés.

Le site.sql a été généré à l'aide de cette commande à partir d'un autre serveur:

mysqldump -R -e --databases site --add-drop-database --add-create-database --add-drop-table -C --single-transaction --triggers

Qu'est ce qui prend si longtemps?


3
combien de processeur mysql prend-il? Si c'est une valeur faible, cela signifie probablement que vous êtes lié au disque
Derek Downey

2
les fichiers .sql ne sont vraiment pas aussi rapides à importer ... il est en fait plus rapide de vider dans tab delim ou CSV, puis de construire la base de données vide et de l'utiliser LOAD DATA INFILE. De plus, comme vous déplacez une base de données entière, voyez ma réponse concernant le déplacement de bases de données entre les serveurs si vous restez dans la même version principale. (surtout si vous devez abandonner et redémarrer)
Joe

Réponses:


23

Essaye ça:

$ ps -ef|grep [m]ysql

Identifiez l'ID du processus puis

$ strace -cp <pid>

Laissez-le ensuite 10 secondes ou une minute ^C. Cela vous indiquera où le processus passe son temps, par exemple, il pourrait simplement attendre le disque si vous le voyez readet le writedominez.


4
+1 car je viens d'apprendre une nouvelle commande (strace): P Edit: ben merde, pas disponible sur mon mac par défaut.
Derek Downey

2
C'est un outil fantastique, avec gdb. Je ne dis plus aux gens que leur application est bloquée; Je leur dis exactement sur quoi il est collé ou tourne, ou à partir d'un noyau, je leur dis la ligne de code et le nom du fichier source. Dtrace est encore plus puissant.
Gaius

3
Strace est Linux - l'équivalent de Solaris est une ferme. Dtrace est disponible sur Mac.
Gaius

donc c'est. va aller le lire maintenant.
Derek Downey

Attention: belle commande à savoir, mais attention, cette commande a planté mon instance MySQL. Je ne sais pas pourquoi. Avant que MySQL ne plante, le serveur ne répondait plus pendant quelques minutes.
dabest1

7

Avez-vous des tables InnoDB avec une clé primaire

  1. contenant plusieurs colonnes?
  2. avoir un large VARCHAR?
  3. et beaucoup d'index non uniques?
  4. un ou plusieurs index non uniques qui ont une clé large?

N'importe laquelle de ces conditions peut probablement faire en sorte que les grands nœuds BTREE de vos index aient très peu de feuilles dans chaque nœud BTREE. La clé de cluster dans la clé primaire est également attachée à chaque entrée de clé non unique dans les clés non cluster.

Autre considération: la somme des pages de données InnoDB est-elle nettement inférieure à celle des pages d'index InnoDB?

Vous pouvez le découvrir avec cette requête (en Mo):

SELECT SUM(data_length)/POWER(1024,2) InnoDBData,
SUM(index_length)/POWER(1024,2) InnoDBIndexes
FROM information_schema.tables WHERE engine='InnoDB';

Considération supplémentaire: la journalisation binaire est-elle activée sur le serveur DB que vous chargez? Si vous l'êtes, veuillez le faire sur le serveur que vous chargez:

mysql -h... -u... -p... -A -e"SET sql_log_bin=0; source site.sql"

J'espère que ça aide !!!


6

Êtes-vous sûr que les tables dans lesquelles vous lisez sont sans déclencheurs, index et contraintes? Sur quel matériel et système d'exploitation utilisez-vous? Comment est configuré votre stockage?

Je connais mieux Oracle, mais l'importation en 12G sur des tables sans déclencheurs, index et contraintes devrait facilement aller avec 200 Go / h. Un seul déclencheur peut transformer le processus en escargot, selon ce que fait ce déclencheur ...

J'espère que ça aide

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.