쿼리가 너무 오래 걸림
다음과 같은 이유로 쿼리가 너무 오래 걸릴 수 있습니다. 먼저 다음 문제 해결 접근 방식을 따르는 것이 좋습니다.
테이블이 최적화되지 않음
테이블의 정렬 키, 분산 스타일 및 압축 인코딩을 설정하여 병렬 처리를 최대한 이용하세요. 자세한 내용은 자동 테이블 최적화 섹션을 참조하세요.
쿼리가 디스크에 쓰고 있음
쿼리는 쿼리 실행 중 일부분이라도 디스크에 작성할 수 있습니다. 자세한 내용은 쿼리 성능 개선 섹션을 참조하세요.
다른 쿼리가 끝날 때까지 쿼리가 대기해야 함
이때는 쿼리 대기열을 생성한 후 유형에 따라 쿼리를 적합한 대기열에 할당하면 전반적인 시스템 성능을 개선할 수 있습니다. 자세한 내용은 워크로드 관리 섹션을 참조하세요.
쿼리가 최적화되지 않음
실행 계획을 분석하여 쿼리를 재작성하거나 데이터베이스를 최적화하세요. 자세한 내용은 쿼리 계획 생성 및 해석 섹션을 참조하세요.
쿼리 실행에 더 많은 메모리 필요
특정 쿼리에 더 많은 메모리가 필요한 경우에는 wlm_query_slot_count 파라미터 값을 높여서 사용 가능한 메모리를 늘릴 수 있습니다.
데이터베이스에서 VACUUM 명령 실행 필요
정렬 키 순서에 따라 데이터를 로드하지 않는 경우에는 다수의 행을 추가, 삭제 또는 수정할 때마다 VACUUM 명령을 실행하세요. VACUUM 명령은 데이터를 재구성하여 정렬 순서를 유지하는 동시에 성능을 복원합니다. 자세한 내용은 테이블 Vacuum 단원을 참조하십시오.
장기 실행 쿼리 문제 해결을 위한 추가 리소스
다음은 쿼리 튜닝에 도움이 되는 시스템 뷰 주제 및 기타 설명서 섹션입니다.
STV_INFLIGHT 시스템 뷰는 클러스터에서 실행 중인 쿼리를 보여줍니다. 현재 실행 중이거나 최근에 완료된 쿼리를 확인하려면 STV_RECENTS와 함께 사용하면 유용할 수 있습니다.
SYS_QUERY_HISTORY는 문제 해결에 유용합니다.
running
또는failed
와 같은 현재 상태, 각 쿼리가 실행되는 데 걸린 시간, 쿼리가 동시성 확장 클러스터에서 실행되었는지 여부와 같은 관련 속성과 함께 DDL 및 DML 쿼리를 표시합니다.STL_QUERYTEXT는 SQL 명령의 쿼리 텍스트를 수집합니다. 또한 STL_QUERYTEXT를 STV_INFLIGHT에 결합하는 SVV_QUERY_INFLIGHT는 더 많은 쿼리 메타데이터를 표시합니다.
트랜잭션 잠금 충돌은 쿼리 성능 문제의 원인이 될 수 있습니다. 현재 테이블에 잠금을 유지하고 있는 트랜잭션에 대한 자세한 내용은 SVV_TRANSACTIONS를 참조하세요.
조정에 가장 적합한 쿼리를 식별하면 최근에 실행한 쿼리 중 가장 많은 시간이 소요된 쿼리를 파악하는 데 도움이 되는 문제 해결 쿼리를 제공합니다. 이를 통해 개선이 필요한 쿼리에 노력을 집중할 수 있습니다.
쿼리 관리를 더 자세히 살펴보고 쿼리 대기열을 관리하는 방법을 이해하려면 워크로드 관리에서 그 방법을 확인하세요. 워크로드 관리는 고급 기능이며 대부분의 경우 자동화된 워크로드 관리를 권장합니다.