22-08-14

Yu River·2022년 8월 14일
0

공부 일지

목록 보기
9/28

🗓 22-08-14

SQLP 3과목 이론 복습

SQLP 필기 풀이

[링크]([SQLP필기풀이]7장 LOCK과 트랜잭션 동시성 제어 (1) LOCK)

[SQLP필기풀이]7장 LOCK과 트랜잭션 동시성 제어 (1) LOCK
- 1 ~ 15번

SQLP 필기 풀이

👀 8/13 복기

[1] TX Lock

링크

  • 트랜잭션이 첫 번째 변경을 시작할 때 얻고, 커밋 또는 롤백할 때 해제된다.
  • 변경 중인 레코드(또는 기타 리소스)를 동시에 변경하려는 트랜잭션이 있으면 트랜잭션 Lock(TX Lock)을 사용하여 액세스를 직렬화한다.

오라클에서는 로우 Lock을 로우 단위 Lock과 TX Lock을 조합해서 구현한다.

  1. 로우를 갱신하려면 Undo 세그먼트에서 트랜젝션 슬롯을 할당받고
  2. Enqueue 리소스를 통해 TX Lock을 획득한다.
    • ⭐️TX Lock은 트랜잭션을 시작할 때 한 번만 획득한다.⭐️
  3. insert, update, delete, merge 문장을 통해 갱신하는 각 로우마다 Exclusive 모드로 로우 단위 Lock을 획득한다.

[2] DML문 LOCK 호환성

  • SQL Server는 SELECT 문으로 데이터를 읽을 때 공유 Lock을 사용한다. 공유 Lock끼리는 호환되므로 서로 블로킹 하지 않지만, 공유 Lock은 배타적 Lock과 호환되지 않으므로 서로 불로킹 한다.
  • 테이블에 Unique 인덱스나 제약이 없으면, INSERT 끼리는 서로 블로킹 하지 않는다.
  • 테이블에 Unique 인덱스나 제약이 설정돼 있으면, 같은 값을 동시에 INSERT 하지 못한다.
  • 후행 트랜잭션은 기다렸다가 선행 트랜잭션이 커밋하면 Unique 제약 위반 에러가 발생하고,롤백하면 INSERT를 진행한다.
  • INSERT 중인 데이터를 다른 트랜잭션이 읽거나 변경하거나 삭제하는 작업은 인덱스나 제약 유무에 상관없이 불가능하다.
  • MVCC 모델을 사용하는 오라클은 SELECT문 수행 시 어떤 Lock도 사용하지 않는다.
  • 따라서 DML이 수행 중인 데이터를 어떤 간섭도 받지 않고 읽을 수 있다.
  • 물론, 다른 트랜잭션이 읽고 있는 데이터를 변경할 때도 블로킹은 발생하지 않는다.

[3] 오라클에서의 Serializable 격리성

  • ⭐️오라클에서 SELECT 문으로 데이터를 읽을 때는 Serializable 수준에서도 Lock을 전혀 사용하지 않는다.⭐️
  • ⭐️따라서 트랜잭션 격리성 수준을 상향 조정했다고 해서 Lock 경합이 증가하거나 조회 성능이 느려지지는 않는다.⭐️
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글