격리 수준은 데이터를 읽고 쓰는 동시 사용자들의 동작을 결정하는 역할을 한다.
읽기 작업이란, 기본적으로 공유 잠금을 이용해서 데이터를 조회(SELECT)하는 모든 구문을 말한다.
쓰기 작업이란, 테이블에 대해 변경(INSERT,UPDATE,DELETE)을 하며
배타적 잠금을 필요로 하는 모든 구문을 말한다.
쓰기 작업에 대한 동작에서 필요로 하는 잠금과 잠금 지속 시간 등에 대해서는 조절을 할 수 없다.
하지만, 읽기 작업에 대해서는 조절이 가능하다.
또한 읽기 작업의 동작을 조절하게 되면 쓰기 동작에도 간접적인 영향을 미칠 수 있다.
이러한 작업을 격리 수준의 설정을 통해 할 수 있다.
격리 수준 설정은 세션 옵션을 이용해서 세션 수준에서 할 수도 있고,
테이블 힌트를 이용해서 쿼리 수준에서 할 수도 있다.
SQL Server에서는 기본적으로
"비관적 동시성(pessimistic concurrency)"을 기반으로 하는 네 가지 형태의 격리 수준을 제공한다
1) READ UNCOMMITED
2) READ COMMITED(On-premises SQL Server의 기본값 )
3) REPEATABLE READ
4) SERIALIZABLE
또한 SQL Server 에서는
"낙관적 동시성(optimistic concurrency)"을 기반으로 하는 두 가지 격리 수준도 제공하고 있다.
1) SNAPSHOT
2)READ COMMITTED SNAPSHOT
다음과 같은 명령을 통해 세션 전체에 대한 격리 수준을 설정할 수 있다.
SET TRANSACTION ISOLATION LEVEL <격리수준 이름>
SELECT ... FROM <table> WITH(<격리수준 이름>)
세션 옵션에서는 격리 수준의 이름이 REPEATABLE READ 와 같이
하나 이상의 단어로 구성되어 있는 경우에 중간에 공백을 입력해줘야한다.
하지만, 쿼리 힌트의 경우 WITH(REPEATABLEREAD) 와 같이 공백을 입력하지 않는다.
또한, 테이블 힌트로 사용하는 격리 수준 이름 중에는 동의어를 가지는 것도 있다.
예를들어, NOLOCK 은 READ UNCOMMITED 대한 동의어이며,
HOLDLOCK은 SERIALIZABLE 에 대한 동의어다.
'DB ARCHITECTURE' 카테고리의 다른 글
[MSSQL] 격리수준-낙관적 동시성 (0) | 2021.12.16 |
---|---|
[MSSQL] 격리수준 - 비관적 동시성 (0) | 2021.12.16 |
[MSSQL] LOCK (0) | 2021.12.16 |
트랜잭션의 정의 및 동작 원리 (0) | 2021.12.16 |
SQL-SERVER SCHEDULER : sqlserver 스케쥴러(2) (7) | 2021.12.15 |