Amazon Redshift의 시스템 테이블 및 뷰 전체에서 쿼리 ID를 일치시키고 싶습니다.
간략한 설명
query_id 열을 SYS_QUERY_HISTORY를 비롯한 SYS 뷰의 쿼리 ID로 사용할 수 있습니다. STL_QUERY를 비롯한 STL/SVL 테이블 및 뷰의 경우 쿼리 ID에 query 열을 사용할 수 있습니다. query 열은 Amazon Redshift가 원래 쿼리를 처리할 때 생성하는 재작성된 하위 쿼리를 식별합니다. 자세한 내용은 SYS 모니터링 뷰를 사용한 쿼리 식별자 추적 개선을 참조하십시오.
해결 방법
시스템 테이블에 대한 액세스 권한 부여
Amazon Redshift의 시스템 테이블 전체에서 쿼리 ID를 일치시키려면 사용자가 슈퍼 사용자이거나 필요한 권한을 가지고 있어야 합니다. 특정 사용자에게 액세스 권한을 부여하는 방법에 대한 자세한 내용은 시스템 테이블 및 뷰의 데이터 가시성을 참조하십시오.
특정 사용자에게 액세스 권한을 부여하고 시스템 정의 역할을 할당하려면 다음 명령을 실행하십시오.
GRANT ROLE sys:monitor TO database_user;
참고: database_user를 데이터베이스 사용자로 대체하십시오.
쿼리 ID의 상관관계 파악
Amazon Redshift는 query_id 열과 query 열 간에 정확히 일치하는 항목을 제공하지 않을 수 있습니다. 하지만 SYS 테이블과 STL/SVL 테이블 간의 잠재적 일치 항목을 검색할 수는 있습니다.
다음 쿼리에서 SYS의 query_id를 사용하여 STL/SVL의 쿼리 ID를 가져옵니다.
SELECT query_id, query FROM sys_query_history a, stl_query b
WHERE a.query_id = <query_id>
AND a.transaction_id = b.xid
AND b.starttime BETWEEN a.start_time AND a.end_time
AND b.endtime BETWEEN a.start_time AND a.end_time;
참고: 리더 노드에서만 실행되는 쿼리는 SYS_QUERY_HISTORY에 있지만 STL_QUERY는 이러한 쿼리를 제외합니다.
다음 쿼리에서 STL/SVL의 쿼리를 사용하여 SYS의 query id를 가져옵니다.
SELECT query_id, query FROM sys_query_history a, stl_query b
WHERE b.query = <query>
AND a.transaction_id = b.xid
AND b.starttime BETWEEN a.start_time AND a.end_time
AND b.endtime BETWEEN a.start_time AND a.end_time;
동일한 SQL 문에 대한 쿼리 기록 찾기
이러한 쿼리의 출력은 여러 쿼리 실행을 비교할 때 도움이 될 수 있습니다. SYS_QUERY_HISTORY에서 서로 다른 시간에 실행된 동일한 쿼리를 찾으려면 다음 쿼리를 사용하여 user_query_hash 값과 해당 항목을 검색하십시오.
SELECT user_query_hash FROM sys_query_history
WHERE query_id = <query_id>;
SELECT *
FROM sys_query_history
WHERE user_query_hash = '<user_query_hash>';
관련 정보
쿼리 계획 및 실행 워크플로