해결된 질문
작성
·
182
·
수정됨
0
https://fromdual.com/innodb-deadlock-detect-rather-hands-off
요 글을 보면 페이스북과 같은 엄청난 동시성 트랜잭션을 처리하는 서버가 아닌이상 웬만하면 innodb_deadlock_detect=on으로 하는걸 권장하는 글로 보입니다.
국내 기업 한정에서 실무에선 off로 하는 경우가 있을까요? 제 생각엔 lock으로 인한 성능상 문제가 있다면 off로 하는 것 보단 아키텍처 관점(레디스 사용 등)에서 성능 문제를 해결하는게 더 좋을것 같아서요..!
저 글과 같이 off로 했을 경우 스레드의 잠금이 계속해서 쌓여서 어느순간 max_connections을 초과하게 되었다는데.. off로 할 경우 innodb_lock_wait_timeout을 줄이고 max_connections을 높여 가면서 성능 테스트를 해서 적절한 값을 세팅하는 것이 좋을까요? off로 했을 경우 성능상 큰 이점이 있는 건지 감이 잘 오지 않습니다 ㅠ
강의 자료 노션에는 practice가 있는데 영상은 없네요 ㅠㅠ 의도하신 건지 궁금합니다아
답변 1
1
안녕하세요~ 질문 남겨주셔서 감사합니다.
맞아요. 말씀 주신 내용처럼 매우 높은 동시성을 요구하는 환경이 아니라면 굳이 innodb_deadlock_detect=on 을 할 필요는 없습니다.
대부분의 국내 환경도 트래픽이 높지는 않아서 마찬가지일거에요. 대안 방법의 예시로 Redis 를 드셨는데 만약 Update 와 Insert 트래픽이 엄청 많은 상황에서는 고려해볼 수 있는 설정일거에요.
2번 질문 같은 경우는 innodb_deadlock_detect=off 로 했을 경우에 데드락 상황이 발생했을 때 감지할 수 있는 방법이 없으니 innodb_lock_wait_timeout 값을 짧게 줘서 성능 테스트를 해야할 것 같아요. 그리고 필요하다면 max_connections 값도 같이 증가시키는 게 좋을 수 있을 것 같습니다. 근데 이건 단순히 임시적인 조취일 수 있으니 문제가 일어났을 때 근본적인 해결을 찾는게 무엇보다 중요할 것 같네요.
원래는 dead_lock detect 상황을 실습해보려고 했는데 제 생각보다 더 많은 트래픽이 필요하더라구요. 그래서 로컬 환경에서는 진행하기가 어려웠어서 실습을 제외했습니다...