변경한 내용이 없는데 Amazon Redshift 쿼리 상태가 "Completed"에서 "Aborted"로 변경된 이유는 무엇인가요?

3분 분량
0

Amazon Redshift 콘솔에는 쿼리 상태가 "Completed"로 표시되지만 상태는 "Aborted"로 변경됩니다. 하지만 이전 세션이나 트랜잭션의 결과를 쿼리했을 때 테이블이 업데이트되지 않았습니다.

간략한 설명


데이터를 조작하거나 데이터베이스 개체를 만드는 SQL 문은 트랜잭션이 커밋될 때까지 지속되지 않습니다. 이는 암시적으로 COMMIT을 수행하는 TRUNCATE 문에는 적용되지 않습니다.

Amazon Redshift 콘솔은 SQL 문이 아직 미결 트랜잭션 상태인 경우 쿼리 상태가 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;

쿼리의 출력에는 롤백된 트랜잭션에 대한 "Undoing 1 transactions" 명령문이 표시됩니다.

트랜잭션이 BEGIN 문으로 시작하는 경우 사용자나 응용 프로그램이 해당 명령문을 명시적으로 연 것입니다. 또한 이 문은 명시적으로 작성되어야 합니다. BEGIN 문으로 시작되지 않은 트랜잭션은 일반적으로 SQL 클라이언트 또는 드라이버의 AUTO COMMIT 옵션에 의해 자동 커밋됩니다. 이 옵션이 비활성화된 경우 사용자는 명시적으로 COMMIT을 보내야 합니다.

트랜잭션이 제대로 커밋되면 트랜잭션의 변경 사항은 장기적(지속적)이며 COMMIT 문 이후에 시작된 다른 XID에서도 확인할 수 있습니다. 자세한 내용은 직렬화 가능한 격리를 참조하세요.

SVL_STATEMENTTEXT 시스템 테이블에 END, COMMIT 또는 "Undoing 1 transactions" 메시지가 표시되지 않는 경우 XID는 여전히 열려 있을 수 있습니다. SVV_TRANSACTIONS 보기를 사용하여 열려 있는 트랜잭션과 LOCK 경합을 식별합니다.

STL_COMMIT_STATS 및 STL_UNDONE 시스템 테이블을 사용하여 트랜잭션이 COMMIT으로 종료되었는지 또는 ROLLBACK으로 종료되었는지 확인할 수도 있습니다.

다음 쿼리를 실행하여 변경 사항이 커밋되었는지 확인합니다.

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];

다음 쿼리를 실행하여 변경 사항이 롤백되었는지 확인합니다.

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

명시적인 ROLLBACK 명령으로 인해 또는 완료될 때까지 실행되지 않는 경우 트랜잭션 변경 내용이 지속되지 않습니다. 직렬화 가능한 격리 위반이 있는 경우 명시적 롤백이 발생할 수 없습니다. 또한 관리자가 세션을 종료하거나 쿼리를 취소할 때도 발생할 수 없습니다. 네트워크 연결의 시간 초과로 인해 트랜잭션 변경 사항이 지속되지 않을 수도 있습니다.

롤백이 발생하면 클라이언트는 자세한 내용이 포함된 오류 메시지를 받습니다. 오류를 기록하도록 클라이언트를 구성하는 것이 가장 좋습니다. 자세한 내용은 로깅 구성(JDBC) 또는 LogLevel(ODBC)을 참조하세요.

관련 정보

STL_DDLTEXT

AWS 공식
AWS 공식업데이트됨 일 년 전