10
votes

Comment voir les progrès de .csv télécharger dans mysql

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é.

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.

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?

merci


0 commentaires

3 Réponses :


11
votes

de http: //www.stephanchu .COM / 2008/12 / speed-up-your-mysql-data-load.html , vous pouvez utiliser le statut show Innodb si votre table est un type innoDB, que vous avez intégré ' t arrive à mentionner.

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.


1 commentaires

Afficher le statut InnoDB devrait maintenant devenir Show Moteur InnoDB Statut \ g; , avec le trail supplémentaire \ g , de sorte que grep Travaux



5
votes

Couple d'approches ici ...

  1. SET SESSION transaction Niveau d'isolation Lire non engagée ; Puis compter (*) fonctionnera
  2. 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 = ;

0 commentaires

29
votes

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:

  1. Trouvez MySQLD PID (dans cet exemple: 1234 ):

    $ PS -EF | grep mysqld

    mysql 1234 1 0 février12? 00:00:55 / usr / sbin / mysqld

  2. Recherchez le numéro de descripteur de fichier de votre fichier chargé (dans cet exemple: 45 ):

    $ sudo ls -l / proc / 1234 / fd

    lr-x ------- 1 racine racine 64 10 févr. 10:56 45 -> /var/lib/mysql/db/load_file.txt

  3. Imprimer info sur ce descripteur de fichier et vérifiez le nombre d'octets déjà lu (dans cet exemple: 494927872 ):

    $ cat / proc / 1234 / fdinfo / 45

    pos: 494927872

    drapeaux: 0100000

    Vous pouvez comparer cet indicateur de progression (en octets) à la taille du fichier réelle en cours de chargement.

    au lieu des étapes 1 et 2, vous pouvez également utiliser la commande "LSOF": xxx


4 commentaires

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.