J'ai un très grand fichier .csv, et je le charant dans MySQL avec la commande de chargement des données en infime. Parce que cela prend si longtemps, j'aimerais voir jusqu'où le long du téléchargement a progressé. p>
J'ai essayé 2 méthodes jusqu'à présent
Tout d'abord, j'ai simplement fait une commande sélectionnée (*) de voir combien de lignes avaient été insérées comme le téléchargement étant en cours, mais qui retourne toujours un nombre de 0.
Deuxièmement, j'ai essayé de montrer la liste de processus et j'ai vu simplement combien de temps la requête est en cours d'exécution. Parfois, le statut dit "libérer des données" ou quelque chose à cet effet. P>
Est-ce que quelqu'un connaît-il un bon moyen de suivre la progression d'une commande de chargement de données en infime? En outre, quelqu'un sait-il comment suivre le taux d'insertion? P>
merci p>
3 Réponses :
de http: //www.stephanchu .COM / 2008/12 / speed-up-your-mysql-data-load.html , vous pouvez utiliser le statut La page I liée a également de bonnes suggestions de réglage pour améliorer vos performances globales avec les données de chargement de cette manière. P> show Innodb code> si votre table est un type innoDB, que vous avez intégré ' t arrive à mentionner. p>
Afficher le statut InnoDB Code> devrait maintenant devenir
Show Moteur InnoDB Statut \ g; Code>, avec le trail supplémentaire
\ g code>, de sorte que
grep Code> Travaux
Couple d'approches ici ... p>
SET SESSION transaction Niveau d'isolation Lire non engagée code>; Puis compter (*) fonctionnera li>
-
sélectionner
rows_read comme "lu",
rond ((rowlead / {linocount}) * 100, 2) comme "complet",
rond (heure / 60, 2) comme "écoulé",
rond (heure * 100 / rond ((Row_Read / ) * 100, 2) / 60, 2) As 'Eta'
de l'information_schema.Processlist
où id = ; code> li>
ol>
On Linux Vous pouvez imprimer des informations sur des descripteurs de fichier (LS -L / PROC // FD) et le lecteur de position de fichier (CAT / PROC // FDInfo). Donc:
Trouvez MySQLD PID (dans cet exemple: 1234 strong>): p>
Recherchez le numéro de descripteur de fichier de votre fichier chargé (dans cet exemple: 45 fort>): p>
Imprimer info sur ce descripteur de fichier et vérifiez le nombre d'octets déjà lu (dans cet exemple: 494927872 strong>): P>
Vous pouvez comparer cet indicateur de progression (en octets) à la taille du fichier réelle en cours de chargement. p> au lieu des étapes 1 et 2, vous pouvez également utiliser la commande "LSOF": p> $ PS -EF | grep mysqld code> p>
mysql 1234 1 0 février12? 00:00:55 / usr / sbin / mysqld code> p> li>
$ sudo ls -l / proc / 1234 / fd code> p>
lr-x ------- 1 racine racine 64 10 févr. 10:56 45 -> /var/lib/mysql/db/load_file.txt
$ cat / proc / 1234 / fdinfo / 45 code> p>
pos: 494927872 code> p>
drapeaux: 0100000 code> p> li>
ol>
Ceci est génial et utile dans tant d'autres scénarios "grands dossiers" !!
Ceci combiné avec le temps que la requête a eu lieu m'a donné un ETA incroyablement précis. Extrêmement utile, merci.
Cela n'a pas vraiment fonctionné pour moi. J'ai dû utiliser LSOF pour obtenir le processus pertinent et la FD. C'était mon client MySQL, pas mysqld, qui lisait le fichier. Mais c'était une pointe très utile!
Merci pour ce conseil, j'ai édité la poste en utilisant cette approche.