No PolarDB for MySQL, tanto a atualização completa quanto a execução inicial de uma atualização incremental de materialized view suportam dois modos de gravação paralela: ETL e ePQ. O modo ideal para melhorar a eficiência da atualização depende das características da carga de trabalho, como tabelas largas ou estreitas, a série do cluster (Cluster Edition ou Multi-primary Cluster) e a necessidade de offloading de computação.
Visão geral
Para aumentar a eficiência de execução, o PolarDB for MySQL oferece os seguintes dois modos de gravação paralela para atualização completa ou inicial incremental de materialized view:
|
Modo |
Ativação |
Arquitetura |
Casos de uso |
|
Gravação Paralela ETL (Padrão) |
Modo padrão (ativado automaticamente quando paralelismo > 1). |
Transfere consultas para nós remotos, onde múltiplos workers consomem e gravam os resultados em paralelo. |
Tabelas largas, grandes volumes de dados e cenários que exigem offloading de consultas. |
|
Gravação Paralela ePQ |
Requer ativação manual. |
O framework PQ divide a instrução |
Tabelas estreitas e cenários que exigem paralelismo de ponta a ponta. |
Ambos os modos exigem que materialized_view_refresh_parallelism tenha valor maior que 1.
Compatibilidade
Versão | Modos de atualização paralela | Observações |
PolarDB for MySQL 8.0.1 com versão menor do kernel 8.0.1.1.54 ou posterior | Modo ETL | Apenas modo ETL. |
PolarDB for MySQL 8.0.2 com versões menores do kernel 8.0.2.2.34 e 8.0.2.2.35 | Modo ePQ |
|
Processo de atualização
A atualização completa de uma materialized view consiste em três etapas:
-
Criação da tabela contêiner: O sistema cria uma nova tabela contêiner a partir da definição da materialized view. Se
materialized_view_implicit_partition_num > 1, o sistema adiciona automaticamente uma partição hash para evitar contenção de locks durante gravações paralelas.NotaO MySQL 8.0.1 não suporta o parâmetro
materialized_view_implicit_partition_num. Gravação de dados em paralelo: O sistema grava dados em paralelo conforme o modo selecionado.
Construção de índice colunar (Opcional): Se
materialized_view_add_columnar_index_after_insert = ON, o sistema conclui primeiro a atualização e depois constrói um índice colunar (IMCI) para a tabela contêiner.
Modo de gravação paralela ETL
Funcionamento
O PolarDB seleciona um nó remoto (nó somente leitura de índice column-store ou row-store) com base na política de offloading e estabelece uma conexão.
O nó primário (RW) envia a consulta de definição da materialized view ao nó remoto para execução.
O nó remoto transmite o conjunto de resultados de volta. Há suporte à transmissão de dados compactados.
O nó primário (RW) cria múltiplas threads de worker. Cada thread busca linhas em paralelo e as grava em diferentes partições da tabela contêiner.
Recursos
A computação da consulta ocorre no nó remoto e não consome recursos de CPU no nó primário (RW).
As operações de gravação ocorrem localmente no nó primário (RW) para garantir consistência transacional.
Em cenários de tabelas largas, o comprimento da linha não afeta a eficiência paralela.
Suporta multi-primary cluster (Limitless).
Uso
Os parâmetros de cluster do PolarDB diferem entre o console e uma sessão de banco de dados. As diferenças são as seguintes:
-
Compatibilidade: Para manter compatibilidade com arquivos de configuração do MySQL, alguns parâmetros de cluster no console do PolarDB possuem o prefixo loose_.
Procedimento: Localize e modifique os parâmetros com o prefixo
loose_.
-
Em uma sessão de banco de dados (via linha de comando ou cliente)
Procedimento: Ao usar o comando
SETpara modificar um parâmetro em uma sessão de banco de dados, remova o prefixoloose_e use o nome original do parâmetro.
|
Parâmetro |
Valor de exemplo |
Modificável por sessão |
Descrição |
|
|
16 |
Não |
Define o paralelismo. Um valor maior que 1 ativa a atualização paralela. |
|
|
FORCE_IMCI |
Sim |
Define a política de offloading para atualizações manuais por sessão. |
Após configurar os parâmetros, execute o seguinte comando para atualizar a materialized view:
-- Refresh the materialized view
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;
Modo de gravação paralela ePQ
Funcionamento (offloading MPP para nó somente leitura de índice column-store remoto quando a política de offloading é FORCE_IMCI)
O sistema agenda PQ Workers em um nó somente leitura de índice column-store remoto para realizar uma varredura SELECT.
Os PQ Workers enviam os resultados da varredura ao nó primário (RW) pela rede interna, que suporta compactação.
Múltiplos PQ Workers varrem os dados da tabela de source em paralelo no nó primário (RW).
Os PQ Workers gravam os resultados da varredura em paralelo nas partições da tabela contêiner.
Por fim, o nó primário (RW) conclui a gravação de dados localmente.
Recursos
Paralelismo de ponta a ponta: Um único plano de execução paralela lida com varreduras e gravações.
Dimensionamento quase linear para tabelas estreitas.
Evita a limitação de transferência de rede de porta única do ETL.
Atualmente sem suporte em clusters Limitless. A operação reverte automaticamente para execução serial.
Compactação de rede (cenário de offloading MPP)
Pré-requisitos
Parâmetro | Valor de exemplo | Configurável no nível da sessão | Descrição |
| ZSTD | Sim | Especifica o algoritmo de compactação para dados transferidos de um nó réplica durante a atualização da materialized view. Defina como ZSTD para ativar a compactação.
|
| 3 | Sim | Especifica o nível de compactação. Se este parâmetro for definido como 0 (padrão) ou um valor inválido, o sistema usa o nível 3 para o algoritmo ZSTD.
|
Impacto
Reduz a quantidade de dados transferidos entre nós em 60%–80%.
A compactação e a descompactação adicionam sobrecarga de CPU. Considere esse compromisso em cenários limitados por CPU.
Recomendações
A transferência compactada é recomendada apenas para tabelas largas. Para tabelas estreitas, a sobrecarga de CPU da compactação pode anular os benefícios de rede; portanto, recomendamos usar a configuração UNCOMPRESSED. Se sua materialized view for uma tabela larga e exigir offloading de execução, considere usar o modo ETL diretamente em vez do modo ePQ com offloading MPP. O modo ETL é inerentemente adequado para tabelas largas.
Procedimento
Cenário A: Offloading MPP para nó remoto
Parâmetro | Valor de exemplo | Configurável no nível da sessão | Descrição |
| 16 | Não | Define o grau de paralelismo. Um valor maior que 1 ativa a atualização paralela. |
| 16 | Sim | Define o número de partições implícitas. Nota O parâmetro |
| FORCE_IMCI | Sim | Para atualização manual, especifique uma política de offloading diferente para cada sessão. |
| ON | Não | Permite agendar offloading para um nó somente leitura de índice column-store. |
| ZSTD | Sim | Ativa transferência compactada (recomendado para tabelas largas; opcional para tabelas estreitas). |
| 3 | Sim | Define o nível de compactação para transferências compactadas. |
Após configurar esses parâmetros, execute a atualização:
-- Perform the refresh
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;
Cenário B: Offloading ePQ para um nó específico
Se seu cluster tiver múltiplos nós somente leitura de índice column-store, use pq_mpp_allow_dispatch_to_imci_node para controlar quais desses nós podem receber solicitações de agendamento MPP ePQ. Defina este parâmetro como ON tanto no nó primário (RW) quanto no nó somente leitura de índice column-store alvo. O sistema não direciona um nó somente leitura de índice column-store para agendamento se este parâmetro não estiver ativado nesse nó.
-- 1. On the primary (RW) node, disable its ability to act as a PQ Worker resource.
-- In the console, set pq_mpp_allow_imci_node = OFF;
-- 2. On the primary (RW) node, allow scheduling to an IMCI node.
-- In the console, set pq_mpp_allow_dispatch_to_imci_node = ON;
-- 3. Connect to the IMCI node that should handle the offloaded query, and enable the scheduling entry point only on that node.
-- In the console, set pq_mpp_allow_dispatch_to_imci_node = ON;
-- 4. Return to the primary (RW) node and refresh with the IMCI offload policy.
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_IMCI;
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;
Após ativar esse recurso, use information_schema.cluster_group_resource_view para verificar o status do nó alvo. O nó somente leitura de índice column-store alvo deve exibir allow_to_dispatch, e sua coluna EXTRA deve conter Allow to dispatch to IMCI node. Neste modo, o nó somente leitura de índice column-store recebe apenas solicitações de agendamento e não atua como PQ Worker. Para fazer com que todos os nós somente leitura de índice column-store atuem como recursos de ePQ Worker, defina pq_mpp_allow_imci_node = ON.
Seleção do nó alvo de offloading
Quando a política de offloading não é MASTER, o sistema seleciona um nó remoto para executar a consulta SELECT.
A política determina o tipo de nó
|
Política |
Tipo de nó candidato |
Descrição |
|
|
Nó somente leitura IMCI |
Reverte para execução local no nó primário (RW) e registra um aviso. |
|
|
Nó somente leitura IMCI |
Falha com erro. |
|
|
Nó somente leitura row-store |
Reverte para execução local no nó primário (RW) e registra um aviso. |
|
|
Nó somente leitura row-store |
Falha com erro. |
|
|
Nó somente leitura IMCI ou row-store (baseado em custo) |
Selecione o tipo de nó disponível se apenas um existir. Se nenhum estiver disponível, reverte para o nó primário (RW). |
Lógica de decisão para a política COST
Quando materialized_view_complete_refresh_offload_policy = COST, o sistema determina o nó alvo comparando o custo do otimizador da consulta com um limiar:
Se o custo da consulta ≥
cost_threshold_for_imci: Offloading para um nó somente leitura IMCI. O IMCI é adequado para consultas de varredura e agregação de alto custo.Se o custo da consulta <
cost_threshold_for_imci: Offloading para um nó somente leitura row-store. Nós somente leitura row-store são suficientes para consultas leves.
-- Set the cost threshold (default is 0, which means all queries tend to be offloaded to IMCI).
SET SESSION cost_threshold_for_imci = 100000;
-- Use the COST policy.
SET SESSION materialized_view_complete_refresh_offload_policy = COST;
Balanceamento de carga multi-nó
Se múltiplos nós do mesmo tipo estiverem disponíveis, o sistema usa uma abordagem Round-Robin para selecionar um nó:
Cada tarefa de atualização seleciona o próximo nó com base em um contador global.
Se a conexão com o nó selecionado falhar, o sistema tenta automaticamente o próximo nó na lista até tentar todos.
O sistema distribui tarefas de atualização para diferentes materialized views uniformemente entre os nós.
Para descarregar tarefas ePQ + MPP para um nó IMCI, use um dos dois métodos a seguir:
Ative
pq_mpp_allow_imci_nodepara permitir offloading para todos os nós somente leitura IMCI.-
Primeiro, defina
pq_mpp_allow_imci_node = OFF, depois usepq_mpp_allow_dispatch_to_imci_nodepara restringir os nós somente leitura IMCI candidatos:No nó primário (RW), defina
pq_mpp_allow_dispatch_to_imci_node = ONpara permitir que o nó primário (RW) aceite o status de ponto de entrada de despacho de nós somente leitura IMCI remotos.Em cada nó somente leitura IMCI que deve processar consultas descarregadas, defina
pq_mpp_allow_dispatch_to_imci_node = ON.Em cada nó somente leitura IMCI que não deve processar consultas descarregadas, mantenha
pq_mpp_allow_dispatch_to_imci_node = OFF.
Políticas recomendadas
Em ambiente de produção, use FORCE_IMCI ou FORCE_TPRO. Evite políticas PREFER_*.
Motivo: Se o nó alvo estiver indisponível, uma política PREFER_* reverte silenciosamente para execução local no nó primário (RW). Essa reversão faz com que a instrução INSERT SELECT realize varredura completa e gravação no nó primário (RW). Isso cria uma transação grande e pode impactar o desempenho de cargas de trabalho online no nó primário (RW).
Exemplos de configuração
-- Recommended: Force the use of an IMCI node. If unavailable, the operation fails instead of falling back.
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_IMCI;
-- Use only row-store read-only nodes. If unavailable, the operation fails.
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_TPRO;
-- Automatically choose between IMCI and TPRO based on query cost.
SET SESSION materialized_view_complete_refresh_offload_policy = COST;
SET SESSION cost_threshold_for_imci = 50000;
Escopos e configurações de parâmetros
Regras básicas
**Parâmetros
GLOBAL**: Defina-os apenas no console. Aplicam-se a todas as sessões e threads de atualização automática.**Parâmetros
SESSION**: Defina-os para a sessão atual usandoSET SESSION. Você também pode modificar seus valores padrão no console. Threads de atualização automática usam os valores padrãoGLOBAL.
Escopos de parâmetros para o modo de gravação paralela ETL
|
Parâmetro |
Escopo |
Configurável por sessão |
Descrição |
|
|
GLOBAL |
Não, deve ser GLOBAL |
Todas as tarefas de atualização compartilham o mesmo paralelismo. |
|
|
SESSION |
Sim |
Para atualizações manuais, especifique uma política de offloading diferente para cada sessão. |
|
|
SESSION |
Sim |
Permite desativar a otimização de autoincremento atômico. |
|
|
SESSION |
Sim |
Ativa o cache de conjunto de resultados. |
Escopos de parâmetros para o modo de gravação paralela ePQ
|
Parâmetro |
Escopo |
Configurável por sessão |
Descrição |
|
|
GLOBAL |
Não, deve ser GLOBAL |
Todas as tarefas de atualização compartilham o mesmo paralelismo. |
|
|
GLOBAL |
Não, deve ser GLOBAL |
Controla se tarefas MPP podem ser agendadas em um nó IMCI. |
|
|
GLOBAL |
Não, deve ser GLOBAL |
Permite o uso do ponto de entrada de agendamento IMCI. Este parâmetro deve estar ativado tanto no nó primário (RW) quanto no nó somente leitura alvo que contém o índice colunar. |
|
|
SESSION |
Sim |
Para atualizações manuais, especifique uma política de offloading diferente para cada sessão. |
|
|
SESSION |
Sim |
Permite que cada materialized view use um número diferente de partições. |
|
|
SESSION |
Sim |
Especifica o algoritmo de compactação de transporte para offloadings MPP. O sistema propaga automaticamente essa configuração para PQ workers. |
|
|
SESSION |
Sim |
Especifica o nível de compactação. O sistema propaga automaticamente essa configuração para PQ workers. |
Observações
Se você usar apenas atualizações manuais, ajuste os parâmetros
SESSIONpara cada sessão.Se depender de atualizações automáticas, defina valores padrão apropriados para todos os parâmetros
SESSIONno console.Defina parâmetros
GLOBALno console, independentemente do método de atualização. As alterações entram em vigor imediatamente para todas as tarefas subsequentes.As configurações
SET SESSIONnão persistem após a reinicialização do cluster. Em contraste, parâmetrosGLOBALmodificados no console são persistentes.
Referência de parâmetros
Parâmetros principais
Parâmetro | Escopo | Valor | Padrão | Descrição |
| GLOBAL | 1–1024 | 1 | Número de workers paralelos. Um valor maior que 1 ativa a atualização paralela. |
| SESSION | 0 a ilimitado | 1 | Número de partições HASH implícitas para a tabela contêiner. Um valor maior que 1 ativa o particionamento HASH implícito. Nota O MySQL 8.0.1 não suporta o parâmetro |
| SESSION | ON/OFF | ON | Melhora o desempenho usando valores de autoincremento atômico para a coluna de partição implícita. |
Parâmetros de offloading de computação
|
Parâmetro |
Escopo |
Valor |
Padrão |
Descrição |
|
|
SESSION |
|
Especifica a política para offloading de computação de consulta. |
|
|
|
GLOBAL |
ON/OFF |
OFF |
Permite agendar PQ workers em um nó IMCI somente leitura (necessário para o modo ePQ). |
|
|
GLOBAL |
ON/OFF |
OFF |
Permite o uso do ponto de entrada de despacho IMCI. Este parâmetro deve estar ativado tanto no nó primário (RW) quanto no nó IMCI somente leitura alvo. |
Parâmetros de compactação de rede
Parâmetro | Escopo | Valor | Padrão | Descrição |
| SESSION |
| UNCOMPRESSED | Especifica o algoritmo de compactação para o canal PQ interno. Esta configuração aplica-se apenas no modo de offloading MPP ePQ. |
| SESSION | 0–22 | 0 | Especifica o nível de compactação ZSTD para o canal PQ. Se definido como 0, o sistema usa o nível padrão ZSTD (3). |
| SESSION | ON/OFF | OFF | Especifica se deve armazenar em cache todo o conjunto de resultados na memória. Esta configuração é válida apenas no modo ETL. |
Como funciona a compactação:
|
Modo |
Local de compactação |
Condição efetiva |
|
ePQ (offloading MPP) |
Canal PQ interno entre o nó primário (RW) e nós remotos. |
|
|
ePQ (apenas local) |
Sem transferência de rede. |
Não aplicável. |
O parâmetro materialized_view_etl_compression_level entra em vigor apenas quando materialized_view_etl_compression_algorithm = ZSTD. Se definido como 0, o sistema usa o nível padrão ZSTD de 3. Se definido com um valor de 1 a 22, o sistema usa o nível especificado. Um nível mais alto fornece melhor taxa de compactação, mas aumenta a sobrecarga de CPU.
Política de offloading (parâmetro materialized_view_complete_refresh_offload_policy)
|
Valor |
Descrição |
|
|
O nó primário (RW) executa todas as operações localmente. |
|
|
Prioriza o offloading para um nó TPRO somente leitura. Reverte para o nó primário (RW) se indisponível. |
|
|
Prioriza o offloading para um nó IMCI somente leitura. Reverte para o nó primário (RW) se indisponível. |
|
|
Força o offloading de computação para um nó TPRO somente leitura. Se nenhum nó desse tipo estiver disponível, a operação falha. |
|
|
Força o offloading de computação para um nó IMCI somente leitura. Se nenhum nó desse tipo estiver disponível, a operação falha. |
|
|
Usa um modelo baseado em custo para selecionar automaticamente um nó IMCI somente leitura ou um nó TPRO somente leitura para offloading. |
Recomendações de seleção de modo
|
Cenário |
Modo recomendado |
Configuração chave |
|
Tabela estreita sem nós remotos |
ePQ apenas local |
|
|
Tabela estreita com nós somente leitura indexados em column-store ou nós somente leitura row-store |
ETL/ePQ com offloading MPP |
|
|
Tabela larga ou tabela contendo campos grandes |
ETL |
|
|
ETL |
Use o modo ETL. O ePQ não está disponível para clusters multi-master. |
Considerações
Sem efeito quando o grau de paralelismo é 1: Ambos os modos paralelos degradam para uma operação INSERT SELECT serial.
Disponibilidade de nó remoto: Tanto o modo ETL quanto o offloading MPP ePQ dependem de nós remotos. Se um nó remoto estiver indisponível, políticas
FORCE_*retornam erro, enquanto políticasPREFER_*revertem para execução local no nó primário (RW).Limitações de ambiente multi-primary: Em um multi-primary cluster (Limitless), o modo ePQ é desativado automaticamente e reverte para execução serial. Use o modo ETL para atualização paralela.
Cobertura de colunas IMCI: Ao usar offloading MPP ePQ para um nó somente leitura com índice colunar, o índice colunar deve cobrir todas as colunas lidas pela consulta da materialized view. Caso contrário, o sistema retorna erro. O modo ETL não possui essa limitação.
Contagem de partições implícitas: Recomendamos definir este valor entre 0,5 e 2 vezes o grau de paralelismo. Poucas partições podem levar à contenção de gravação, enquanto muitas podem aumentar a sobrecarga de gerenciamento de arquivos.
Local de gravação: Em ambos os modos, as gravações de dados são sempre concluídas localmente no nó primário (RW). O offloading afeta apenas onde a consulta SELECT é executada.
Persistência de parâmetros: Configurações definidas com
SET SESSIONnão persistem entre reinicializações do cluster, enquanto alterações em parâmetros GLOBAL feitas no console persistem.Compromisso entre compactação e CPU: Para offloading MPP ePQ, recomendamos definir
materialized_view_etl_compression_algorithm=ZSTD. Para tabelas estreitas, a sobrecarga de CPU da compactação pode anular os benefícios de rede.