• 데드락

    • 디비의 데드락은 둘 이상의 트랜잭션이 서로 잠금을 포기하기를 기다리는 상황(교착상태)
  • 해결방법 : 데드락 탐지

    • timeout
      • 일정시간이후 트랜잭션이 실행 안됬으면 롤백. 직접적으로 탐지하는건 아니고 일정시간 트랜잭션이 실행되지 않음을 교착상태로 정의
        • 장점: 구현 간단, 데드락 빨리 해결 가능
        • 단점: 타임아웃 시간 설정 기준 정하기 어려움. 짧으면 불필요한 중단 가능성 길면 데드락 해결에 오랜시간. 실제 데드락 아닌상황인데도 트랜잭션을 중지할 수도 …
    • wait for graph
      • tx에 대한 대기 그래프 만들고 해당 그래프에 사이클이 발생됨을 주기적으로 검사
      • 대규모 데이터베이스의 경우 모든 tx의 사이클 찾아 데드락 감지하는건 비용이 너무 큼
  • 보통은 timeout, 데드락 방지 방법을 쓴다

해결방법 : 데드락 방지

애초에 최대한 데드락이 일어나지 않게 방지하는 것

  • 격리 수준 변경
    • repeatable read serializable 로 해주는 조치 같은 것
    • serializable 아닌 이상 모든 데드락 제거 불가함
  • 자원 할당 순서 지정
    • 서비스의 논리구조 순서를 바꾸는 것
  • wait-die 방법
    • 타임스탬프 기반으로 오래된 트랜잭션을 좀 더 우선순위 높게 판단해 이에 따라 대기, 강제종료 등 하는 방식을 가진 비선점기법
      • 오래된 tx == 더 작은 타임스탬프 가짐
  • wound - wait
    • 타임스탬프 기반으로 오래된 트랜잭션을 좀 더 우선순위 높게 판단해 이에 따라 대기, 강제종료 등 하는 방식을 가진 선점기법