J'exécute actuellement une autre requête sur ma table (20 millions d'entrées) afin d'ajouter un index. il fonctionne déjà depuis plus de 3 jours (coincé sur 'copier dans la table tmp').
Existe-t-il un moyen de voir la progression de la requête ou en d'autres termes existe-t-il un moyen d'obtenir une estimation du temps de réalisation?
Merci.
SHOW CREATE TABLE tblname\G
sur le tableau et dites-nous l'index que vous souhaitez faire.Réponses:
Lorsque mysql modifie une table, il en fait essentiellement une copie puis échange la copie. De cette façon, si vous annulez la mise à jour au milieu, la table est toujours dans un état stable. Vous pouvez donc regarder dans le répertoire de données mysql (/ var / lib / mysql /?) Pour voir la taille du nouveau fichier, qui vous dira à quel point il est long. C'est un peu plus difficile avec Innodb, mais il y a une table tmp en cours de création quelque part.
Vous pouvez réduire considérablement le temps nécessaire à un index en augmentant vos variables de tampon de tri (myisam_sort_buffer_size, sort_buffer_size). Faites-les aussi grandes que possible avec la mémoire dont vous disposez. Vous pouvez réduire de quelques jours le délai de modification, voire le réduire à quelques heures en fonction de la quantité de mémoire dont vous disposez. J'ai fait une table d'enregistrement de 150M en environ 3 heures.
la source
Puisque innodb_fle_per_table est désactivé, vous ne pouvez pas voir le tableau et mesurer sa progression.
J'ai fait un post antérieur sur la façon de procéder pour MyISAM . Vous pouvez le faire pour InnoDB si et seulement si innodb_file_per_table a été activé et que vous avez réarchitecturé l'infrastructure InnoDB . Il faut toujours regarder dans le système d'exploitation la taille des fichiers en question.
Une fois que vous avez entièrement implémenté le nettoyage InnoDB et que vous avez activé innodb_file_per_table, vous pouvez effectuer la mise à jour de l'index comme suit:
EXEMPLE vous avez les éléments suivants
db.lotsofdata
avec 20 millions de noms:Le tableau ressemble à ceci:
Supposons que vous souhaitiez créer un index de nom. Tu peux le faire:
Pendant l'insertion, vous allez dans le système d'exploitation et exécutez ceci:
Cela vous donnera une liste de la taille actuelle de
lotsofdata_new.ibd
. Quand il devient plus gros que çalotsofdata.ibd
, alors vous savez que vous êtes presque terminé.BTW MariaDB a un statut de progression implémenté en interne .
la source
Il n'existe aucun moyen fiable de voir la progression de la création d'un index. Si vous aviez innodb-file-per-table, vous pouvez obtenir des indications en regardant le fichier .ibd temporaire qui est créé dans le répertoire de données et le comparer à la taille du fichier actuel, mais ce n'est pas très fiable, car votre fichier de données actuel pourrait être gonflé en raison de suppressions / fragmentation et le nouveau fichier de données aura un index supplémentaire que votre précédent n'avait pas.
On dirait que vous utilisez une version de MySQL sans plugin InnoDB installé. Le plugin InnoDB a une création d'index rapide qui ne nécessite pas une reconstruction complète de la table pour les ajouts et suppressions d'index. Le plugin InnoDB est activé par défaut dans MySQL 5.5 et disponible avec un paramètre de configuration dans 5.1.38 et versions ultérieures.
Percona Server recule un peu (avant 5.5) le plugin InnoDB est activé par défaut.
la source
pt-online-schema-change de Percona montre l'estimation du temps restant. Par défaut, il imprime l'estimation du temps restant et le pourcentage de progression toutes les 30 secondes.
Il a également des fonctions supplémentaires par rapport à l'exécution de la commande ALTER seule.
http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html
la source