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

PolarDB:DDL先読み

最終更新日:Jul 01, 2024

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