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
- Instance MySQL avec / var / lib / mysql comme datadir
- Table InnoDB appelée
db.lotsofdata
avec 20 millions de noms:
Le tableau ressemble à ceci:
CREATE TABLE db.lotsofdata
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30),
PRIMARY KEY (id)
) ENGINE=InnoDB;
Supposons que vous souhaitiez créer un index de nom. Tu peux le faire:
CREATE TABLE db.lotsofdata_new LIKE db.lotsofdata;
ALTER TABLE db.lotsofdata_new ADD INDEX (name);
INSERT INTO db.lotsofdata_new SELECT * db.lotsofdata;
ALTER TABLE db.lotsofdata RENAME db.lotsofdata_old;
ALTER TABLE db.lotsofdata_new RENAME db.lotsofdata;
TRUNCATE TABLE db.lotsofdata_old;
ALTER TABLE db.lotsofdata_old ENGINE=InnoDB;
DROP TABLE db.lotsofdata_old;
Pendant l'insertion, vous allez dans le système d'exploitation et exécutez ceci:
cd /var/lib/mysql/db
watch ls -l lotsofda*.ibd
Cela vous donnera une liste de la taille actuelle de lotsofdata_new.ibd
. Quand il devient plus gros que ça lotsofdata.ibd
, alors vous savez que vous êtes presque terminé.
BTW MariaDB a un statut de progression implémenté en interne .