목록 보기
데이터가 있었는데요, 아니 없어요
백엔드

데이터가 있었는데요, 아니 없어요

마켓컬리
마켓컬리
2024년 6월 13일

두줄요약

autocommit 비활성화와 MVCC Snapshot 유지로 Master DB 데이터가 간헐적으로 조회되지 않은 원인을 분석했습니다. 외부 조회 메서드에 읽기 전용 트랜잭션을 적용하고 COMMIT 경로를 점검해 해결했습니다.

문제 상황

  • Master DB에 INSERT·복제 완료된 회원 데이터가 특정 Master 세션에서만 간헐적으로 미조회
  • 재요청 뒤 데이터가 조회되는 비일관적 현상

원인 분석

  • hikari.auto-commit=false 환경에서 트랜잭션 없는 사용자 정의 JPA 쿼리 메서드의 COMMIT 미실행
  • REPEATABLE READ의 MVCC 일관 읽기로 기존 Snapshot 유지
  • open-in-view=true와 하위 @Transactional(readOnly=true)의 COMMIT 조합으로 Connection 종료 시 ROLLBACK·Snapshot 갱신 누락

해결 방법

  • 외부 조회 메서드에 @Transactional(readOnly=true) 추가로 요청 종료 시 COMMIT 및 최신 Snapshot 확보
  • READ COMMITTED 격리수준 하향과 잠금 읽기는 Phantom Read, 락 경합·데드락 가능성으로 제외
  • 사용자 정의 JPA 쿼리 메서드의 트랜잭션 적용 여부와 HikariCP ROLLBACK 로그 점검

성능/운영 포인트

  • auto-commit=false로 트랜잭션 전후 setAutoCommit 호출 제거
  • API 응답시간 1.5ms 단축 및 응답속도 40% 향상
  • 해당 설정 적용 시 모든 쿼리 경로의 COMMIT 실행 여부 검증 필요

다음 읽기

#MariaDB 주제를 이어서 읽기

데이터가 있었는데요, 아니 없어요

회원 조회가 간헐적으로 실패하던 원인을 COMMIT, MVCC, autocommit 설정 관점에서 분석했습니다. `@Transactional(readOnly = true)`와 open-in-view 영향까지 확인해 조회 흐름을 정리했습니다.

마켓컬리
마켓컬리
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...