Este tópico descreve a otimização do desempenho de E/S em instruções DDL.
PolarDB utiliza arquitetura com computação e armazenamento desacoplados. Os nós de computação acessam o armazenamento distribuído por meio de RDMA de alto desempenho. No entanto, a latência no acesso ao armazenamento distribuído ainda é significativamente maior que no acesso a discos locais. Operações DDL em tabelas grandes geram grande volume de operações de E/S; portanto, essa latência afeta diretamente o desempenho das instruções DDL. Para reduzir a latência de E/S, o PolarDB oferece os seguintes recursos:
Leitura antecipada de DDL: ativa threads de leitura antecipada na instrução DDL para criar índices e reduzir a latência de leitura de E/S.
E/S assíncrona de DDL: habilita threads de gravação em segundo plano durante escritas DDL para reduzir a latência de gravação de E/S.
Mesclagem e ordenação multivias de DDL: reduz as operações de E/S e a latência das instruções DDL.
Teste de desempenho
-
Ambiente de teste
Cluster do PolarDB for MySQL 8.0 com 8 núcleos de CPU e 32 GB de memória.
Capacidade de armazenamento do cluster: 50 TB.
-
Schema
Execute a seguinte instrução para criar uma tabela chamada
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; -
Dados
Execute a instrução a seguir para gerar dados de teste:
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) ; -
Método e resultados do teste
Após popular a tabela com dados, compare a eficiência da execução de DDL executando a instrução
ALTER TABLE table_1 ADD INDEX name_index (seller_name);:Leitura antecipada de DDL, E/S assíncrona de DDL e mesclagem e ordenação multivias de DDL
Tempo consumido (segundos)
Leitura antecipada de DDL, E/S assíncrona de DDL e mesclagem e ordenação multivias de DDL ativados:
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
Leitura antecipada de DDL, E/S assíncrona de DDL e mesclagem e ordenação multivias de DDL desativados:
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