DWS_2000000018 Queue Congestion in the Cluster Default Resource Pool
Descrição
O GaussDB (DWS) usa o Pool de recursos para controlar recursos de memória, I/O e CPU, gerencia e aloca recursos com base em prioridades de tarefas e gerencia cargas de serviços do usuário. Quando os recursos são insuficientes, algumas instruções SQL precisam ficar na fila para esperar que outras instruções sejam executadas. Para obter detalhes, consulte Enfileiramento de CCN no gerenciamento de carga dinâmica.
GaussDB(DWS) verifica a fila no pool de recursos padrão default_pool a cada 5 minutos. Este alarme é gerado quando há instruções SQL que são enfileiradas por um longo tempo (20 minutos por padrão e configuráveis). Este alarme é apagado automaticamente quando o limite de alarme não for mais atingido.
Se as instruções SQL bloqueadas que podem disparar o alarme persistirem, o alarme é gerado novamente após 24 horas (configurável).
Atributos
ID do alarme |
Gravidade do alarme |
Apagar automaticamente |
---|---|---|
DWS_2000000018 |
Critical |
Sim |
Parâmetros
Parâmetro |
Descrição |
---|---|
Source |
Indica o nome do sistema para o qual o alarme é gerado e o tipo de alarme detalhado. |
Cluster Name |
ID do cluster para o qual o alarme é gerado |
Location Information |
ID e nome do cluster para o qual o alarme é gerado |
Alarm Information |
CloudService indica o serviço de nuvem para o qual o alarme é gerado, incluindo o nome do serviço, ID do recurso, hora do primeiro alarme e informações de alarme formatadas. Exemplo: CloudServiceDWS, resourceId=xxxx-xxxx-xxxx-xxxx, resourceIdName=test_dws, first_alarm_time:2023-01-11:19:02:09. O pool de recursos padrão do cluster test_dws está bloqueado nos últimos 20 minutos. |
Time |
Indica a hora em que o alarme foi gerado. |
Status |
Indica o status atual de um alarme. |
Impacto no sistema
Quando o pool de recursos padrão é bloqueado, todas as consultas complexas (memória estimada maior ou igual a 32 MB) associadas ao pool de recursos padrão no cluster também podem ser bloqueadas. As consultas na fila são despertas somente quando as consultas em execução são concluídas.
Possíveis causas
- O uso estimado da memória de consulta é muito grande. Como resultado, o uso estimado de memória acumulado excede o limite superior da memória disponível dinâmica, causando o enfileiramento de CCN.
- A competição por recursos públicos, como CPU e I/O, deteriora o desempenho da execução de consultas.
Procedimento de manuseio
- Verifique se a fila é causada por memória estimada muito grande.
Corrija a falha referindo-se a Enfileiramento de CCN no gerenciamento de carga dinâmica.
- Verifique se a memória disponível do cluster é normal.
- Efetue logon no console do GaussDB(DWS).
- Na página Alarms, selecione o cluster atual na lista suspensa de seleção de cluster no canto superior direito e visualize as informações de alarme do cluster nos últimos sete dias. Localize o nome do cluster que dispara o alarme com base nas informações de localização.
- Na página Clusters, localize a linha que contém o cluster para o qual o alarme é gerado e clique em Monitoring Panel na coluna Operation.
- Escolha Monitoring > Node Monitoring > Overview para exibir o uso de memória de cada nó no cluster atual. Se você quiser exibir as informações de monitoramento histórico sobre o uso de memória de um nó, clique em à direita para exibir o uso de memória nas últimas 1, 3, 12 ou 24 horas.
Se o uso de memória do cluster for baixo (por exemplo, menor que 50%), o alarme poderá ser gerado porque o uso estimado de memória das consultas é muito grande. Nesse caso, execute a operação Analyze em tabelas relacionadas.
- Verifique a concorrência de outros recursos.
- Verifique o uso de CPU, I/O e rede do cluster consultando a seção 2.
- Se o banco de dados estiver totalmente carregado, consulte Top SQL em tempo real e elimine as instruções que ocupam um grande número de recursos.
- Verifique se muitas consultas são enviadas em um curto período de tempo.
- Execute a seguinte instrução SQL para consultar o status de execução da tarefa:
1 2 3 4 5 6 7 8 9 10 11 12
SELECT s.resource_pool AS rpname, s.node_group, count(1) AS session_cnt, SUM(CASE WHEN a.enqueue = 'waiting in global queue' THEN 1 ELSE 0 END) AS global_wait, SUM(CASE WHEN s.lane= 'fast' AND a.state = 'active' AND (a.enqueue IS NULL OR a.enqueue = 'no waiting queue') THEN 1 ELSE 0 END) AS fast_run, SUM(CASE WHEN s.lane= 'fast' AND a.enqueue = 'waiting in respool queue' THEN 1 ELSE 0 END) AS fast_wait, SUM(CASE WHEN s.lane= 'slow' AND a.state = 'active' AND (a.enqueue IS NULL OR a.enqueue = 'no waiting queue') THEN 1 ELSE 0 END) AS slow_run, SUM(CASE WHEN s.lane= 'slow' AND (a.enqueue = 'waiting in ccn queue' OR a.enqueue = 'waiting in respool queue') THEN 1 ELSE 0 END) AS slow_wait, SUM(CASE WHEN (a.enqueue IS NULL OR a.enqueue = 'no waiting queue') AND a.state = 'active' THEN statement_mem ELSE 0 END) AS est_mem FROM pgxc_session_wlmstat s,pgxc_stat_activity a WHERE s.threadid=a.pid(+) AND s.attribute != 'Internal' GROUP BY 1,2;
A seguir, um exemplo do possível resultado da execução da instrução SQL:1 2 3 4 5
rpname | node_group | session_cnt | global_wait | fast_run | fast_wait | slow_run | slow_wait | est_mem --------------+--------------+-------------+-------------+----------+-----------+----------+-----------+--------- default_pool | installation | 6 | 0 | 0 | 0 | 0 | 0 | 0 root | installation | 1 | 0 | 0 | 0 | 0 | 0 | 0 (2 rows)
- No resultado da consulta, se o valor de slow_wait correspondente a default_pool não for 0, o cluster será totalmente carregado devido a muitos trabalhos. Como resultado, um alarme é gerado. Nesse caso, você pode localizar a linha que contém o cluster especificado no console, escolha Monitoring Panel na coluna Operation. Na página exibida, escolha Monitoring > Queries para consultar a tarefa com o maior tempo de execução e matar a tarefa.
- Se o alarme for gerado com frequência, é aconselhável programar serviços fora do horário de pico ou criar novos pools de recursos para gerenciar os recursos do sistema de uma maneira mais refinada. Para obter detalhes, consulte Criação de um pool de recursos.
- Execute a seguinte instrução SQL para consultar o status de execução da tarefa:
Liberação de alarme
Este alarme é automaticamente apagado quando o bloqueio do pool de recursos é aliviado.
Para exibir instruções SQL bloqueadas históricas, localize a linha que contém o cluster de destino no console, escolha Monitoring Panel na coluna Operation. Na página exibida, escolha Monitoring > History para consultar o tempo de execução de instruções SQL históricas.