機能の説明
この機能は主にデータファイルの大きなテーブルを削除し、IOのジッターを防止するために用いられます。
DROP TABLEは、元のデータベースファイル(.ibd)を新しい臨時ファイルに再命名して、成功が返されます。臨時ファイルはinnodb_async_drop_tmp_dirにより指定されるディレクトリに保存され、バックグラウンドでバッチでtruncateします。truncateされるファイルサイズはinnodb_async_truncate_sizeによって制御されます。テーブルの非同期削除機能の有効化はinnodb_async_truncate_work_enabledパラメータによって制御されます。
この機能はユーザーにより操作する必要はなく、カーネルにより自動的に実行されます。テーブル削除の際に、他のディレクトリでテーブルのデータファイルにハード接続を作成することで実現できます。drop table実行後、このファイルのハード接続のみが削除されます。その後、バックグラウンドスレッドのスキャンによってハード接続のディレクトリの中に削除すべきファイルがあると分かり次第、先ほどdropされたテーブルデータファイルをバックグラウンドで自動的にtruncateします。
サポートするバージョン
- カーネルバージョン MySQL 5.6 20220303以降
- カーネルバージョン MySQL 5.7 20190203以降
- カーネルバージョン MySQL 8.0 20200630以降
ユースケース
この機能は削除しようとするテーブルデータファイルが非常に大きいケースに適しています。
利用説明
- MySQL 5.6、5.7バージョンでは、innodb_async_truncate_work_enabledをONに設定すると、DROP TABLEが非同期方式に変更されます。デフォルトではOFFになっています。
- MySQL 8.0バージョンでは、innodb_table_drop_modeをASYNC_DROPに設定すると、DROP TABLEが非同期方式に変更されます。デフォルトではSYNC_DROPになっています。
- truncateするたびのファイルの大きさはinnodb_async_truncate_sizeによって制御されます(MySQL 5.6バージョンは現在サポートされません)。
- innodb_fast_ddlパラメータをオンにすると、大きなテーブルの非同期削除能力がより効果的になります。
パラメータ名 | 動的 | タイプ | デフォルト | パラメータ値範囲 | 説明 |
---|
innodb_async_truncate_work_enabled | Yes | string | OFF | ON/OFF | 大きなテーブルの非同期削除をオンにするかどうか。 |
パラメータ名 | 動的 | タイプ | デフォルト | パラメータ値範囲 | 説明 |
---|
innodb_async_truncate_work_enabled | Yes | string | OFF | ON/OFF | 大きなテーブルの非同期削除をオンにするかどうか。 |
innodb_async_truncate_size | Yes | int | 5.7、20210630およびそれ以前のバージョンでは、デフォルト値は128 5.7、20211030以降のバージョンでは、デフォルト値は64 | 5.7、20210630以前のバージョンでは、範囲は128MB - 2048MB 5.7、20211030以降のバージョンでは、範囲は16MB - 256MB | 非同期DROP TABLEのバックエンドでの毎回のtruncateファイルのサイズ、単位はMB |
パラメータ名 | 動的 | タイプ | デフォルト | パラメータ値範囲 | 説明 |
---|
innodb_table_drop_mode | Yes | string | SYNC_DROP | SYNC_DROP/ASYNC_DROP | 大きなテーブルの非同期削除をオンにするかどうか。 |
innodb_async_truncate_size | Yes | int | 128 | 128 - 168 | 非同期DROP TABLEがバックグラウンドで毎回ファイルサイズtruncateします。単位はMBです。 |
説明:
ユーザーは現在、上記パラメータのパラメータ値を直接変更することはできません。変更する場合は、チケットを提出から変更することができます。
この記事はお役に立ちましたか?