DB/경험 공유

[DB] 에러 발생시 대응 시나리오

yubi5050 2022. 8. 10. 16:57

과도한 트래픽 대응

기존에 단일 DB 였다면, 마스터/슬레이브 모델 (=Replica)을 사용해 트래픽 분산 

  • 1대의 Read/Write 마스터 DB와 해당 DB를 복제하는 다수의 Slave DB 를 생성하여 트래픽 분산

 

동시성 이슈 (Concurrency Issue)

동시성 이슈란 : 여러 스레드가 동시에 같은 인스턴스의 필드 값을 변경 하면서 발생하는 문제

예시) Read & Update를 가진 여러 Transaction 요청이 동시에 들어올 때 transcation 1의 Update(+1)이 완료 되지 않은채 transaction 2의 Update(+1)가 요청 되어 정상적으로 값 변경이 안된 상황

  • 1) transaction 격리 수준 직접 수정 : READ COMMITTED => REPEATABLE READ
  • 2) Django의 select for update (=row lock을 제어하는 방식) : DBMS 전체(or table) lock 보단, 좁은 범위에 lock을 사용하여 성능 하향을 최소화
  • 3) redis : aplication단에서 lock을 잡는 방식. redis는 setnx를 지원

 

'DB > 경험 공유' 카테고리의 다른 글

[DB, Django] Migration 이슈 해결 모음  (0) 2023.07.08