O mecanismo de execução Pipeline é um novo recurso central do ApsaraDB for SelectDB, desenvolvido para substituir o mecanismo de execução legado. Em ambientes com cargas de trabalho mistas, o mecanismo legado baseado no modelo vulcão não aproveita totalmente as CPUs multicore, sofre com esgotamento do pool de threads e permite que consultas grandes inaniem as menores. O mecanismo de execução Pipeline substitui esse motor antigo por uma arquitetura orientada a dados e baseada em push, eliminando o excesso de threads e reduzindo a contenção de recursos entre consultas simultâneas.
Para obter detalhes sobre o design, consulte Support Pipeline Exec Engine.
Como funciona
O mecanismo de execução SQL legado baseia-se no modelo vulcão, que apresenta três problemas fundamentais em ambientes multicore:
Necessidade de ajuste manual de paralelismo. O mecanismo não aproveita automaticamente a capacidade da CPU multicore. Para melhorar o desempenho das consultas, defina manualmente o grau de paralelismo, tarefa complexa de ajustar corretamente em produção.
Esgotamento do pool de threads e deadlocks. Cada instância de consulta ocupa uma thread no pool. Ao atingir a capacidade máxima, o mecanismo de consulta entra em pseudo-deadlock e deixa de responder a novas solicitações. Deadlocks lógicos também podem ocorrer, por exemplo, quando todas as threads executam uma tarefa de probe em uma única instância. Mesmo sob carga normal, operadores bloqueantes retêm threads impossíveis de reatribuir a instâncias prontas para execução, mantendo baixa a utilização geral da CPU.
Alta sobrecarga de troca de threads. Operadores bloqueantes dependem do agendador de threads do sistema operacional. Em cenários de carga mista, isso gera sobrecarga significativa de troca de contexto e degrada o throughput.
O mecanismo de execução Pipeline resolve esses problemas por meio de três mudanças arquiteturais:

Transição de execução pull para push. As consultas rodam no modo push em vez do modelo pull tradicional. Os dados fluem downstream pelos pipelines sem que threads fiquem ociosas aguardando resultados.
Conversão de operações bloqueantes em assíncronas. Operadores que antes bloqueavam threads foram redesenhados como operações assíncronas. Essa mudança elimina a sobrecarga de troca de threads e mantém elevada a utilização da CPU.
Limitação de threads com agendamento por fatia de tempo. O mecanismo restringe o número de threads de execução e usa alternância por fatias de tempo para arbitrar pipelines concorrentes. Consultas grandes deixam de monopolizar threads e inaniar consultas menores.
Configure o mecanismo de execução Pipeline
Defina variáveis de sessão para controlar a operação do mecanismo de execução Pipeline em uma determinada sessão de consulta.
Variáveis de sessão
|
Variável |
Padrão |
Descrição |
|
|
|
Ative o mecanismo de execução Pipeline nos nós backend (BE). Se definido como |
|
|
|
Quantidade de tarefas de pipeline executadas simultaneamente por consulta SQL. Se definido como |
|
|
|
Concorrência máxima definida automaticamente pelo ApsaraDB for SelectDB. Por padrão, esta variável de sessão vem configurada como |
Ative a execução Pipeline
O mecanismo de execução Pipeline vem ativado por padrão. Para ativá-lo explicitamente:
SET enable_pipeline_engine = true;
Defina a concorrência do Pipeline
Por padrão, o ApsaraDB for SelectDB define automaticamente a concorrência de tarefas do Pipeline como metade do número de núcleos de CPU (parallel_pipeline_task_num = 0). Para alterar esse comportamento:
SET parallel_pipeline_task_num = <n>;
Quandoparallel_pipeline_task_numé0, a concorrência calculada automaticamente fica limitada pormax_instance_num(padrão:64). Ajustemax_instance_numpara alterar o teto da concorrência automática.