Amazon QLDB 드라이버에서 발생하는 일반적인 오류 - Amazon Quantum Ledger Database(QLDB)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon QLDB 드라이버에서 발생하는 일반적인 오류

이 섹션에서는 QLDB 세션 API와 상호 작용할 때 Amazon QLDB 드라이버에서 발생할 수 있는 런타임 오류에 대해 설명합니다.

다음은 드라이버가 반환하는 일반적인 예외 목록입니다. 각 예외에는 특정 오류 메시지와 가능한 해결 방법에 대한 간단한 설명 및 제안이 포함됩니다.

CapacityExceededException

메시지: 용량 초과

Amazon QLDB는 원장의 처리 용량을 초과했기 때문에 요청을 거부했습니다. QLDB는 서비스의 상태와 성능을 유지하기 위해 원장당 내부 크기 조정 한도를 적용합니다. 이 한도는 각 개별 요청의 워크로드 크기에 따라 달라집니다. 예를 들어, 인덱스가 아닌 정규화된 쿼리로 인한 테이블 스캔과 같은 비효율적인 데이터 트랜잭션을 수행하는 요청의 경우 워크로드가 증가할 수 있습니다.

요청을 재시도하기 전에 잠시 기다릴 것을 권장합니다. 애플리케이션에서 이 예외가 지속적으로 발생하는 경우 문을 최적화하고 원장에 보내는 요청의 속도와 볼륨을 줄이십시오. 명령문 최적화의 예로는 트랜잭션당 더 적은 수의 명령문을 실행하고 테이블 인덱스를 조정하는 경우를 들 수 있습니다. 명령문을 최적화하고 테이블 스캔을 방지하는 방법을 알아보려면 쿼리 성능 최적화을 참조하십시오.

또한 최신 버전의 QLDB 드라이버를 사용할 것을 권장합니다. 드라이버에는 지수 백오프 및 Jitter를 사용하여 이와 같은 예외가 발생할 경우 자동으로 재시도하는 기본 재시도 정책이 있습니다. 지수 백오프의 개념은 오류 응답이 연속될 때마다 재시도 간 대기 시간을 점진적으로 늘린다는 것입니다.

InvalidSessionException

메시지: 트랜잭션 transactionId가 만료되었습니다

트랜잭션이 최대 수명을 초과했습니다. 트랜잭션은 커밋되기 전까지 최대 30초 동안 실행될 수 있습니다. 이 시간 초과 제한 이후에는 트랜잭션에 대해 수행된 모든 작업이 거부되고 QLDB는 세션을 삭제합니다. 이 제한은 트랜잭션을 시작하고 커밋하거나 취소하지 않기 때문에 클라이언트의 세션 유출을 방지합니다.

이것이 애플리케이션에서 일반적인 예외인 경우, 트랜잭션을 실행하는 데 시간이 너무 오래 걸릴 수 있습니다. 트랜잭션 런타임이 30초 이상 걸리는 경우 문을 최적화하여 트랜잭션 속도를 높이십시오. 명령문 최적화의 예로는 트랜잭션당 더 적은 수의 명령문을 실행하고 테이블 인덱스를 조정하는 경우를 들 수 있습니다. 자세한 내용은 쿼리 성능 최적화을 참조하십시오.

InvalidSessionException

메시지: 세션 sessionId가 만료되었습니다

최대 총 수명을 초과했기 때문에 QLDB가 세션을 삭제했습니다. QLDB는 활성 트랜잭션과 상관없이 13~17분 후에 세션을 삭제합니다. 세션은 하드웨어 장애, 네트워크 장애 또는 애플리케이션 재시작과 같은 여러 가지 이유로 손실되거나 손상될 수 있습니다. 따라서 QLDB는 클라이언트 소프트웨어가 세션 장애에 대해 복원력을 유지할 수 있도록 세션에 최대 수명을 적용합니다.

이 예외가 발생하는 경우 새 세션을 획득하고 트랜잭션을 다시 시도할 것을 권장합니다. 또한 애플리케이션을 대신하여 세션 풀과 해당 상태를 관리하는 최신 버전의 QLDB 드라이버를 사용할 것을 권장합니다.

InvalidSessionException

메시지: 해당 세션이 없습니다

클라이언트가 존재하지 않는 세션을 사용하여 QLDB와 트랜잭션을 시도했습니다. 클라이언트가 이전에 존재했던 세션을 사용하고 있다고 가정하면 다음 중 하나로 인해 세션이 더 이상 존재하지 않을 수 있습니다.

  • 세션이 내부 서버 장애(즉, HTTP 응답 코드 500 오류)와 관련된 경우, QLDB는 고객이 불확실한 상태의 세션과 트랜잭션하도록 허용하는 대신 해당 세션을 완전히 삭제하도록 선택할 수 있습니다. 그러면 해당 세션에 대한 모든 재시도가 실패하고 이 오류가 발생합니다.

  • QLDB는 만료된 세션을 결국 잊어버립니다. 그런 다음 세션을 계속 사용하려고 하면 초기 InvalidSessionException이 아닌 이 오류가 발생합니다.

이 예외가 발생하는 경우 새 세션을 획득하고 트랜잭션을 다시 시도할 것을 권장합니다. 또한 애플리케이션을 대신하여 세션 풀과 해당 상태를 관리하는 최신 버전의 QLDB 드라이버를 사용할 것을 권장합니다.

RateExceededException

메시지: 속도가 초과되었습니다

QLDB는 발신자의 ID를 기반으로 클라이언트를 제한했습니다. QLDB는 토큰 버킷 제한 알고리즘을 사용하여 리전별, 계정별로 제한을 적용합니다. QLDB는 서비스의 성과를 돕고 모든 QLDB 고객의 공정한 사용을 보장하기 위해 이를 수행합니다. 예를 들어, StartSessionRequest 작업을 사용하여 많은 수의 동시 세션을 획득하려고 하면 제한이 발생할 수 있습니다.

애플리케이션 상태를 유지하고 추가적인 제한을 완화하기 위해 지수 백오프 및 Jitter를 사용하여 이 예외를 다시 시도할 수 있습니다. 지수 백오프의 개념은 오류 응답이 연속될 때마다 재시도 간 대기 시간을 점진적으로 늘린다는 것입니다. 최신 버전의 QLDB 드라이버를 사용하는 것이 좋습니다. 드라이버에는 지수 백오프 및 Jitter를 사용하여 이와 같은 예외가 발생할 경우 자동으로 재시도하는 기본 재시도 정책이 있습니다.

최신 버전의 QLDB 드라이버는 애플리케이션이 StartSessionRequest 호출에 대해 QLDB에 의해 지속적으로 제한되는 경우에도 도움이 될 수 있습니다. 드라이버는 여러 트랜잭션에서 재사용되는 세션 풀을 유지 관리하므로 애플리케이션이 수행하는 StartSessionRequest 호출 수를 줄이는데 도움이 될 수 있습니다. API 호출 한도 증가를 요청하려면 AWS Support 센터로 문의하십시오.

LimitExceededException

메시지: 세션 제한을 초과했습니다

원장이 활성 세션 수의 할당량(한도라고도 함)을 초과했습니다. 이 할당량은 Amazon QLDB 할당량 및 제한에 정의되어 있습니다. 원장의 활성 세션 수는 최종적으로 일정하게 유지되며, 할당량 근처에서 지속적으로 실행되는 원장에서는 이 예외가 주기적으로 발생할 수 있습니다.

애플리케이션의 상태를 유지하려면 이 예외를 다시 시도할 것을 권장합니다. 이 예외를 피하려면 모든 클라이언트에서 단일 원장에 1,500개 이상의 동시 세션을 사용하도록 구성하지 않았는지 확인하십시오. 예를 들어, Java용 Amazon QLDB 드라이버MaxConcurrentTransactions 메서드를 사용하여 드라이버 인스턴스에서 사용 가능한 최대 세션 수를 구성할 수 있습니다.

QldbClientException

메시지: 스트리밍된 결과는 상위 트랜잭션이 열려 있을 때만 유효합니다

트랜잭션이 종료되었으며 QLDB에서 결과를 검색하는 데 사용할 수 없습니다. 트랜잭션은 커밋되거나 취소되면 종료됩니다.

이 예외는 클라이언트가 Transaction 객체로 직접 작업하고 트랜잭션을 커밋하거나 취소한 후 QLDB에서 결과를 검색하려고 할 때 발생합니다. 이 문제를 완화하려면 클라이언트가 트랜잭션을 닫기 전에 데이터를 읽어야 합니다.