O PolarDB oferece o recurso de E/S assíncrona para DDL. A criação de índices em tabelas grandes por meio de instruções DDL costuma ser demorada. Use a E/S assíncrona para DDL para reduzir significativamente o tempo necessário para criar esses índices.
Pré-requisitos
Antes de começar, verifique se o cluster do PolarDB atende a um dos seguintes requisitos de versão:
PolarDB for MySQL 8.0.2, versão de revisão 8.0.2.2.6 ou posterior
PolarDB for MySQL 8.0.1, versão de revisão 8.0.1.1.29 ou posterior
Para verificar a versão atual, consulte Consultar a versão do mecanismo.
Limitações
A E/S assíncrona para DDL não se aplica a:
Índices de texto completo
Índices espaciais
Ative E/S assíncrona para DDL
Defina o parâmetro innodb_polar_ddl_async_io como ON nas configurações de parâmetros do cluster. Para obter instruções, consulte Configure parâmetros de cluster e nó.
|
Parâmetro |
Nível |
Padrão |
Valores válidos |
Descrição |
|
|
Global |
|
|
Ativa ou desativa a E/S assíncrona para DDL |
Teste de desempenho
O teste a seguir mede o impacto da E/S assíncrona para DDL na criação de índices em tabelas grandes.
Ambiente de teste
PolarDB for MySQL 8.0, 8 núcleos de CPU, 32 GB de memória, capacidade de armazenamento de 50 TB
Schema
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 de teste
O procedimento armazenado a seguir insere 100.000.000 linhas na table_1:
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
Execute a instrução a seguir com a E/S assíncrona para DDL ativada e, em seguida, desativada. Compare o tempo de execução:
ALTER TABLE table_1 ADD INDEX name_index (seller_name);
|
E/S assíncrona para DDL |
Tempo (segundos) |
|
Ativada |
368 |
|
Desativada |
485 |
Neste teste, a ativação da E/S assíncrona para DDL reduziu o tempo de criação de índice em aproximadamente 24%.
Fale conosco
Em caso de dúvidas sobre operações DDL, entre em contato com o suporte técnico.