Amazon Redshift 쿼리가 설정한 WLM 제한 시간을 초과합니다.

최종 업데이트 날짜: 2020년 8월 21일

Amazon Redshift 쿼리에 대해 WLM 제한 시간을 설정했지만 이 기간이 만료된 후에도 쿼리가 계속 실행됩니다. 이유가 무엇입니까?

간략한 설명

WLM 제한 시간은 실행 단계 중에만 쿼리에 적용됩니다. WLM이 예상대로 쿼리를 종료하지 않는 경우 일반적으로 쿼리가 실행 단계 이외의 단계에서 시간을 소모했기 때문입니다. 예를 들어 쿼리는 구문 분석 또는 다시 쓰기를 기다리거나, 잠금을 기다리거나, WLM 대기열의 스팟을 기다리거나, 반환 단계에 도달하거나, 다른 대기열로 건너뛰기 위해 대기할 수 있습니다.++

​해결 방법

STV_RECENTS를 쿼리할 때 starttime은 쿼리가 실행되기 시작한 시간이 아니라 쿼리가 클러스터에 진입한 시간입니다. 쿼리가 STV_RECENTS에서 Running(실행 중) 상태이면 시스템에서 실시간으로 활성화됩니다. 하지만 쿼리는 STV_INFLIGHT 상태로 전환될 때까지 컴퓨팅 노드 리소스를 사용하지 않습니다. 쿼리 계획에 대한 자세한 내용은 쿼리 계획 및 실행 워크플로를 참조하십시오.

실행 중인 쿼리의 상태를 보려면 STV_RECENTS 대신 STV_INFLIGHT를 쿼리합니다.

select * from STV_INFLIGHT where query = your_query_id;

쿼리 단계에 대한 자세한 내용을 보려면 이 쿼리를 사용하십시오.

select * from SVL_QUERY_REPORT where query = your_query_id ORDER BY segment, step, slice;

쿼리의 현재 실행 상태에 대해 다음 쿼리를 사용합니다.

select * from STV_EXEC_STATE where query = your_query_id ORDER BY segment, step, slice;

다음은 쿼리가 WLM 제한 시간보다 오래 실행되는 것처럼 보이는 몇 가지 일반적인 이유입니다.

쿼리가 "반환" 단계에 있습니다.

두 가지 "반환" 단계가 있습니다. STV_EXEC_STATE를 확인하여 쿼리가 다음 반환 단계 중 하나에 들어왔는지 확인합니다.

  • 컴퓨팅 노드에서 리더 노드로 반환
  • 리더 노드에서 클라이언트로 반환

롤백이 진행 중입니다.

데이터 조작 언어(DML) 작업에 오류가 발생하여 롤백하는 경우, 작업이 이미 롤백 중이기 때문에 종료된 것으로 보이지 않습니다. STV_EXEC_STATE를 쿼리하여 롤백을 볼 수 있습니다. STL_UNDONE에서 추가 정보를 확인할 수 있습니다.

쿼리는 실행 전에 대기하는 데 시간을 소비합니다.

STV_WLM_QUERY_STATE를 쿼리하여 대기열 시간을 확인합니다.

select * from STV_WLM_QUERY_STATE where query = your_query_id;

쿼리가 잠금 대기 중입니다.

쿼리를 STV_RECENTS에서는 볼 수 있지만 STV_WLM_QUERY_STATE에서는 볼 수 없는 경우 쿼리가 잠금 대기 중이고 대기열에 들어가지 않았을 수 있습니다. 다음과 비슷한 쿼리를 사용하여 멈춰 있는 프로세스가 대기 중인 잠금을 확인합니다.

select *
from SVV_TRANSACTIONS
where granted='f'
and pid in (select pid from STV_RECENTS where query ilike '%concerned_query_search_string%');

다음과 비슷한 쿼리를 사용하여 쿼리를 차단하는 프로세스를 식별합니다.

select b.*
from SVV_TRANSACTIONS b, SVV_TRANSACTIONS w
where b.granted='t'
and w.granted = 'f'
and b.txn_db = w.txn_db
and b.relation = w.relation
and w.pid in (select pid from STV_RECENTS where ilike '%concerned_query_search_string%');

차단 프로세스(예: 현재 실행 중인 쿼리)에 대한 자세한 내용을 보려면 다음과 비슷한 쿼리를 실행합니다.

select * from STL_QUERY where pid =  pid_of_blocking_process;
        
select * from SVL_STATEMENTTEXT where pid = pid_of_blocking_process;

멈춰 있는 쿼리를 종료하거나 차단하는 프로세스를 종료하려면 다음과 비슷한 쿼리를 실행합니다. 자세한 내용은 PG_TERMINATE_BACKEND를 참조하십시오.

select pg_terminate_backend(process_or_query_id);

쿼리가 다른 대기열로 건너뛰었습니다.

읽기 쿼리가 현재 WLM 대기열의 제한 시간 한도에 도달하거나 건너뛰기 작업을 지정하는 쿼리 모니터링 규칙이 있는 경우 쿼리가 실행을 위해 다음 WLM 대기열로 푸시됩니다. 쿼리가 다음 대기열로 건너뛰는지 여부를 확인하려면 다음을 수행합니다.

쿼리가 다른 대기열로 건너뛰지 않도록 하려면 WLM 쿼리 또는 WLM 쿼리 모니터링 규칙을 구성합니다. 쿼리 건너뛰기에 대한 자세한 내용은 WLM 쿼리 대기열 건너뛰기를 참조하십시오.

네트워킹 또는 방화벽 문제

Amazon Redshift 서버가 클라이언트와 통신하는 데 문제가 있는 경우 서버는 "return to client(클라이언트로 반환)" 상태에서 멈출 수 있습니다. 인바운드 온프레미스 방화벽 설정, 아웃바운드 보안 그룹 규칙 또는 아웃바운드 네트워크 ACL 규칙과 같은 네트워킹 구성 요소와의 충돌을 확인합니다. 자세한 내용은 Connecting from outside of Amazon EC2 —firewall timeout issue를 확인하십시오.

클러스터 관련 문제

하드웨어 문제와 같은 클러스터 자체의 문제로 인해 쿼리가 중단될 수 있습니다. 이 경우 클러스터는 “hardware-failure(하드웨어 장애)” 상태가 됩니다. 단일 노드 클러스터를 복구하려면 스냅샷을 복원합니다. 다중 노드 클러스터에서 장애가 발생한 노드는 자동으로 대체됩니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?