DWS_2000000016 Data Spilled to Disks for a Query Statement Exceeds the Threshold
Descrição
Durante a execução de consultas de serviço, o banco de dados pode optar por armazenar o resultado temporário no disco, que é chamado de Derramamento de operador.
GaussDB(DWS) verifica os registros de gerenciamento de carga dos trabalhos que estão sendo executados em CNs por meio da visão GS_WLM_SESSION_STATISTICS a cada 60 segundos e calcula a quantidade máxima de vazamento de dados aos DNs.
Se o número de instruções SQL derramadas em discos exceder 5 GB (configurável) dentro de 10 minutos (configurável), um alarme é relatado indicando que uma instrução de consulta dispara o limite de derramamento de dados. Este alarme é apagado automaticamente quando o derramamento de dados cair abaixo das condições de alarme. Para obter detalhes sobre como modificar configurações de alarme, consulte Modificação de regras de alarme.
Se persistirem as instruções SQL bloqueadas que podem disparar o alarme, o alarme é gerado novamente após 24 horas (configurável).
Atributos
ID do alarme |
Gravidade do alarme |
Apagar automaticamente |
---|---|---|
DWS_2000000016 |
Crítico |
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 |
Other Information |
CloudService indica o serviço de nuvem para o qual o alarme é gerado, incluindo o nome do serviço, ID do recurso, nome do banco de dados, nome do usuário conectado ao back-end e ID da consulta. first_alarm_time indica a hora em que o alarme é gerado pela primeira vez. query statement indica a instrução de consulta que dispara o alarme, juntamente com a quantidade de dados derramados para discos causada pela instrução de consulta. Exemplo: CloudService=DWS,resourceId: xxxx-xxxx-xxxx-xxxx, resourceIdName: test_dws, db_name: test_db, user_name: test_user, query_id: 756942385413326696, first_alarm_time: 2022-12-30:12:42:77: query statement (ID= 756942385413326696) select num,value,cnt,rk,cnt/sumcnt as ratio,sum(ratio) over (over by rk) as cumuratio from...; O conjunto de resultados é derramado para discos, e o tamanho do derramamento é de 15 GB. |
Time |
Indica a hora em que o alarme foi gerado. |
Status |
Indica o status atual de um alarme. |
Você pode se conectar ao banco de dados e executar o comando SELECT * FROM GS_WLM_SESSION_STATISTICS para exibir a coluna max_spill_size na visão.
Impacto no sistema
Se uma grande quantidade de dados vazar para os discos, um grande número de recursos de I/O do sistema é ocupado. Como resultado, o espaço em disco de dados pode ser insuficiente ou esgotado, acionando o banco de dados para se tornar somente leitura e interrompendo serviços.
Possíveis causas
- A quantidade de dados de serviço derramados para discos excede o limite de alarme.
- O desempenho do plano de consulta SQL é ruim, fazendo com que uma grande quantidade de dados seja importada para a memória e derramada em discos.
- Os dados expirados não são limpos em tempo hábil. Como resultado, muitos dados inválidos são verificados e derramados em discos.
Procedimento de manuseio
- Verifique se o plano de execução é ruim em desempenho.
- Obtenha a instrução SQL a partir das informações adicionais do alarme, execute a instrução ANALYZE nas tabelas envolvidas. Execute a instrução SQL novamente e verifique se a quantidade de dados derramados para discos diminui.
- Se não houver nenhum efeito óbvio, execute o comando EXPLAIN PERFORMANCE para visualizar a informação de execução real da instrução SQL do alarme. Para obter detalhes, consulte Plano de execução de SQL. Com base nas informações de execução, se o uso estimado de memória (memória do operador) e a memória de pico forem grandes, por exemplo, maior que 20% de max_process_memory, será necessário otimizar a consulta. Para obter detalhes, consulte Processo de otimização.
- Verifique se a configuração do alarme é adequada.
- Retorne ao console de gerenciamento do GaussDB(DWS) e escolha Alarms > Alarm Rule.
- Clique em Modify na coluna Operation da linha que contém Data Flushed to Disks of the Query Statement Exceeds the Threshold. A página Modifying an Alarm Rule é exibida.
- Se a capacidade do disco do cluster for alta, você poderá aumentar o limite de relatório de alarmes. Recomenda-se que o limite de relatório de alarme seja menor ou igual a 5% da capacidade de um único disco de dados.
Se o limite for muito grande, os dados derramados em um disco podem causar alarmes de uso de disco ou até mesmo o cluster ser somente leitura. Se o uso do disco de dados estiver próximo ou exceder 80%, é aconselhável limpar dados desnecessários ao ajustar o limite. Para obter detalhes sobre a configuração da GUI, consulte Regras de alarme.
- Retorne ao console de gerenciamento do GaussDB(DWS) e escolha Alarms > Alarm Rule.
- Elimine as instruções SQL que causam grandes vazamentos de dados.
- Volte para o console de gerenciamento do GaussDB(DWS).
- 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 > Queries. Clique em para ver o derramamento de dados na coluna Max. DN Data Spill (MB).
- Depois de confirmar com o lado do serviço, selecione o ID da consulta a ser interrompido e clique em Stop Query.
- Ajuste os parâmetros do banco de dados para controlar o espaço em disco das instruções de serviço. Para obter detalhes sobre os parâmetros, consulte Controle de espaço em disco de instrução. Para obter detalhes sobre o procedimento, consulte Modificação dos parâmetros do banco de dados
Por exemplo, o valor padrão de sql_use_spacelimit é 10% do espaço total de armazenamento da instância de banco de dados. Se o espaço de armazenamento for suficiente, você pode aumentar o valor. Se o volume de gravação em disco de um único DN exceder o valor, o GaussDB(DWS) interrompe a consulta e exibe uma mensagem indicando que o volume de gravação em disco de um único DN excede o limite.
Liberação de alarme
Este alarme é apagado automaticamente quando o vazamento de dados cai para um nível baixo.