Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Melhor prática para criar índices em suas tabelas MySQL – Rolling Index Builds

Tendo índices apropriados em suas tabelas MySQL, você pode melhorar muito o desempenho das consultas SELECT. Mas, você sabia que adicionar índices às suas tabelas por si só é uma operação cara e pode levar muito tempo para ser concluída, dependendo do tamanho de suas tabelas? Durante esse período, você provavelmente também experimentará um desempenho degradado das consultas, pois os recursos do sistema também estarão ocupados no trabalho de criação de índice. Nesta postagem do blog, discutimos uma abordagem para otimizar o processo de criação de índice MySQL de forma que sua carga de trabalho regular não seja afetada.

Criação de índice móvel do MySQL

Chamamos essa abordagem de "Criação de índice contínuo". Se você tiver um conjunto de réplicas mestre-escravo do MySQL, poderá criar o índice um nó por vez de maneira contínua. Você deve criar o índice apenas nos nós escravos para que o desempenho do mestre não seja afetado. Quando a criação do índice é concluída nos escravos, rebaixamos o mestre atual e promovemos um dos escravos que está atualizado como o novo mestre. Neste momento, a construção do índice continua no nó mestre original (que agora é um escravo). Haverá uma curta duração (dezenas de segundos) durante a qual você perderá a conectividade com seu banco de dados devido ao failover, mas isso pode ser superado com novas tentativas no nível do aplicativo.

Benefícios de desempenho da criação de índice contínuo

Fizemos um pequeno experimento para entender os benefícios de desempenho da criação de índice contínuo.

O teste utilizou um conjunto de dados MySQL criado usando Sysbench que tinha 3 tabelas com 50 milhões de linhas cada. Geramos carga no MySQL master com 30 clientes executando uma carga de trabalho balanceada (50% de leituras e 50% de gravações) por 10 minutos e, ao mesmo tempo, construímos um índice secundário simples em uma das tabelas em dois cenários:

  1. Criando o índice diretamente no mestre
  2. Criando o índice no escravo

Configuração do banco de testes do MySQL

Tipo de instância MySQL Instância EC2 m4.large com 8 GB de RAM
Tipo de implantação Conjunto mestre-escravo de 2 nós com replicação semisíncrona
Versão do MySQL 5.7.25

Resultados de desempenho

Cenário Taxa de transferência da carga de trabalho (consultas por segundo) 95º percentil de latência
Criação de índice no mestre 453,63 670 ms
Criação de índice contínuo 790,03 390 ms

Resumo

Ao executar a criação do índice diretamente no MySQL master, pudemos experimentar apenas 60% da taxa de transferência obtida ao executar a criação do índice no MySQL slave por meio de uma operação contínua. A latência do percentil 95 das consultas também foi 1,8 vezes maior quando a criação do índice ocorreu no servidor mestre.
Prática recomendada para criar índices em suas tabelas #MySQLClick To Tweet

Automatizando a criação do Rolling Index

ScaleGrid automatiza a Criação de Rolling Index para sua implantação do MySQL com uma interface de usuário simples para iniciá-la.


Na interface do usuário acima, você pode selecionar o nome do banco de dados e da tabela e 'Adicionar índice' como a operação Alter Table. Em seguida, especifique um nome de coluna e um nome de índice, e um comando de alteração de tabela será gerado e exibido para você. Depois de clicar em Criar, a criação do índice acontecerá um nó por vez de forma contínua.

Além disso, ScaleGrid também suporta outras operações simples Alter Table, como adicionar uma nova coluna à sua tabela de forma contínua. Fique atento ao meu post de acompanhamento no blog com mais detalhes!