AliSQL は DDL スロットリングをサポートしています。これにより、DDL 操作に対する BPS と IOPS の上限を設定できます。I/O リソース消費を制御することで、オンラインサービスの安定性を確保できます。
概要
背景:MySQL Community Edition では DDL 操作のスロットリングが行われないため、I/O 消費が高くなる可能性があります。この問題は MySQL 8.0 でより顕著です。MySQL 8.0 では、パラレル DDL によって I/O 使用量がさらに増加し、オンラインサービスに影響を与える可能性があります。
紹介:AliSQL は、MySQL Community Edition の DDL 実行ロジックを拡張することで DDL スロットリングを実装しています。この機能では、個々の DDL 操作に対して BPS と IOPS の制限を設定できます。この方法で I/O リソース消費を制限することで、I/O スパイクを防止し、オンラインサービスの安定性を維持できます。
前提条件
DDL スロットリングを使用するには、インスタンスが次のいずれかのバージョン要件を満たしている必要があります。
MySQL 8.4
マイナーエンジンバージョンが 20251031 以降の MySQL 8.0
インスタンスがこれらの要件を満たしていない場合は、マイナーエンジンバージョンまたはメジャーエンジンバージョンをアップグレードできます。
パラメーター
パラメーターの詳細
loose_innodb_ddl_io_limit_enabled パラメーターを使用して、DDL スロットリング機能を有効または無効にできます。機能を有効にした後、innodb_ddl_bps_limit パラメーターで BPS 制限を設定し、innodb_ddl_iops_limit パラメーターで IOPS 制限を設定できます。
|
パラメーター |
説明 |
|
|
|
|
|
|
|
|
|
パラメーターの変更
- RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
-
左側のナビゲーションペインで [パラメーター設定] をクリックします。
-
[編集可能なパラメーター] タブで、対象のパラメーターを見つけて値を設定します。
-
[OK] をクリックし、続いて [パラメーターの送信] をクリックします。表示されるダイアログボックスで、変更をいつ有効にするかを指定します。
操作手順
-
DDL スロットリング機能の有効化
「パラメーターの変更」セクションの手順に従い、RDS コンソールで
loose_innodb_ddl_io_limit_enabledパラメーターをONに設定し、変更を送信します。 -
BPS と IOPS 制限の設定
DDL スロットリングを有効にした後、DDL 文を実行する前に、セッション内で BPS と IOPS の制限を設定します。BPS、IOPS、またはその両方に制限を適用できます。
# DDL 操作の BPS を 100 MB に制限します。 SET SESSION innodb_ddl_bps_limit = 100 * 1024 * 1024; # DDL 操作の IOPS を 5,000 に制限します。 SET SESSION innodb_ddl_iops_limit = 5000;
例
この例では、DDL 文を直接実行した場合と、スロットリングを有効にして実行した場合のインスタンスの I/O 消費量を比較します。
# 1. DDL 文を直接実行します。
ALTER TABLE t1 ADD INDEX idx_1(c1);
ALTER TABLE t1 DROP INDEX idx_1;
OPTIMIZE TABLE t1;
# 2. BPS 制限を 160 MB に設定します。
SET SESSION innodb_ddl_bps_limit = 160 * 1024 * 1024;
ALTER TABLE t1 ADD INDEX idx_1(c1);
ALTER TABLE t1 DROP INDEX idx_1;
OPTIMIZE TABLE t1;
