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

PolarDB:DDL I/Oパフォーマンスの最適化

最終更新日:Feb 17, 2025

このトピックでは、DDLステートメントのI/Oパフォーマンスの最適化について説明します。

PolarDBは、コンピューティングとストレージの分離アーキテクチャを使用します。 計算ノードは、高性能RDMAを使用して分散ストレージにアクセスします。 ただし、分散ストレージアクセスのレイテンシは、依然としてローカルディスクアクセスのレイテンシよりも大幅に高くなります。 大きなテーブルに対するDDL操作は、多数のI/O操作をトリガーします。 したがって、分散ストレージアクセスのレイテンシは、DDLステートメントのパフォーマンスに影響します。 I/Oレイテンシを削減するために、PolarDBには次の機能があります。

  • DDL先読み: DDLステートメントの先読みスレッドがインデックスを作成して、I/O読み取り待ち時間を短縮できるようにします。

  • DDL非同期I/O: DDL書き込み中にバックグラウンド書き込みスレッドを有効にして、I/O書き込みレイテンシを削減します。

  • DDLマルチウェイマージおよびソート: DDLステートメントのI/O操作とI/Oレイテンシを削減します。

パフォーマンステスト

  • テスト環境

    • 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) ;
  • テスト方法とテスト結果

    テーブルにデータを入力した後、ALTER TABLE table_1 ADD INDEX name_index (seller_name); ステートメントを実行して、DDLの実行効率を比較します。

    DDL先読み、DDL非同期I/O、およびDDLマルチウェイマージとソート

    消費時間 (秒)

    DDL先読み、DDL非同期I/O、およびDDLマルチウェイマージとソートが有効になっています。

    • loose_innodb_polar_ddl_build_index_readahead=ON

    • loose_innodb_polar_ddl_build_index_readahead_page_num=256

    • innodb_polar_ddl_async_io=ON

    • innodb_polar_parallel_merge_ways=8

    252

    DDL先読み、DDL非同期I/O、およびDDLマルチウェイのマージとソートが無効になっています。

    • loose_innodb_polar_ddl_build_index_readahead=OFF

    • loose_innodb_polar_ddl_build_index_readahead_page_num=64

    • innodb_polar_ddl_async_io=OFF

    • innodb_polar_parallel_merge_ways=2

    485