Crie um índice em uma tabela grande pode levar minutos ou mais, bloqueando operações DDL simultâneas durante esse período. A mesclagem e classificação DDL multivia substitui a classificação por mesclagem externa bidirecional padrão por uma classificação N-vias. Isso reduz os ciclos de leitura e gravação de arquivos intermediários e diminui o tempo total de criação do índice.
Pré-requisitos
Antes de começar, verifique se o cluster PolarDB atende a um dos seguintes requisitos de versão:
PolarDB for MySQL 8.0.2 com versão de revisão 8.0.2.2.5 ou posterior
PolarDB for MySQL 8.0.1 com versão de revisão 8.0.1.1.28 ou posterior
PolarDB for MySQL 5.7 com versão de revisão 5.7.1.0.23 ou posterior
Para verificar a versão do cluster, consulte Consultar a versão do mecanismo.
Como funciona
A criação de índices no InnoDB ocorre em três fases:
Varredura: O sistema varre o índice clusterizado e grava as entradas de classificação no buffer de classificação. Quando o buffer enche, as entradas são descarregadas em um arquivo intermediário temporário como uma execução classificada.
Classificação por mesclagem: Após a gravação de todas as execuções, o InnoDB as mescla. A classificação bidirecional padrão mescla duas execuções por vez, o que exige múltiplas passagens pelo arquivo intermediário. Já a mesclagem N-vias combina mais execuções por passagem, reduzindo o total de passagens e a E/S intermediária.
Inserção na árvore B: As entradas totalmente classificadas são inseridas no índice de árvore B.
Aumentar o número de vias reduz as passagens pelo arquivo intermediário, mas consome memória adicional: cada via extra requer um buffer de classificação adicional de innodb_sort_buffer_size bytes.
Limitações
Não há suporte para índices de texto completo e espaciais.
O uso de memória escala proporcionalmente ao número de vias. Ative a mesclagem N-vias aumenta a memória ocupada pelo cluster em
(N+1) × innodb_sort_buffer_sizebytes.
Configure mesclagem multivia
Defina innodb_polar_parallel_merge_ways no nível da sessão antes de execute a instrução DDL.
|
Parâmetro |
Escopo |
Valores válidos |
Padrão |
Descrição |
|
|
Sessão |
2–16 |
2 |
Número de vias para mesclagem e classificação. O valor padrão 2 utiliza a mesclagem bidirecional padrão. Defina um valor maior que 2 para ative a mesclagem multivia. |
Essa configuração aplica-se apenas à sessão atual e reverte para o padrão após o término da sessão.
Exemplo: Ative a mesclagem de oito vias e crie um índice em uma tabela grande.
SET innodb_polar_parallel_merge_ways = 8;
ALTER TABLE table_1 ADD INDEX name_index (seller_name);
Teste de desempenho
O teste a seguir compara a mesclagem bidirecional com a de oito vias em uma tabela de 100 milhões de linhas para demonstrar o impacto do aumento no número de vias.
Ambiente de teste
|
Item |
Especificação |
|
Cluster |
PolarDB for MySQL 8.0 |
|
CPU |
8 núcleos |
|
Memória |
32 GB |
|
Capacidade de armazenamento |
50 TB |
Esquema
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: 100.000.000 de linhas geradas pelo seguinte procedimento armazenado.
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);
Operação de teste: ALTER TABLE table_1 ADD INDEX name_index (seller_name);
Resultados
|
Configuração |
Tempo (segundos) |
|
Mesclagem e classificação de oito vias |
353 |
|
Mesclagem e classificação bidirecional |
485 |
Neste conjunto de dados e configuração de hardware, a mesclagem de oito vias reduziu o tempo de criação do índice em aproximadamente 27% em comparação à mesclagem bidirecional.
Fale conosco
Em caso de dúvidas sobre operações DDL, entre em contato com o suporte técnico.