@Transactional(readOnly = true)
를 사용하고자 한다면 별도의 커넥션풀을 사용하면 안 되고 wrapper 의 내장 connection pool 만 사용해야한다. 관련해서 문서 잘 읽어봐야함.log_output=FILE
, slow_query=1
(true), long_query_time=1
(1초) 등의 설정을 해서 슬로우 쿼리를 로그로 남긴다.time_zone
값을 Asia/Seoul
로 변경.SELECT @@time_zone; -- Asia/Seoul SELECT NOW(); -- 현재 한국 시간
tx_isolation=REPEATABLE_READ
인 상태인데, MySQL의 mvcc 모델 특성상 REPEATABLE READ 상태에서 일관된 정보를 제공하려고 트랜잭션이 완료될 때 까지 변경 전 데이터를 저장하고, commit이 될 때까지 데이터를 유지한다. 따라서 long query 가 실행되면 변경전 데이터를 저장하는 기간이 계속 길어져 성능저하를 유발한다.SET SESSION aurora_read_replica_read_committed = ON; SET SESSION TRANSACTION isolation level READ committed;
aurora_read_replica_read_committed
는 connection 초기화 시에 해준다. 테스트 결과 이 설정값은 writer 에 할경우에는 아무런 효과가 발생하지 않으므로 reader/writer 구분없이 해줘도 된다.set session transaction isolation level read committed
는 Transaction 설정에서 해주면 될 것으로 보인다. 즉, readOnly=true
인 트랜잭션에 대해서 isolationLevel=READ_COMMITTED
를 하면 될 것으로 보인다.