[SQL] 락과 데드락

멋쟁이펭귄맨·2021년 8월 1일
0

이 게시글은 패스트캠퍼스의 '데이터베이스와 SQLD 합격패스 Online' 강의를 요약한 내용입니다.


1. 락

  1. 갱신손실 문제를 해결하기위해서는 상대방 트랜잭션이 데이터를 사용하는지 여부를 알 수 있는 규칙이 필요하다.
  2. 락은 데이터가 수정 중이라는 사실을 알리는 방법의 잠금 장치이다.

1.1 락의 유형

  1. 공유락(LS, shared lock)
  • 트랜잭션이 읽기를 할 때 사용하는 락
  1. 배타락(LX, exclusive lock)
  • 트랜잭션이 읽고 쓰기를 할 때 사용하는 락

2. 데드락

  1. 두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상. (교착상태)
  2. 일반적으로 데드락이 발생하면 DBMS는 T1 혹은 T2의 작업 중 하나를 강제로 중지 시킴

3. 트랜잭션 처리 시 주의사항

3.1 데드락을 최소화시키는 DBMS 전반적 대책

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

또한 Auto COMMIT, 긴 트랜잭션 또한 자제하는 것이 좋다.

profile
안녕하세요

0개의 댓글