Da innodb_fle_per_table auf OFF gesetzt ist, können Sie die Tabelle nicht sehen und den Fortschritt messen.
Ich habe einen früheren Beitrag darüber verfasst, wie dies für MyISAM gemacht wird . Sie können dies für InnoDB genau dann tun, wenn innodb_file_per_table aktiviert wurde und Sie die InnoDB-Infrastruktur neu strukturieren . Es ist weiterhin erforderlich, im Betriebssystem die Größe der betreffenden Dateien zu überprüfen.
Nachdem Sie die InnoDB-Bereinigung vollständig implementiert und innodb_file_per_table aktiviert haben, können Sie die Indexaktualisierung wie folgt durchführen:
BEISPIEL Sie haben folgendes
- MySQL-Instanz mit / var / lib / mysql als Datenverzeichnis
- InnoDB-Tabelle
db.lotsofdatamit 20 Millionen Namen aufgerufen :
Die Tabelle sieht folgendermaßen aus:
CREATE TABLE db.lotsofdata
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30),
PRIMARY KEY (id)
) ENGINE=InnoDB;
Angenommen, Sie möchten einen Namensindex erstellen. Du kannst das:
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;
Während das INSERT ausgeführt wird, rufen Sie das Betriebssystem auf und führen Folgendes aus:
cd /var/lib/mysql/db
watch ls -l lotsofda*.ibd
Dadurch erhalten Sie eine Auflistung der aktuellen Größe von lotsofdata_new.ibd. Wenn es größer wird als lotsofdata.ibd, dann wissen Sie, dass Sie kurz vor dem Abschluss stehen.
BTW MariaDB hat einen intern implementierten Fortschrittsstatus .