Jobs BUILD reconstroem partições com novos dados gravados para melhorar o desempenho de leitura. Durante a reconstrução, o sistema cria índices, remove dados redundantes e executa instruções DDL assincronamente.
Visão geral
Durante um job BUILD, o sistema mescla dados gravados em tempo real com as partições históricas associadas, cria índices e executa instruções DDL assincronamente. Após executar instruções INSERT, UPDATE ou DELETE nos dados de uma partição, execute um job BUILD para reconstruí-la. Jobs BUILD não reconstroem partições sem alterações nos dados.
O agendamento de jobs BUILD ocorre no nível da tabela. Jobs de tabelas diferentes podem ser executados em paralelo. Ao iniciar um job BUILD em uma tabela, o sistema o divide em tarefas no nível de shard. Cada uma das três réplicas de um shard executa uma tarefa. O job BUILD é concluído quando todas as tarefas terminam.
Ao executar instruções DELETE ou REPLACE, o sistema marca os dados para exclusão e os remove assincronamente por meio de jobs BUILD em segundo plano. Se você executar muitos comandos DELETE ou REPLACE e os jobs BUILD ainda não tiverem sido concluídos, o número de linhas da tabela exibido no Storage Overview será maior que o resultado retornado por SELECT COUNT(*). Isso ocorre porque a contagem no Storage Overview vem do campo row_count em information_schema.kepler_partitions, que conta linhas físicas e inclui aquelas marcadas para exclusão, mas ainda não removidas. Já o comando SELECT COUNT(*) retorna o número de linhas lógicas válidas e exclui as marcadas para exclusão. Para alinhar esses dois valores, execute manualmente BUILD TABLE e limpe os dados pendentes de exclusão.
Observações de uso
Durante a execução de um job BUILD, não execute a instrução
INSERT OVERWRITE SELECTpara inserir dados nas tabelas até que o job seja concluído. Caso precise inserir dados nesse período, utilize a instruçãoINSERT INTO.Após enviar um job BUILD, não é possível cancelá-lo.
-
Por padrão, o número de jobs BUILD simultâneos corresponde ao resultado arredondado para cima de
Number of cores/3e não pode ser modificado.Por exemplo, se as especificações do nó de um cluster AnalyticDB for MySQL forem 32 núcleos e 128 GB de memória, o número de jobs BUILD simultâneos será 11 (resultado arredondado para cima de
32/3). Jobs BUILD consomem recursos de CPU, memória e I/O. Consequentemente, métricas relacionadas a disco, como utilização de CPU e uso de I/O de disco, podem aumentar. Após a conclusão dos jobs BUILD, as métricas retornam aos valores normais. Recomendamos executar jobs BUILD fora dos horários de pico.
Acionamento automático de jobs BUILD
Um job BUILD é acionado automaticamente quando uma das seguintes condições é atendida:
-
O tempo decorrido desde o último job BUILD atinge o intervalo mínimo entre jobs e pelo menos 50.000 linhas de dados foram adicionadas a um shard de uma tabela.
Intervalo de tempo para Enterprise Edition, Basic Edition ou Data Lakehouse Edition: 1,5 horas.
Intervalo de tempo para Data Warehouse Edition em modo elástico: 1,5 horas.
Intervalo de tempo para Data Warehouse Edition em modo reservado: 0,5 horas.
Vinte e quatro horas se passaram desde o último job BUILD e pelo menos uma linha de dados foi modificada.
Acionar manualmente um job BUILD
Executar uma instrução BUILD nas partições com alterações de dados
-
Tabela XUANWU
BUILD TABLE <table_name>;Este método aciona um job BUILD apenas nas partições cujos dados foram modificados.
-
-
Tabela XUANWU_V2
BUILD TABLE <table_name> [BUILD_OPTION];BUILD_OPTION: suporta apenas o valorttl, que é um parâmetro opcional. Se você deixar esse parâmetro vazio, este método acionará um job BUILD somente nas partições com dados modificados. Caso especifique esse parâmetro, o método excluirá imediatamente as partições expiradas após a conclusão do job BUILD.
NotaPara obter informações sobre como determinar e especificar um mecanismo de tabela, consulte a seção "Specify a table engine" do tópico XUANWU_V2 engine.
-
Executar uma instrução BUILD em partições específicas
BUILD TABLE test force partitions='partition1,partition2';
A execução de uma instrução BUILD em partições específicas é suportada apenas em clusters AnalyticDB for MySQL V3.1.6.0 ou posterior. Para saber como visualizar a versão secundária de um cluster AnalyticDB for MySQL, consulte 如何查看实例版本信息. Para atualizar a versão secundária de um cluster, entre em contato com o suporte técnico.
Se uma tabela contiver grandes volumes de dados, a instrução BUILD TABLE <table_name> force = true; poderá levar muito tempo para ser executada. O AnalyticDB for MySQL permite especificar as partitions nas quais você deseja executar um job BUILD. Isso ajuda a reduzir o uso de recursos e melhora o desempenho dos jobs BUILD.
Executar uma instrução BUILD em uma tabela inteira
BUILD TABLE <table_name> force = true;
Este método aciona um job BUILD e recria um índice para todas as partições de uma tabela. Por padrão, esse recurso está desativado.
Este método recria um índice para todos os dados existentes de uma tabela, o que consome um longo período de tempo. Recomendamos executar uma instrução BUILD em partições específicas. Antes de executar uma instrução BUILD em uma tabela inteira, avalie os efeitos e riscos. Para ativar esse recurso, envie um ticket.
Configurar agendamento automático para jobs BUILD
-
Método de configuração
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;Os parâmetros
starteenddefinem um intervalo de tempo para agendar jobs BUILD. Defina os parâmetros na faixa de 0 a 24 e coloque o intervalo de tempo entre crases (). É possível configurar vários intervalos de tempo, separando-os por ponto e vírgula (;).Por exemplo, defina o parâmetro
startcomo 0 e o parâmetroendcomo 6 para agendar jobs BUILD no período das 0:00 às 6:59.ImportanteOs intervalos de tempo especificados servem para agendar jobs, não para executá-los. Portanto, após o agendamento, o sistema pode não concluir a execução dos jobs quando os intervalos de tempo terminarem.
-
Exemplo
Configure jobs BUILD para serem agendados nos seguintes intervalos de tempo: 00:00 às 06:59 e 18:00 às 22:59.
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,22`;Após executar a instrução acima, o sistema agendará jobs BUILD nos intervalos de 00:00 às 06:59 e de 18:00 às 22:59.
Configurar prioridades de agendamento para jobs BUILD
A ordem de agendamento dos jobs BUILD baseia-se na quantidade de dados adicionados aos shards individuais das tabelas. Quanto maior a quantidade de dados adicionada a um shard, mais cedo o job será agendado e executado. Também é possível usar uma dica (hint) ou executar a instrução SET ADB_CONFIG para configurar as prioridades de agendamento dos jobs BUILD para as tabelas.
-
A configuração de prioridades de agendamento para jobs BUILD está disponível apenas para clusters AnalyticDB for MySQL V3.1.5.0 ou posterior.
Para view and update the minor version, acesse a seção Configuration Information na página Cluster Information no console do AnalyticDB for MySQL.
Uma dica (hint) suporta apenas uma tabela. A prioridade configurada tem efeito somente no job BUILD atual.
A instrução
SET ADB_CONFIGsuporta uma ou mais tabelas. As prioridades configuradas permanecem válidas até que novas prioridades de agendamento sejam definidas para as tabelas.Caso utilize uma dica e a instrução
SET ADB_CONFIGpara definir prioridades diferentes para a mesma tabela, a prioridade baseada na dica terá precedência no job atual.
O parâmetro task_priority define a prioridade de agendamento dos jobs BUILD. O valor deve ser um número inteiro, sendo o padrão 0. Um valor maior indica uma prioridade de agendamento mais alta. Após configurar as prioridades, os nós de frontend agendarão os jobs BUILD com base nelas. Se você definir o parâmetro task_priority com um valor menor que 0 para uma tabela, o agendamento automático de jobs BUILD será desativado para ela e os nós de frontend não agendarão jobs para essa tabela.
Métodos de configuração:
-
Usar uma dica (hint)
/*build_task_priority = <task_priority> */ BUILD TABLE <db_name>.<table_name>;Por exemplo, defina a prioridade de agendamento dos jobs BUILD como 30 para a tabela
testno banco de dadosadb_demo./*build_task_priority = 30 */ Build TABLE adb_demo.test; -
Usar a instrução SET ADB_CONFIG
-
Configure prioridades de agendamento de jobs BUILD para várias tabelas em bancos de dados diferentes.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;NotaSepare várias tabelas com ponto e vírgula (;).
Por exemplo, defina a prioridade de agendamento dos jobs BUILD como 30 para a tabela
test1no banco de dadosadb_demo1e como 10 para a tabelatest2no banco de dadosadb_demo2.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.test1.30;adb_demo2.test2.10`; -
Configure a mesma prioridade de agendamento de jobs BUILD para todas as tabelas em um banco de dados.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>`;Por exemplo, defina a prioridade de agendamento dos jobs BUILD como 30 para todas as tabelas no banco de dados
adb_demo1.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.30`; -
Configure prioridades de agendamento diferentes entre uma tabela específica e as demais tabelas no mesmo banco de dados.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>;<db1_name>.<table_name>.<task_priority>`;Por exemplo, defina a prioridade de agendamento dos jobs BUILD como 30 para a tabela
test1no banco de dadosadb_demo1e como 10 para todas as outras tabelas desse banco de dados.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.10;adb_demo1.test1.30`;
-
Execute a instrução SHOW ADB_CONFIG para consultar a prioridade de agendamento atual dos jobs BUILD.
Consultar o status de um job BUILD
Após um job BUILD ser acionado automática ou manualmente, execute a seguinte instrução SQL para consultar o status do job nos últimos três dias:
SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;
A tabela a seguir descreve o status dos jobs BUILD com base nos valores do parâmetro status.
|
Valor de status |
Descrição |
|
INIT |
O job está sendo inicializado. |
|
RUNNING |
O job está em execução. |
|
FINISH |
O job foi concluído. |
Perguntas frequentes
Por que o agendamento automático de jobs BUILD não entra em vigor?
Causa: Os parâmetros relacionados ao tempo não foram colocados entre crases ( ), resultando em falha na análise sintática.
Solução: Ao executar a instrução SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD para configurar o agendamento automático, coloque os parâmetros start e end entre crases ( ). Por exemplo, SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD= especifica que o sistema deve agendar jobs BUILD no intervalo de 0:00 a 6:59.