PolarDB oferece suporte à replicação assíncrona de bloqueios de metadados para aumentar a eficiência na execução de operações de Linguagem de Definição de Dados (DDL). Este tópico descreve como utilizar o recurso de replicação assíncrona de bloqueios de metadados.
Pré-requisitos
Todos os clusters do PolarDB for MySQL nas versões 5.6 e 5.7, em qualquer versão de revisão, suportam este recurso.
Para clusters do PolarDB for MySQL 8.0, a versão de revisão deve ser 8.0.1.1.10 ou superior. Para verificar a versão do cluster, consulte {{XREF_0}}.
Visão geral
Ao executar operações DDL em um banco de dados, é necessário sincronizar as informações de bloqueio de metadados (MDL) entre o nó primário e os nós somente leitura para garantir a consistência das definições de dados. No entanto, as operações DDL no nó primário frequentemente retêm MDLs, o que obriga os nós somente leitura a aguardar por muito tempo antes de obterem as informações de MDL para sincronização. Enquanto essa sincronização não ocorre, os nós somente leitura interrompem a análise dos logs de redo. Esse comportamento impacta severamente a eficiência geral das operações DDL.
Com o recurso de replicação assíncrona de bloqueios de metadados, o PolarDB desacopla a sincronização de MDL da análise de logs de redo. Isso permite que os nós somente leitura continuem analisando e aplicando logs de redo mesmo enquanto aguardam a sincronização das informações de MDL.
Uso
Este recurso vem ativado por padrão. Nenhuma ação adicional é necessária.
-
Execute a seguinte instrução SQL em um nó somente leitura para obter informações de sincronização de MDL do nó alvo:
Nota-
Os clusters do PolarDB devem estar em uma das seguintes versões para que você tenha permissão para executar a instrução SQL anterior:
PolarDB for MySQL 8.0.1 com versão de revisão 8.0.1.1.24 ou superior
PolarDB for MySQL 5.7 com versão de revisão 5.7.1.0.20 ou superior
PolarDB for MySQL 5.6 com versão de revisão 5.6.1.0.33 ou superior
Caso a versão do seu cluster não atenda aos requisitos acima, recomendamos fazer o upgrade. Para mais informações, consulte {{XREF_1}}.
Para saber mais sobre como forçar a execução de uma consulta em um nó específico, consulte {{XREF_2}}.
O resultado retornado será semelhante ao exemplo abaixo:
A tabela exibe detalhes sobre as informações de MDL em sincronização. A coluna
slot_nameapresenta dados das tabelas relacionadas. Já a colunaslot_stateindica o status atual da sincronização de MDL, podendo assumir um dos seguintes valores:SLOT_NONE: Estado de inicialização.
SLOT_RESERVED: O nó somente leitura recebeu uma solicitação de aquisição de MDL e aguarda o sistema de escalonamento atribuir uma thread de trabalho para processá-la.
-
SLOT_ACQUIRING: O sistema já alocou recursos de thread de trabalho e o nó somente leitura está enviando a solicitação de MDL.
NotaSe outra conexão estiver retendo o MDL necessário pelo nó somente leitura, o status de sincronização permanecerá neste estado.
SLOT_LOCKED: O MDL foi adquirido e está retido no nó somente leitura.
SLOT_RELEASING: O nó somente leitura recebeu uma solicitação de liberação de MDL e aguarda o sistema de escalonamento atribuir uma thread de trabalho para processá-la.
Utilize a instrução SQL a seguir para verificar o status das threads de trabalho responsáveis por sincronizar solicitações de MDL em um nó somente leitura:
Nota-
Os clusters do PolarDB devem estar em uma das seguintes versões para que você tenha permissão para executar a instrução SQL anterior:
PolarDB for MySQL 8.0.1 com versão de revisão 8.0.1.1.24 ou superior
PolarDB for MySQL 5.7 com versão de revisão 5.7.1.0.20 ou superior
PolarDB for MySQL 5.6 com versão de revisão 5.6.1.0.33 ou superior
Caso a versão do seu cluster não atenda aos requisitos acima, recomendamos fazer o upgrade. Para mais informações, consulte {{XREF_3}}.
Para saber mais sobre como forçar a execução de uma consulta em um nó específico, consulte {{XREF_4}}.
O resultado retornado será semelhante ao exemplo abaixo:
Quando a tabela
INNODB_LOG_MDL_SLOTcontém uma solicitação de sincronização de MDL com statusSLOT_ACQUIRING, a tabelaINNODB_LOG_MDL_THREADexibirá uma thread de trabalho correspondente processando essa solicitação. Nessa situação, o valor dethr_statedeixará de serfree, indicando uma provável espera por MDL no nó somente leitura. Verifique se o valor dethr_stateéfreepara solucionar problemas de bloqueio de MDL.Fale conosco
Em caso de dúvidas sobre operações DDL, {{XREF_5}}.
-