機能の説明
この機能は主にデータファイルの大きなテーブルを削除し、IOのジッターを防止するために用いられます。
DROP TABLE操作を実行すると、システムがまず対象データベースの.ibdファイルを新しい一時ファイルにリネームし、直ちに操作成功のメッセージを返します。この一時ファイルは、innodb_async_drop_tmp_dirパラメータで指定されたディレクトリに格納されます。その後、システムがバックグラウンドでこの一時ファイルに対して段階的なtruncate処理を行います。truncateサイズはinnodb_async_truncate_sizeパラメータ(MySQL 5.6バージョンは未対応、MySQL 5.7およびMySQL 8.0バージョンは対応)によって制御されます。
この機能はユーザー操作不要でカーネルが自動的に実施します。その原理は、テーブルを削除する際に、別のディレクトリに該当テーブルのデータファイルのハードリンクを作成することです。DROP TABLE操作を実行した後、削除されるのはこのファイルのハードリンクだけです。その後、バックグラウンドスレッドがハードリンクのあるディレクトリに削除対象ファイルを検出すると、自動的にバックグラウンドで先ほどdropされたテーブルのデータファイルをtruncateします。
サポートするバージョン
カーネルバージョンMySQL 5.6 20220303以上
カーネルバージョンMySQL 5.7 20230601以上
カーネルバージョンMySQL 8.0 20200630以上
ユースケース
この機能は削除しようとするテーブルデータファイルが非常に大きいケースに適しています。
利用説明
MySQL 5.7および MySQL 8.0バージョンの使用説明
有効化手順
1. テーブルの非同期削除機能を使用する前に、パラメータinnodb_adaptive_hash_indexをOFFに設定してください。
2. パラメータinnodb_async_truncate_work_enabledをONに設定し、大規模テーブルの非同期削除を有効にします。パラメータ設定の手順については、インスタンスパラメータの設定を参照してください。 関連パラメータの説明
|
innodb_adaptive_hash_index | yes | string | ON | ON/OFF | InnoDB適応型ハッシュインデックスの有効化の確認。-ON:有効。-OFF:無効。 |
innodb_async_truncate_work_enabled | yes | string | OFF | ON/OFF | 大規模テーブルの非同期削除の有効化の確認。- ON:有効。- OFF:無効。 |
有効化手順
1. 大規模テーブルの非同期削除機能を使用する前に、パラメータinnodb_fast_ahi_cleanup_for_drop_tableをONに設定してください。
2. パラメータinnodb_adaptive_hash_indexをOFFに設定してください。
3. パラメータinnodb_table_drop_modeをASYNC_DROPに設定し、大規模テーブルの非同期削除機能を有効にします。パラメータ設定の手順については、インスタンスパラメータの設定を参照してください。 4. (任意のステップ)パラメータinnodb_fast_ddlをONに設定すると、大規模テーブルの非同期削除機能がより効率的になります。FAST DDL機能と関連パラメータに関連するため、FAST DDLを参照してください。 関連パラメータの説明
|
innodb_fast_ahi_cleanup_for_drop_table | yes | string | ON | ON/OFF | 適応型ハッシュインデックスのクイッククリーンアップ最適化の有効化の確認。- ON:有効。有効にすると、時間がかかるハッシュのクリーンアップによる大規模テーブルの削除が遅くなってしまうことを防ぐことができます。- OFF:無効。 |
innodb_adaptive_hash_index | yes | string | OFF | ON/OFF | InnoDB適応型ハッシュインデックスの有効化の確認。-ON:有効。-OFF:無効。 |
innodb_table_drop_mode | yes | string | ASYNC_DROP | SYNC_DROP/ASYNC_DROP | 大規模テーブルの非同期削除機能の有効化の確認。- ASYNC_DROP:非同期モード、つまり有効。- SYNC_DROP:同期モード、つまり無効。 |
innodb_async_truncate_size | yes | int | 128 | 128 - 168 | 大規模テーブルの非同期削除機能がバックグラウンドで毎回truncateするファイルサイズ。単位はMBです。 |