Os jobs de BUILD recompilam partições após a gravação de dados, criando índices e removendo dados redundantes para melhorar o desempenho de leitura. Durante um job de BUILD, o sistema mescla os dados gravados em tempo real com as partições históricas, cria índices e executa assincronamente quaisquer instruções DDL pendentes.
Como funciona
Os jobs de BUILD operam em dois níveis:
Nível de tabela: Tabelas diferentes executam jobs de BUILD em paralelo.
Nível de shard: Após o início do job de BUILD de uma tabela, ele se divide em tarefas distribuídas entre os shards. Todas as três réplicas de cada shard executam as tarefas independentemente. O job de BUILD é concluído quando todas as tarefas dos shards terminam.
Os jobs de BUILD processam apenas partições com alterações de dados. Partições sem novas operações de INSERT, UPDATE ou DELETE são ignoradas.
Observações de uso
Durante um job de BUILD, o comando
INSERT OVERWRITE SELECTfica bloqueado. UseINSERT INTOcomo alternativa.Não é possível cancelar um job de BUILD após o envio.
O número de jobs de BUILD simultâneos equivale a
ceil(número de núcleos / 3)e não pode ser alterado. Para um cluster de 32 núcleos, isso resulta em 11 jobs simultâneos.Os jobs de BUILD consomem recursos de CPU, memória e I/O. A utilização da CPU e o uso de I/O de disco podem apresentar picos durante a execução e retornar ao normal após a conclusão. Execute os jobs de BUILD fora dos horários de pico.
Acionar jobs de BUILD automaticamente
Um job de BUILD é acionado automaticamente quando uma das seguintes condições é atendida:
Condição 1: Acúmulo suficiente de novos dados
O tempo decorrido desde o último job de BUILD atinge o intervalo mínimo e pelo menos 50.000 linhas foram adicionadas a um shard.
|
Edição |
Intervalo mínimo |
|
Enterprise Edition |
1,5 horas |
|
Basic Edition |
1,5 horas |
|
Data Lakehouse Edition |
1,5 horas |
|
Data Warehouse Edition (modo elástico) |
1,5 horas |
|
Data Warehouse Edition (modo reservado) |
0,5 horas |
Condição 2: Fallback baseado em tempo
Decorridas 24 horas desde o último job de BUILD e havendo modificação em pelo menos uma linha.
Acionar jobs de BUILD manualmente
Compilar apenas partições alteradas
Comportamento padrão: recompila apenas as partições com alterações de dados.
-
Tabelas XUANWU
BUILD TABLE <table_name>; -
Tabelas XUANWU_V2
NotaPara obter informações sobre como determinar e especificar um mecanismo de tabela, consulte a seção "Specify a table engine" do tópico Mecanismo XUANWU_V2.
BUILD TABLE <table_name> [BUILD_OPTION];O parâmetro
BUILD_OPTIONaceita apenasttl(opcional). Quando especificado, as partições expiradas são excluídas imediatamente após a conclusão do job de BUILD. Quando omitido, apenas as partições alteradas são recompiladas.
Compilar partições específicas
Disponível para clusters do AnalyticDB for MySQL com versão V3.1.6.0 ou posterior.
BUILD TABLE test force partitions='partition1,partition2';
Use esta abordagem quando uma tabela contiver grandes volumes de dados e a execução de um BUILD de tabela completa demandar muitos recursos. Direcionar partições específicas reduz o uso de recursos e acelera o job.
Para visualizar a versão secundária do seu cluster, consulte Como visualizo a versão secundária de um cluster? Para atualizar a versão secundária, entre em contato com o suporte técnico.
Compilar uma tabela inteira
Esta operação recria índices para todos os dados existentes e pode levar muito tempo para ser concluída. Avalie o impacto e os riscos antes de prosseguir. Este recurso está desativado por padrão. Envie um ticket para ativá-lo. Sempre que possível, use a abordagem de partição específica descrita acima.
BUILD TABLE <table_name> force = true;
Isso recria índices para todas as partições da tabela, incluindo aquelas sem alterações de dados.
Agendar jobs de BUILD
Por padrão, os jobs de BUILD são executados conforme os dados se acumulam. Para restringi-los a janelas de tempo específicas, como evitar horários comerciais de pico, configure um agendamento.
Definir uma janela de tempo
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;
|
Parâmetro |
Descrição |
Intervalo válido |
|
|
Início da janela de agendamento (hora) |
0–24 |
|
|
Fim da janela de agendamento (hora) |
0–24 |
Separe múltiplas janelas de tempo com ponto e vírgula. Coloque todos os valores entre crases.
A janela de tempo controla quando os jobs são agendados, não quando terminam. Um job agendado antes do fechamento da janela pode continuar em execução após o término dela.
Exemplo: Agendar jobs de BUILD entre 00:00–06:59 e 18:00–22:59.
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,22`;
Definir prioridades de agendamento
Disponível para clusters do AnalyticDB for MySQL com versão V3.1.5.0 ou posterior.
Por padrão, os jobs de BUILD têm prioridade definida pelo volume de dados adicionados a cada shard desde o último job de BUILD. Shards com mais dados recém-adicionados são agendados primeiro. Para substituir esse comportamento, defina prioridades personalizadas usando uma dica (hint) ou SET ADB_CONFIG.
O parâmetro task_priority é um número inteiro (padrão: 0). Um valor maior indica maior prioridade. Definir um número negativo desativa o agendamento automático para essa tabela.
Para visualizar ou atualizar a versão secundária do seu cluster, faça login no console do AnalyticDB for MySQL e acesse a seção Configuration Information na página Cluster Information.
Usar uma dica (hint) (aplica-se a uma única tabela, apenas ao job atual)
/*build_task_priority = <task_priority> */ BUILD TABLE <db_name>.<table_name>;
Exemplo: Definir a prioridade como 30 para a tabela test no banco de dados adb_demo.
/*build_task_priority = 30 */ Build TABLE adb_demo.test;
Usar SET ADB_CONFIG (persistente, suporta múltiplas tabelas)
-
Definir prioridades para várias tabelas em diferentes bancos de dados:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;Exemplo: Prioridade 30 para
adb_demo1.test1, prioridade 10 paraadb_demo2.test2.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.test1.30;adb_demo2.test2.10`; -
Definir a mesma prioridade para todas as tabelas de um banco de dados:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>`;Exemplo: Prioridade 30 para todas as tabelas em
adb_demo1.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.30`; -
Definir prioridades distintas entre uma tabela específica e as demais de um banco de dados:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>;<db1_name>.<table_name>.<task_priority>`;Exemplo: Prioridade 30 para
adb_demo1.test1, prioridade 10 para todas as outras tabelas emadb_demo1.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.10;adb_demo1.test1.30`;
Quando tanto uma dica (hint) quanto SET ADB_CONFIG estiverem configurados para a mesma tabela, a dica terá precedência para o job atual.
Para verificar a configuração de prioridade atual, execute SHOW ADB_CONFIG.
Monitorar o status do job de BUILD
Consulte o status dos jobs de BUILD dos últimos três dias:
SELECT table_name, schema_name, status
FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK
ORDER BY create_time DESC
LIMIT 10;
|
Status |
Descrição |
|
|
O job está sendo inicializado. |
|
|
O job está em execução. |
|
|
O job foi concluído. |
Perguntas frequentes
O agendamento automático não está funcionando
Os parâmetros de tempo em SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD devem estar entre crases. Sem elas, a análise dos valores falha e o agendamento é ignorado.
Sintaxe correta:
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6`;
Isso agenda jobs de BUILD entre 00:00 e 06:59.