DBAtlas · 데이터베이스 운영 아틀라스

225 TransactionTooOld: TransactionTooOld

MongoDB

의미

multi-document 트랜잭션 안에서 명령을 실행했지만, 그 트랜잭션 번호가 서버가 해당 세션에서 본 최신 트랜잭션 번호보다 오래되었다. 즉 더 새로운 트랜잭션이 시작되어 이 이전 트랜잭션은 더 이상 유효하지 않다.

원인

이전 트랜잭션이 완료되기 전에 같은 세션에서 새 트랜잭션이 시작되었거나, 동시성으로 인해 트랜잭션 번호가 순서 없이 증가했다. 보통 세션 객체를 잘못 공유하거나 여러 스레드가 같은 세션을 사용할 때 발생한다.

해결 방법

논리적 트랜잭션마다 세션 수명 주기를 올바르게 관리하고, 세션을 여러 스레드에서 동시에 공유하지 않는다. 드라이버가 권장하는 withTransaction/callback API로 트랜잭션을 실행한다(재시도와 번호 관리를 처리한다). 새 트랜잭션을 시작하기 전에 이전 트랜잭션을 commit/abort로 닫는다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목