Amazon Redshift 쿼리에 WLM 제한 시간이 설정되어 있는데 이 기간이 만료된 후에도 쿼리가 계속 실행됩니다. 왜 그렇습니까?

WLM 제한 시간은 실행 단계 중에만 쿼리에 적용됩니다. WLM이 규정된 시간 제한 내에 쿼리를 종료하지 못한 것이 분명한 경우 이러한 실패는 쿼리가 실행 단계가 아닌 다른 단계에서 약간의 시간을 보냈기 때문입니다. 예를 들어, 쿼리가 구문 분석 또는 재작성되기를 기다리거나, 잠금 대기 중이거나, WLM 대기열의 한 지점을 대기하거나, 반환 단계에 이르거나, 다른 대기열로 건너뛸 수 있습니다.

STV_RECENTS를 쿼리할 때 starttime은 쿼리가 실행되기 시작한 시간이 아니라 쿼리가 클러스터에 진입한 시간입니다. 쿼리가 STV_RECENTS에서 실행 중 상태인 경우 시스템에서 라이브 상태이지만, 이 쿼리는 STV_INFLIGHT 상태로 전환될 때까지 어떠한 컴퓨팅 노드 리소스도 사용하지 않습니다. 쿼리 계획에 대한 자세한 내용은 쿼리 계획 및 실행 워크플로우를 참조하십시오. 실행 중인 쿼리의 상태를 보려면 STV_RECENTS 대신 STV_INFLIGHT를 쿼리하십시오.

select * from STV_INFLIGHT where query = <queryid>;

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

select * from SVL_QUERY_REPORT where query = <queryid> ORDER BY segment, step, slice;

쿼리의 현재 실행 상태를 확인하려면 다음 쿼리를 사용하십시오.

select * from STV_EXEC_STATE where query = <queryid> 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 = <queryid>;

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

쿼리가 STV_RECENTS에는 표시되지만 STV_WLM_QUERY_STATE에는 표시되지 않는 경우 쿼리가 잠금 대기 중이며 대기열에 아직 들어오지 않았을 가능성이 있습니다. 멈춰 있는 프로세스가 대기 중인 잠금을 찾으려면 다음과 비슷한 쿼리를 사용하십시오.

select * from SVV_TRANSACTIONS

where granted='f'

and pid in (select pid from STV_RECENTS where query = );

차단 프로세스를 파악하려면 다음과 비슷한 쿼리를 사용하십시오.

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 query = );

차단 가능성이 있는 pid에 대한 자세한 정보(예: 현재 실행 중인 쿼리)를 보려면 다음과 비슷한 쿼리를 실행하십시오.

select * from STL_QUERY where pid = ;

select * from SVL_STATEMENTTEXT where pid = ;

멈춰 있는 쿼리를 종료하거나 해당 쿼리를 차단하고 있는 것으로 의심되는 프로세스를 종료하려면 다음과 비슷한 쿼리를 실행하십시오.

select pg_terminate_backend(pid);

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

읽기 쿼리가 현재 WLM 대기열의 제한 시간 한도에 도달하거나 건너뛰기 작업을 지정하는 쿼리 모니터링 규칙이 있는 경우 실행을 위해 쿼리가 다음 WLM 대기열로 푸시됩니다. 쿼리가 실행되는 동안 STV_WLM_QUERY_STATE를 사용하고 쿼리 실행이 완료된 후 STL_WLM_QUERY를 사용함으로써 쿼리가 건너뛰었는지 여부를 확인할 수 있습니다. 쿼리가 다른 대기열로 건너뛰지 않도록 하려면 WLM 쿼리 모니터링 규칙을 구성하여 WLM 대기열의 작업을 중단할 수 있습니다. 쿼리 대기열 건너뛰기에 대한 자세한 내용은 WLM 쿼리 대기열 건너뛰기를 참조하십시오.

네트워킹 또는 방화벽 문제

Amazon Redshift 서버가 클라이언트와 통신하는 데 문제가 발생한 경우 서버가 위에서 설명한 "클라이언트로 반환" 상태에 멈춰 있게 될 수 있습니다. 이 경우 인바운드 온프레미스 방화벽 설정, 아웃바운드 보안 그룹 규칙 또는 아웃바운드 네트워크 ACL 규칙을 비롯하여 서버에 대한 트래픽 차단을 일으킬 수 있는 네트워킹 구성 요소와의 충돌 요인을 확인하십시오. 자세한 내용은 Amazon EC2 외부에서 연결할 때 - 방화벽 제한 시간 문제를 참조하십시오.

클러스터 관련 문제

하드웨어 문제와 같은 클러스터 자체의 문제로 인해 드물긴 하지만 쿼리가 중단될 수 있습니다. 하드웨어 장애 상태에 대해서는 Amazon Redshift 콘솔에서 클러스터 상태를 확인하십시오. 클러스터가 이 상태에 있으며 단일 노드 클러스터인 경우 스냅샷에서 클러스터를 복구하십시오. 다중 노드 클러스터에서 장애가 발생한 노드는 자동으로 교체됩니다.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2017년 4월 11일

업데이트된 날짜: 2018년 2월 26일