기본값으로 REPEATABLE READ와 READ COMMITTED 중 고민입니다
1. 하나의 트랜잭션에서 같은 레코드를 반복적으로 조회하는 로직은 없습니다.
2. 격리수준을 READ COMMITTED로 해야 작동하는 로직이 존재합니다.
3. 서버는 MYSQL InnoDB를 사용하고 있어요
현재는 기본값인 REPEATABLE READ를 그대로 두고 2의 로직만 한단계 낮춰서 사용중입니다.
그런데 REPEATABLE READ 격리수준에서 문제가 생길 로직은 없다고 생각하거든요.
정합성이 중요한 로직은 어차피 잠금을 사용해서 수행합니다.
그렇다면 서비스 전체적인 격리수준을 READ COMMITTED로 낮추고
추후에 REPEATABLE READ가 필요한 로직에만 적용하는 것은 어떤지 고민중입니다(2번 로직이 호출빈도가 높은 편+약간의 DB부담 감소 기대).
혹시 현업 종사하시는분들 중 이런 경우 고려하는 사항들이 있다면 조언부탁드립니다.
read committed 로 내릴 이유는?
REPEATABLE READ를 사용해야할만큼 정합성이 중요한 시스템이 아니고 자주 사용되는 로직이 REPEATABLE READ에서는 제대로 동작하지 않기 때문입니다. READ COMMITTED로 낮출 크리티컬한 이유는 없지만 REPEATABLE READ를 왜 쓰느냐에 대한 이점도 딱히 없는 것 같아서 다른 고려사항이 더 있는지 궁금했어요.
특별한이유가잇는게아니면 mysql repeatable read는 실보다 득이 많은선택임 걍 유지해
조언감사합니다
트랜잭션 걸지마셈
기본값 설정에 대해 고민중입니다
gap lock에 의해서 성능이 저하되고 병목지점이라고 판단될 부분이면 하시고 아니면 납두셔도 큰 문제는 없을듯
감사합니다 딘퐁님
저 딘퐁 아닌데요
이거 고닉고로시 해야할것같아서 대답하기 좀 그렇네
고닉 고로시요??
기본적으로 REPEATABLE READ 쓰면 됨. 알겠지만 그 이하의 격리 수준은 여러 문제점이 있음. 그런데 DB 접근을 ORM으로 하는데, ORM에서 1차 캐시(JPA 영속성 컨텍스트, SQLAlchemy id map 등)를 제공해서 DB 격리 수준과 무관하게 REPEATABLE READ가 보장된다면 내리는 것도 고려해 볼 수 있음. 근데 격리수준 조작해야하는 로직이 일부이고, 성능적인 이유가 아니라면 그냥 특정 로직에서 조절해서 쓰는게 나을 거 같은데