티스토리 뷰

반응형

PostgreSQL용 JDBC 드라이버를 이용해서 CockroachDB에  Batch Insert/Update (Bulk)하는 경우에

아래와 같은 에러가 종종 발생할 수 있습니다.

org.postgresql.util.PSQLException: ERROR: restart transaction: 

TransactionRetryWithProtoRefreshError: 

TransactionAbortedError(ABORT_REASON_TIMESTAMP_CACHE_REJECTED_POSSIBLE_REPLAY):

CockroachDB Document 중 Transaction부분에 위 에러를 대비해서 에러 발생시 재시도를 수행하는 부분을 넣어 둘 것을 권고하

고 있습니다.

저는 Batch Insert/Update 즉 excuteBatch()후 commit() 수행시 위 에러가 발생하면,

위에서 수행되어야 하는 데이터를 다시 Batch Insert/Update 로직을 3번 수행되도록 하였습니다.

테스트 결과 간혹 위 에러가 발생하는데, 1번 재시도하면 모두 정상적으로 수행되었습니다.

참고로 1번 재시도 마다 Sleep를 5초로 설정했습니다.

Oracle / MongoDB에서는 위와 같은 경우를 겪어보지 못해서 오늘 하루종일 삽질을 했습니다.

 

반응형