全部产品
Search
文档中心

PolarDB:Optimasi Kinerja I/O DDL

更新时间:Jul 03, 2025

Topik ini menjelaskan optimasi kinerja I/O dari pernyataan DDL.

PolarDB menggunakan arsitektur terpisah antara komputasi dan penyimpanan. Node komputasi memanfaatkan RDMA berperforma tinggi untuk mengakses penyimpanan terdistribusi. Namun, latensi akses penyimpanan terdistribusi tetap lebih tinggi dibandingkan dengan akses disk lokal. Operasi DDL pada tabel besar memicu sejumlah besar operasi I/O, sehingga latensi akses penyimpanan terdistribusi memengaruhi kinerja pernyataan DDL. Untuk mengurangi latensi I/O, PolarDB menyediakan fitur-fitur berikut:

  • DDL read-ahead: Mengaktifkan thread read-ahead untuk pernyataan DDL guna membuat indeks dan mengurangi latensi baca I/O.

  • DDL asynchronous I/O: Mengaktifkan thread tulis latar belakang selama penulisan DDL untuk mengurangi latensi tulis I/O.

  • DDL multi-way merging and sorting: Mengurangi jumlah operasi I/O untuk pernyataan DDL serta latensi I/O.

Pengujian Kinerja

  • Lingkungan Pengujian

    • Sebuah kluster PolarDB for MySQL 8.0 dengan 8 inti CPU dan 32 GB memori.

    • Kapasitas penyimpanan kluster adalah 50 TB.

  • Skema

    Jalankan pernyataan berikut untuk membuat tabel bernama 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

    Jalankan pernyataan berikut untuk menghasilkan data uji:

    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) ;
  • Metode Pengujian dan Hasil Pengujian

    Bandingkan efisiensi eksekusi DDL dengan menjalankan pernyataan ALTER TABLE table_1 ADD INDEX name_index (seller_name); setelah tabel diisi dengan data:

    DDL read-ahead, DDL asynchronous I/O, dan DDL multi-way merging and sorting

    Waktu yang diperlukan (detik)

    DDL read-ahead, DDL asynchronous I/O, dan DDL multi-way merging and sorting diaktifkan:

    • 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 read-ahead, DDL asynchronous I/O, dan DDL multi-way merging and sorting dinonaktifkan:

    • 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