데드락을 최소화 시키는 DBMS 대책

  • 트랜잭션을 자주 commit
  • 정해진 순서로 테이블에 엑세스
  • 필요 없는 경우에 읽기 잠금 획득 사용을 피함
  • 쿼리에 의한 잠금 범위 좁히거나 더 작은 것으로 함
  • 한 테이블 복수 행을 순서 변경 없이 갱신하면 교착 상태 발생 쉬움
  • 테이블 단위 잠금 획득해 갱신 직렬화


자제해야 하는 트랜잭션 처리

  • Auto Commit
    • 쿼리 단위로 커밋하는 설정
    • 애플리케이션 잠금 실행 시 Commit의 부하가 너무 높음
  • 긴 트랜잭션
    • 데이터베이스 트랜잭션의 동시성이나 자원 유효성 저하
    • 타임아웃 및 교착 상태 발생 가능
    • 대량 처리를 한 개의 트랜잭션이 실행하는 것 지양해야 함
    • 적당한 크기의 트랜잭션으로 나눠서 처리
    • 처리 능력 이상의 트랜잭션 수
    • 트랜잭션의 실행이 다른 트랜잭션의 잠금 때문에 막힐 수 있음
    • 시스템 요건에 따라 동시 실행 커넥션 수 적절히 설정한다.
  • 트랜잭션 관련 설정 확인
    • 시스템 요건 및 애플리케이션 로직에 맞추어 트랜잭션 격리 수준 조정
    • 예상되는 오류에 대처 가능한 형태로 애플리케이션 작성

Tags:

Categories:

Updated:

Leave a comment