マルチGBのInnoDBMariaDB(最近MySQLから切り替えられました)があります。何らかの理由で、innodb_file_per_table
の値がON
に変更されました(明示的に1つのinnodbデータファイルのみが必要でした)。したがって、大きなテーブルの1つでALTER TABLE
ステートメントを実行すると、別の.ibd
ファイルが作成され、共有テーブルスペースで最大100GBのスペースを解放するための対策を講じたにもかかわらず、35GBを占有します(ibdata1
)。
このファイルのデータを共有テーブルスペースに再統合するにはどうすればよいですか?おそらくDISCARD TABLESPACE
でそれができると思いましたが、これはファイルとその中のデータを削除するだけです(もちろんサンプルテーブルでテストしました)。
個別の表領域が必要になる理由はたくさんありますが、特に管理の観点から、単一の共有表領域を持つことのすべての欠点を認識していると思います(たとえば、で一時テーブルを作成するときにファイルシステムスペースを浪費する方法) ALTER)。
MySQL 5.6およびMariaDBの一部のバージョンでは、デフォルトで1に設定されているため、最近アップグレードした場合は、おそらくinnodb_file_per_table
が自動的に変更されます。
メインテーブルスペース内のテーブルを再統合するには、実行中のサーバーで次を実行します。
SET GLOBAL innodb_file_per_table = 0;
次に、次のいずれかを実行してテーブルを再作成します。
ALTER TABLE your_table ENGINE=InnoDB;
または
ALTER TABLE your_table ENGINE=InnoDB, ALGORITHM=COPY;
mariaDB 10/MySQL5.6を使用している場合。
これにより、テーブルがテーブルスペース0に戻ります。再起動後も存続できるように、my.cnfのinnodb-file-per-table
オプションを変更することを忘れないでください。
はい、DISCARD TABLESPACE
は他の理由で使用されます。主に、トランスポータブル表領域でデータをインポートします。