すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:MySQL 5.7 における information_schema.tables の DATA_FREE 値の異常

最終更新日:Mar 28, 2026

症状

ApsaraDB RDS for MySQL 5.7 インスタンスで以下のクエリを実行すると、上位の結果のほとんどに、DATA_FREE の値として同一の大きな数値が表示されます。これらのテーブルはすべて information_schema データベースに属しています。ただし、この値は当該テーブルの実際のディスク断片化状況と一致しません。

SELECT TABLE_SCHEMA, TABLE_NAME, DATA_FREE FROM INFORMATION_SCHEMA.TABLES ORDER BY DATA_FREE DESC LIMIT 10;

実行例の出力:

+--------------------+-----------------+-----------+
| TABLE_SCHEMA       | TABLE_NAME      | DATA_FREE |
+--------------------+-----------------+-----------+
| information_schema | COLUMNS         |   8388608 |
| information_schema | EVENTS          |   8388608 |
| information_schema | OPTIMIZER_TRACE |   8388608 |
| information_schema | PARAMETERS      |   8388608 |
| information_schema | PARTITIONS      |   8388608 |
| information_schema | PLUGINS         |   8388608 |
| information_schema | PROCESSLIST     |   8388608 |
| information_schema | ROUTINES        |   8388608 |
| information_schema | TRIGGERS        |   8388608 |
| information_schema | VIEWS           |   8388608 |
+--------------------+-----------------+-----------+

根本原因

これは MySQL 5.7 における既知のバグです。

information_schema 内の一部のテーブル(例:COLUMNS、EVENTS)は InnoDB ストレージエンジンを使用しており、innodb_temporary 表領域(対応するファイルは ibtmp1)に一時テーブルとして格納されます。このバグにより、MySQL は各テーブルごとの断片化状況ではなく、ibtmp1 ファイル全体の空き領域を、これらのテーブルそれぞれの DATA_FREE 値として報告します。

これを確認するには、以下のクエリを実行してください:

SELECT TABLESPACE_NAME, FILE_NAME, ENGINE, DATA_FREE FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='innodb_temporary';

実行例の出力:

+------------------+-----------+--------+-----------+
| TABLESPACE_NAME  | FILE_NAME | ENGINE | DATA_FREE |
+------------------+-----------+--------+-----------+
| innodb_temporary | ./ibtmp1  | InnoDB |   8388608 |
+------------------+-----------+--------+-----------+

DATA_FREE の値が完全に一致することから、表示されているのは各テーブルの実際のディスク断片化ではなく、ibtmp1 ファイルの空き領域であることが確認できます。

ソリューション

これは、MySQL 5.7 の既知の問題に起因する表示上のバグであり、無視しても構いません。

この問題を防止するには、メジャーエンジンバージョンを MySQL 8.0 にアップグレードします。詳細については、「ApsaraDB RDS for MySQL インスタンスのメジャーエンジンバージョンをアップグレードする」をご参照ください。

ibtmp1 ファイルが占有しているストレージ領域を解放するには、RDS インスタンスを再起動してください。再起動後、ibtmp1innodb_temp_data_file_path パラメーターで定義された初期サイズにリセットされます。