Поскольку innodb_fle_per_table выключен, вы не можете увидеть таблицу и измерить ее ход.
Я сделал предыдущий пост о том, как сделать это для MyISAM . Вы можете сделать это для InnoDB, если и только если innodb_file_per_table был включен, и вы реорганизуете инфраструктуру InnoDB . Это все еще требует, чтобы смотреть в операционной системе на размеры файлов, о которых идет речь.
После того как вы полностью внедрили очистку InnoDB и включили innodb_file_per_table, вы можете выполнить обновление индекса следующим образом:
ПРИМЕР у вас есть следующее
- Экземпляр MySQL с / var / lib / mysql в качестве datadir
- Таблица InnoDB называется
db.lotsofdata
с 20 миллионами имен:
Таблица выглядит так:
CREATE TABLE db.lotsofdata
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30),
PRIMARY KEY (id)
) ENGINE=InnoDB;
Предположим, вы хотите создать индекс имени. Ты можешь сделать это:
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;
Пока INSERT работает, вы заходите в операционную систему и запускаете это:
cd /var/lib/mysql/db
watch ls -l lotsofda*.ibd
Это даст вам список текущего размера lotsofdata_new.ibd
. Когда он становится больше чем lotsofdata.ibd
, тогда вы знаете, что близки к завершению.
Кстати, MariaDB имеет статус прогресса, реализованный внутри .