PolarDBは、DDL先読み機能を提供します。 大きなテーブルでDDL文を実行するには非常に長い時間がかかります。 DDL先読み機能を使用すると、DDLステートメントの実行に必要な時間を短縮できます。
前提条件
PolarDBクラスターは、次のいずれかの要件を満たす必要があります。
リビジョンバージョンが8.0.1.1.28以降のPolarDB for MySQL 8.0のクラスター。
リビジョンバージョンが5.7.1.0.22以降のPolarDB for MySQL 5.7のクラスター。
リビジョンバージョンが5.6.1.0.34以降のPolarDB for MySQL 5.6のクラスター。
クラスターバージョンを確認する方法の詳細については、「エンジンバージョンの照会」をご参照ください。
注意事項
DDL先読み機能を有効にすると、先読みスレッドのために、より多くのI/Oリソースが占有されます。 これは、同じ期間内の他のSQL文の実行に影響を与える可能性があります。 そのため、オフピーク時にDDL先読み機能を使用することを推奨します。
使用法
loose_innodb_polar_ddl_build_index_先読み
loose_innodb_polar_ddl_build_index_readaheadパラメーターを使用して、DDL先読み機能を有効にできます。
パラメーター
レベル
説明
loose_innodb_polar_ddl_build_index_先読み
グローバル
DDL先読み機能を有効にするかどうかを指定します。 デフォルト値: OFF。 有効な値:
ON
OFF
loose_innodb_polar_ddl_build_index_readahead_page_num
loose_innodb_polar_ddl_build_index_readahead_page_numパラメーターを使用して、データサイズを先読みに設定できます。
パラメーター
レベル
説明
loose_innodb_polar_ddl_build_index_readahead_page_num
グローバル
先に読むページ数。 1ページのデータサイズは16Kである。 有効値: 32 ~ 256 デフォルト値: 64。
性能テスト
テスト環境
8 CPUコアと32 GBメモリを持つPolarDB for MySQL 8.0のクラスター。
クラスターのストレージ容量は50テラバイトです。
Schema
次のステートメントを実行して、
table_1
という名前のテーブルを作成します。CREATE TABLE `table_1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `seller_id` bigint(20) DEFAULT NULL, `seller_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, `update_time` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Data
次の文を実行してテストデータを生成します。
delimiter || CREATE PROCEDURE populate_0(IN NUM INT) BEGIN DECLARE sid INT; DECLARE suffix_name INT; DECLARE i INT; SET sid=1000; SET suffix_name=10; SET i=1; START TRANSACTION; WHILE i <= NUM DO INSERT INTO table_1(seller_id,seller_name,gmt_create,update_time) VALUES(sid,CONCAT('sellername',suffix_name),NOW(),NOW()); SET suffix_name=suffix_name+1; SET sid=sid+1; SET i=i+1; END WHILE; COMMIT; END || delimiter ; CALL populate_0(100000000) ;
テスト方法とテスト結果
データの挿入後、PolarDBプロセスを再起動して、buffer_poolメモリにデータがキャッシュされないようにする必要があります。 DDL先読み機能が有効になる前後の時間値を比較して、DDL実行効率の改善率をテストします。
ALTER TABLE table_1 ADD INDEX name_index (seller_name);
ステートメントを実行して、DDLの実行効率を比較します。DDL先読み機能
消費時間 (秒)
無効
485
Enabled
(loose_innodb_polar_ddl_build_index_readahead_page_numは256に設定されています)
412
ALTER TABLE table_1 ADD COLUMN c1 varchar(100) after id;
ステートメントを実行して、DDLの実行効率を比較します。DDL先読み機能
消費時間 (秒)
無効
264
Enabled
(loose_innodb_polar_ddl_build_index_readahead_page_numは256に設定されています)
159