Neste documento, descrevemos conceitos e mecanismos para gerenciar índices secundários em réplicas de leitura do Cloud SQL nas edições Cloud SQL Enterprise e Cloud SQL Enterprise Plus. No MySQL, é possível criar dois tipos principais de índices em uma tabela:
- Índice em cluster: o índice principal em uma tabela do MySQL que ordena fisicamente as linhas no disco. Quando você define uma chave primária em uma tabela, o MySQL a usa como o índice em cluster. Uma tabela só pode ter um índice clusterizado.
Índice secundário: um índice adicional em uma tabela do MySQL que otimiza o desempenho da consulta.
Embora uma réplica seja normalmente somente leitura, é possível criar índices secundários em tabelas para fins de relatório. O Cloud SQL é compatível com dois métodos para criar índices secundários de réplica:
- Índices de réplica gerenciados (recomendado): o Cloud SQL armazena definições de índice na instância principal e recria índices secundários automaticamente após falhas ou recriação de réplicas. O Google recomenda índices gerenciados em vez de índices autogerenciados para evitar a perda de índices e a restauração manual de índices.
- Índices de réplica autogerenciados: permitem adicionar e remover índices secundários diretamente em uma réplica, mas esses índices não persistem após uma falha ou recriação da réplica. Se você estiver usando índices autogerenciados, poderá migrar para o uso de índices de réplica gerenciados.
Comparar métodos de índice de réplica
A tabela a seguir compara os índices de réplica gerenciados e os índices de réplica autogerenciados no Cloud SQL:
| Recurso | Índices de réplica gerenciados | Índices de réplica autogerenciados |
|---|---|---|
| Persistência na recriação de réplicas | Recriação automática | Descartado (é necessário recriar manualmente) |
| Modelo de configuração | Metadados centralizados na instância principal | DDL direto na réplica de leitura de destino |
| Mecanismo de execução | Processo periódico em segundo plano (aproximadamente a cada cinco minutos) |
Execução imediata |
| Proteção contra atraso de replicação | Pausa automaticamente a criação do índice se o atraso de replicação exceder 20 minutos | Nenhum (gerenciado pelo usuário) |
| Edições compatíveis | Edições Cloud SQL Enterprise e Cloud SQL Enterprise Plus | Edições Cloud SQL Enterprise e Cloud SQL Enterprise Plus |
| Versões de banco de dados compatíveis | Cloud SQL para MySQL (versão de manutenção R20260726.00_05 ou mais recente) |
Cloud SQL para MySQL (todas as versões compatíveis) |
| Suporte a réplicas de servidores externos | Sem suporte | Com suporte |
Índices de réplica gerenciados
Para evitar a perda de índices após a recriação da réplica, o Cloud SQL é compatível com índices de réplica gerenciados. O Google recomenda esse método de criação e retenção de índices. O Cloud SQL ativa esse método por padrão.
Os índices de réplica gerenciada exigem a versão de manutenção do Cloud SQL
R20260726.00_05 ou mais recente.
As seções a seguir descrevem como o Cloud SQL mantém os índices de réplica, os benefícios deles e como eles se comportam durante eventos de ciclo de vida.
Como o Cloud SQL mantém índices de réplica gerenciados
Com esse método, você define índices secundários de réplica, os agrupa e
designa quais réplicas podem manter esses grupos de índices. O Cloud SQL
executa um processo em segundo plano na réplica para criar e descartar os índices
necessários automaticamente e mantê-los ao longo do tempo. Quando
o Cloud SQL cria um índice de réplica gerenciada, ele adiciona uma
tag [SIC_X_Y] ao
comentário do índice, em que X e Y são números inteiros.
Essa tag é usada apenas para gerenciamento interno e não tem funcionalidade.
O Cloud SQL realiza a manutenção de índices de réplica gerenciados, como
criar e descartar índices, em lotes.
Depois que o processo de manutenção de índice do Cloud SQL seleciona um grupo de ações CREATE ou DROP, ele cria uma entrada de status PENDING para cada índice secundário. Em seguida, ele executa em série cada instrução de linguagem de definição de dados (DDL). Uma falha em um índice não bloqueia a execução dos
índices subsequentes na fila. Em seguida, o Cloud SQL seleciona o próximo
lote após aproximadamente cinco minutos.
Benefícios e casos de uso
Os índices de réplica gerenciados oferecem os seguintes benefícios:
- Retenção de índice automatizada: quando o Cloud SQL recria uma réplica de leitura (como após uma falha na instância), ele recria automaticamente os índices secundários mapeados para essa réplica. Não é necessário executar procedimentos armazenados manuais nem manter scripts externos de rastreamento de esquema para restaurar índices ausentes.
- Desempenho de consulta consistente: ao recriar automaticamente índices secundários após a recuperação da réplica, o Cloud SQL mantém a capacidade de processamento de consultas e evita picos de latência de consulta e alta utilização de CPU causados por consultas não indexadas.
- Configuração baseada em grupo: você define os índices secundários uma vez na
instância principal e os organiza em grupos de réplicas nomeados. Em seguida, é possível
atribuir um grupo de índices com centenas de índices a uma réplica de leitura
definindo uma única flag de banco de dados (
cloudsql_index_recreate_replica_group). Isso elimina a necessidade de executar procedimentos armazenados individuais em várias réplicas. - Atribuição seletiva de índice por função de réplica: é possível atribuir grupos de índices especificamente a réplicas de leitura de relatórios e análises para acelerar as consultas de leitura, mantendo as réplicas de leitura de recuperação de desastres (DR) não indexadas e idênticas ao esquema da instância principal. Isso evita a sobrecarga de transações de gravação e o atraso de replicação em instâncias de DR.
- Isolamento de desempenho da instância principal: os índices secundários em réplicas de leitura otimizam as consultas de leitura e de relatórios sem consumir armazenamento nem adicionar latência de transação de gravação à instância principal.
- Observabilidade integrada: os procedimentos armazenados dedicados permitem monitorar o progresso da criação de índices, a duração da execução e os registros de erros na réplica de leitura.
- Migração e coexistência sem interrupções: os índices de réplica gerenciados coexistem com segurança com os índices de réplica autogerenciados na mesma instância e tabela. É possível adotar índices de réplica gerenciados de forma incremental sem inatividade ou interrupção das cargas de trabalho de consulta de leitura ativa.
Promoção de réplica
O Cloud SQL mantém índices de réplica gerenciada apenas em instâncias de réplica de leitura. Se você promover uma réplica de leitura para uma instância principal, o Cloud SQL vai descartar automaticamente todos os índices secundários criados como índices de réplica gerenciados. Pode ocorrer um atraso de aproximadamente cinco minutos antes que o Cloud SQL execute a remoção.
Embora o Cloud SQL elimine os índices secundários e remova as flags de banco de dados da instância promovida, a instância principal mantém as definições de índice secundário e os mapeamentos de grupo.
Troca de recuperação de desastres (DR)
Durante uma troca de DR, quando você promove a réplica de DR para a nova instância principal, o Cloud SQL descarta automaticamente todos os índices secundários criados na réplica de DR. O Cloud SQL não cria automaticamente esses índices secundários na instância principal antiga quando ela se torna uma réplica.
Para criar índices secundários na instância principal antiga após
a alternância, defina a flag de banco de dados cloudsql_index_recreate_replica_group
nessa instância.
Atraso da replicação
O Cloud SQL pausa as operações de criação de índice secundário se o atraso de replicação exceder 20 minutos. Se a criação do índice de réplica gerenciada já estiver em andamento quando o atraso exceder 20 minutos, o Cloud SQL vai permitir que a operação seja concluída. O atraso de replicação não pausa as operações de descarte de índice de réplica gerenciada.
Limitações
Ao usar índices de réplica gerenciados, as seguintes limitações se aplicam:
- Não é possível criar índices de réplica gerenciada em réplicas de servidores externos: o Cloud SQL não é compatível com a criação de índices de réplica gerenciada para réplicas de servidores externos.
- Máximo de 1.000 índices por grupo de réplicas: é possível atribuir no máximo 1.000 índices secundários a um grupo de réplicas.
- Não é possível atualizar ou alterar os metadados do índice: não é possível atualizar ou alterar os metadados do índice atual. Para modificar um índice, exclua a definição atual e crie uma nova.
Índices de réplica autogerenciados
Os índices de réplica autogerenciados são índices secundários que você cria e descarta diretamente em réplicas de leitura individuais do Cloud SQL. Assim como os índices de réplica gerenciada, eles otimizam o desempenho de consultas de leitura, como para cargas de trabalho de relatórios e análises, sem consumir armazenamento ou afetar a latência de gravação na instância principal.
Gerenciamento de índices autogerenciados
Você gerencia índices de réplica autogerenciados diretamente na réplica de leitura usando
os seguintes procedimentos armazenados no esquema mysql:
mysql.addSecondaryIdxOnReplica: adiciona um índice secundário em uma tabela especificada na réplica de leitura. Esse procedimento armazenado é um wrapper para a instrução DDLCREATE INDEX.mysql.dropSecondaryIdxOnReplica: descarta um índice secundário criado anteriormente da réplica de leitura. Esse procedimento armazenado é um wrapper para a instrução DDLDROP INDEX.
A execução desses procedimentos armazenados requer o papel cloudsqlsuperuser.
Quando você cria um índice autogerenciado, o Cloud SQL registra metadados básicos
na tabela mysql.cloudsql_replica_index na réplica, incluindo o
nome do banco de dados, da tabela e do índice. Ao contrário dos índices de réplica gerenciados,
os índices autogerenciados não são registrados na instância principal e não são
mantidos pelo processo de replicação em segundo plano do Cloud SQL.
Para detalhes de sintaxe e exemplos de uso, consulte Índices de réplica autogerenciados.
Benefícios e casos de uso
Os índices de réplica autogerenciados oferecem os seguintes benefícios para fluxos de trabalho específicos:
- Isolamento de desempenho da instância principal: os índices secundários em réplicas de leitura otimizam as consultas de leitura e de relatórios sem consumir armazenamento nem adicionar latência de transação de gravação à instância principal.
- Execução imediata: as chamadas de procedimento armazenado são executadas imediatamente como instruções DDL na réplica, sem esperar pelo ciclo periódico de manutenção em segundo plano (aproximadamente a cada cinco minutos) exigido pelos índices de réplica gerenciados.
- Testes e experimentos isolados: é possível testar o desempenho de consultas e validar otimizações de índice em uma réplica de leitura individual antes de criar índices de réplica gerenciados em um grupo de réplicas.
Limitações
Os índices de réplica autogerenciados têm limitações operacionais significativas:
- Falta de persistência na recriação de réplicas: se o Cloud SQL recriar uma réplica de leitura (como durante a recuperação da instância, manutenção ou falha de hardware), todos os índices secundários autogerenciados nessa réplica serão descartados e não serão restaurados automaticamente.
- Sobrecarga de restauração manual: o Cloud SQL não pode
reconstruir e recriar os índices. É preciso recriar os índices manualmente
executando
mysql.addSecondaryIdxOnReplicade novo. - Degradação do desempenho da consulta: as consultas de leitura podem ter uma degradação de desempenho após a recriação da réplica até que você recrie manualmente os índices ausentes.
Como os índices de réplica gerenciados persistem e são recriados automaticamente em eventos de recriação de réplicas, o Google recomenda o uso de índices de réplica gerenciados para cargas de trabalho de produção. Se você tiver índices autogerenciados, migre-os para índices de réplica gerenciados.
Coexistência de tipos de índice de réplica
Os índices de réplica autogerenciados (criados usando mysql.addSecondaryIdxOnReplica)
e os índices de réplica gerenciados podem coexistir na mesma instância de réplica de leitura
do Cloud SQL e na mesma tabela. Isso permite que você adote índices de réplica gerenciada de forma incremental sem interromper as cargas de trabalho do banco de dados.
Ao usar os dois métodos de gerenciamento de índices, considere os seguintes comportamentos:
- Operação independente: os índices autogerenciados que você cria diretamente na réplica de leitura continuam funcionando com os índices de réplica gerenciados.
- Avaliação periódica: o processo de manutenção em segundo plano do Cloud SQL avalia periodicamente (aproximadamente a cada cinco minutos) as definições de índice mapeadas para o grupo de réplicas que você atribui à réplica.
- Tratamento de conflitos de nome: se você registrar uma definição de índice de réplica gerenciada
com o mesmo nome de um índice autogerenciado na réplica de leitura, o
processo em segundo plano vai detectar que já existe um índice com esse nome.
O processo registra um status
FAILEDna tabelamysql.cloudsql_replica_idx_status. Esse erro não afeta o tráfego do banco de dados, não cria bloqueios de tabela nem afeta o índice autogerenciado atual. - Resolução automática na recriação: quando a réplica de leitura é recriada, o Cloud SQL descarta o índice autogerenciado atual como parte da recriação da instância e cria automaticamente o índice de réplica gerenciado com base na definição registrada.
A seguir
- Saiba como criar e gerenciar índices de réplicas de leitura.
- Saiba como gerenciar réplicas de leitura.
- Saiba como criar réplicas de leitura.
- Saiba mais sobre a replicação no Cloud SQL.
- Saiba mais sobre o atraso de replicação.
- Saiba como configurar flags de banco de dados.
- Saiba mais sobre os procedimentos armazenados do Cloud SQL para MySQL.
- Aprenda mais sobre a recuperação de desastres (DR) avançada.
- Saiba como se conectar usando um cliente MySQL.