Como innodb_fle_per_table está desativado, você não pode ver a tabela e medir o seu progresso.
Eu fiz um post anterior sobre como fazer isso no MyISAM . Você pode fazer isso no InnoDB se, e somente se, innodb_file_per_table estiver ativado, e você reprojetar a infraestrutura do InnoDB . Ainda é necessário procurar no sistema operacional os tamanhos dos arquivos em questão.
Depois de implementar totalmente a Limpeza do InnoDB e ativar o innodb_file_per_table, convém executar a atualização do índice da seguinte maneira:
EXEMPLO você tem o seguinte
- Instância MySQL com / var / lib / mysql como datadir
- Tabela do InnoDB chamada
db.lotsofdata
com 20 milhões de nomes:
A tabela fica assim:
CREATE TABLE db.lotsofdata
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30),
PRIMARY KEY (id)
) ENGINE=InnoDB;
Suponha que você queira criar um índice de nome. Você consegue fazer isso:
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;
Enquanto o INSERT está em execução, você entra no sistema operacional e executa o seguinte:
cd /var/lib/mysql/db
watch ls -l lotsofda*.ibd
Isso fornecerá uma lista do tamanho atual de lotsofdata_new.ibd
. Quando fica maior que lotsofdata.ibd
, então você sabe que está quase completo.
BTW MariaDB tem um Status de Progresso implementado internamente .