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