변경 사항이 없을 때 Amazon Redshift 쿼리 상태가 “완료됨(Completed)”에서 “중단됨(Aborted)”으로 변경된 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 9월 18일

Amazon Redshift 콘솔에 쿼리 상태는 “완료됨(Completed)”으로 표시되지만, 상태가 “중단됨(Aborted)”으로 변경됩니다. 그러나 이전 세션 또는 트랜잭션에서 결과를 쿼리할 때 테이블에 대한 업데이트가 수행되지 않았습니다. 이유가 무엇입니까?

간략한 설명

데이터를 조작하거나 데이터베이스 객체를 생성하는 SQL 문은 트랜잭션을 커밋하지 않는 한 지속되지 않습니다. 암시적으로 COMMIT가 수행되는 TRUNCATE 문에는 적용되지 않습니다.

SQL 문이 여전히 열린 트랜잭션에 있는 경우 Amazon Redshift 콘솔에서 쿼리 상태는 “완료됨(Completed)”으로 표시됩니다. 트랜잭션이 롤백되면 상태는 다시 “중단됨(Aborted)”으로 변경됩니다. STL_QUERY 시스템 테이블은 중단된 열 값이 0일 때 SQL 문이 성공적으로 완료되었다고 표시합니다.

트랜잭션을 나중에 커밋한 경우 변경 사항이 표시됩니다. 그러나 트랜잭션을 커밋할 수 없으면 Amazon Redshift 콘솔은 쿼리가 중단된 것으로 표시합니다. 트랜잭션을 커밋할 수 없는 이유를 확인하려면 STL 시스템 테이블을 확인하십시오.

해결 방법

다음 쿼리를 실행하여 SVL_STATEMENTTEXT 시스템 테이블을 확인하고 SQL 문의 트랜잭션 ID(xid)로 필터링합니다.

SELECT * FROM SVL_STATEMENTTEXT WHERE xid IN (SELECT xid FROM STL_QUERY WHERE query = [QUERY ID]) ORDER BY starttime, sequence;

결과에서 BEGIN 문에 대응하는 END 또는 COMMIT 문이 없는 경우 SQL 클라이언트 또는 드라이버의 자동 커밋(AUTO COMMIT) 설정이 비활성화됩니다. SQL 클라이언트 또는 드라이버에 따라 자동 커밋(AUTO COMMIT) 설정을 사용하도록 설정할 수 있습니다. 또는 트랜잭션이 완료될 때 명시적 COMMIT 또는 END 문을 수동으로 발행할 수 있습니다.

SQL 문이 변경 사항을 커밋하면 대응하는 항목이 STL_COMMIT_STATS 시스템 테이블에 추가됩니다. 다음 쿼리를 실행하여 변경 사항이 커밋되었는지 확인합니다.

SELECT q.query, q.xid, NVL2(cs.endtime, cs.endtime::text, 'NO COMMIT') AS commit_endtime
FROM STL_QUERY q LEFT JOIN STL_COMMIT_STATS cs ON q.xid = cs.xid AND cs.node = -1
WHERE q.query = [QUERY ID];

SQL 문이 변경 사항을 커밋할 수 없고 트랜잭션이 종료되면 롤백에 대한 STL_UNDONE 시스템 테이블에 항목이 나타납니다. 다음 쿼리를 실행하여 변경 사항이 롤백되었는지 확인합니다.

SELECT *
FROM STL_UNDONE
WHERE xact_id_undone IN (SELECT xid from STL_QUERY where query = [QUERY ID]);

이 쿼리는 롤백된 트랜잭션에 대한 정보를 반환합니다. 즉, 완료될 때까지 트랜잭션이 실행되지 않고 변경 사항은 적용되지 않습니다. 롤백은 직렬화 가능 격리 위반이 있거나, 관리자가 세션을 종료하거나, 쿼리를 취소할 때 발생합니다. 롤백은 네트워크 연결의 시간 초과로 인해 발생할 수도 있습니다. 롤백이 발생하면 클라이언트는 자세한 내용과 함께 오류 메시지를 받게 됩니다. 따라서 클라이언트가 오류를 기록하도록 구성되어 있는지 확인하십시오.


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


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