O PolarDB-X coleta estatísticas em segundo plano para que o otimizador baseado em custo (CBO) gere planos de execução precisos. Estatísticas desatualizadas ou ausentes resultam em planos subotimizados e consultas mais lentas.
Este tópico descreve as três políticas de coleta de estatísticas, explica os acionamentos de cada uma e mostra como controlar ou interromper a coleta.
Políticas de coleta de estatísticas
O PolarDB-X executa três políticas de coleta, cada uma com uma condição de acionamento diferente.
|
Política |
Acionamento |
Padrão SQL |
Parâmetro |
|
Auto analyze |
Semanalmente, entre 02:00 e 05:00 |
SQL com cláusula |
|
|
Consultas no INFORMATION_SCHEMA |
Diariamente, entre 02:00 e 05:00 |
|
N/A |
|
Coleta por feedback em tempo real |
Quando operações INSERT ou DELETE alteram mais de 20% das linhas armazenadas na tabela |
Mesmos padrões SQL do auto analyze |
N/A |
Impacto nas IOPS
Aumento de IOPS durante a janela de coleta
Em tabelas grandes, as IOPS nos nós de dados aumentam durante a janela de coleta das 02:00 às 05:00. Esse comportamento é esperado.
Aumento de IOPS fora da janela de coleta
Se as IOPS aumentarem fora da janela programada, um dos seguintes cenários estará ocorrendo:
Tarefa de coleta excedendo o tempo limite: A tabela é grande o suficiente para que o processamento de uma única tabela lógica ultrapasse a janela programada. A tarefa iniciou às 02:00, mas continua em execução após as 05:00.
Coleta por feedback em tempo real acionada: Uma operação grande de INSERT ou DELETE ultrapassou o limiar de 20% e a tarefa de coleta resultante está em execução por um período prolongado.
Desativar a coleta de estatísticas em segundo plano
Para impedir a execução da coleta durante a madrugada, defina ENABLE_BACKGROUND_STATISTIC_COLLECTION como False na página Parameter Settings do console do PolarDB-X.
Essa configuração desativa tanto o auto analyze quanto a coleta por feedback em tempo real. Após a desativação, execute manualmente a instrução a seguir em horários de baixa demanda para manter as estatísticas atualizadas:
ANALYZE TABLE <table_name>;
Execute ANALYZE TABLE regularmente se suas tabelas forem atualizadas com frequência. Para tabelas com atualizações pouco frequentes ou previsíveis, programe a execução com menor periodicidade.
Interromper uma tarefa de coleta em execução
Para interromper uma tarefa de coleta já em execução:
-
Visualize as instruções SQL em execução no nó de dados:
SHOW FULL PHYSICAL_PROCESSLIST WHERE INFO LIKE '%rand%'; -
Identifique a instrução que coleta estatísticas e execute uma instrução
KILLpara interrompê-la:KILL '<node_id>-<shard_id>-<statement_id>';O identificador de interrupção usa o seguinte formato:
Campo
Descrição
Exemplo
node_idID do nó de dados
0shard_idID do shard do banco de dados
0statement_idID da instrução SQL a ser interrompida
222Por exemplo,
KILL '0-0-222';interrompe a instrução222no nó0, shard0.