서론
- 오늘은 MySQL의 읽기 전용 트랜잭션 기능에 대해 정리해 보겠습니다.
SELECT 쿼리만 실행 가능하다.
- 아래와 같이 insert 쿼리를 실행하면 에러가 발생합니다.
트랜잭션 ID를 부여하지 않는다. (InnoDB 기준)
- 트랜잭션 id는 데이터 변경(insert, update, delete)하거나 Lock을 사용하는 트랜잭션에만 필요하므로 읽기 전용 트랜잭션은 트랜잭션 id를 부여할 필요가 없기 때문입니다.
- 따라서 읽기 전용 트랜잭션은 트랜잭션 ID가 부여되지 않아서
트랜잭션 ID 설정에 대한 오버헤드를 아낄 수 있습니다.
마무리
- 추가로 해당 블로그처럼 Master - Slave 구조를 적용하여 @Transactional(readOnly = true)인 경우 Slave DB에 접근하고 @Transactional(readOnly = false)인 경우 Master DB에 접근하도록 구현할 수 있다고 합니다.
Reference
https://dev.mysql.com/doc/refman/8.0/en/innodb-performance-ro-txn.html
https://k3068.tistory.com/102