데이터베이스 트 랜 잭 션 및 격 리 등급 상세 설명

7613 단어 데이터 뱅 크
원문http://blog.csdn.net/llmlx/article/details/2282978
 
트 랜 잭 션 (transaction) 은 데이터베이스 관리 시스템 의 실행 단위 로 데이터베이스 작업 (예 를 들 어 Select 작업) 또는 작업 시퀀스 일 수 있 습 니 다.사무 ACID 속성, 즉 원자 성 (Atomicity), 일치 성 (Consistency), 격 리 성 (Isolation), 지속 성 (Durability).
원자 성: 모든 작업 이 실행 되 거나 실행 되 지 않도록 합 니 다.예 를 들 어 이체 업 무 를 수행 하거나 이체 에 성공 하거나 실패 하 는 것 이다.성공 하면 금액 이 계좌 에서 목적 계좌 로 이체 되 고 두 계좌 금액 에 상응하는 변화 가 발생 한다.실패 하면 두 계좌 의 금액 은 변 하지 않 습 니 다.계좌 이체 로 돈 을 공제 하고 목적 계 좌 는 돈 을 받 지 못 한 경 우 는 없 을 것 이다.
일치 성: 데이터 베 이 스 는 데이터 의 일치 성 을 유지 하도록 보장 합 니 다. 업무 수행 전에 일치 하고 업무 수행 후에 도 일치 합 니 다. 업무 성공 여부 에 관 계 없 이.위의 예 와 같이 이체 전과 그 후의 데이터 베 이 스 는 모두 데이터 상의 일치 성 을 유지한다.
격 리 성: 여러 개의 사무 가 동시에 실 행 될 경우 결 과 는 여러 개의 사무 직렬 실행 효과 와 같 아야 합 니 다.분명히 가장 간단 한 격 리 는 모든 업 무 를 직렬 로 수행 하 는 것 이다. 먼저 실행 하고 한 업 무 를 다 수행 해 야 다음 업 무 를 수행 할 수 있다.그러나 이러한 데이터 베 이 스 는 효율 이 떨어진다. 예 를 들 어 두 개의 서로 다른 사 무 는 같은 데 이 터 를 읽 을 뿐 동시에 진행 할 수 있다.병발 집행 을 통제 하기 위해 서 는 격 리 단계 가 다르다.상세 하 게 소개 하 겠 습 니 다.
지속 성: 지속 성 은 사물 조작 이 완 료 된 후에 데이터 베이스 에 미 치 는 영향 이 지속 적 이라는 것 을 나타 낸다. 데이터 베이스 가 고장 으로 인해 파괴 되 더 라 도 데이터 베 이 스 는 회복 할 수 있어 야 한다.일반적인 실현 방식 은 로 그 를 사용 하 는 것 이다.
 
트 랜 잭 션 격 리 단계 (transaction isolation levels): 격 리 단 계 는 트 랜 잭 션 병행 제어 등급 입 니 다.ANSI/ ISO SQL 은 직렬 화 (SERIALIZABLE), 중복 읽 기 (REPEATABLE READ), 읽 기 제출 (READ COMMITED), 읽 기 미 제출 (READ UNCOMMITED) 네 단계 로 나 뉜 다.격 리 단 계 를 실현 하기 위해 서 는 보통 데이터 베 이 스 를 잠 금 (Lock) 으로 사용 합 니 다.일반적으로 프로 그래 밍 을 할 때 격 리 등급 만 설정 하고 구체 적 으로 어떤 자 물 쇠 를 사용 하 는 지 는 데이터베이스 에 의 해 설정 된다.먼저 네 가지 등급 을 소개 한 다음 에 다음 세 가지 등급 (중복 읽 기, 읽 기, 제출 하지 않 음) 에서 발생 하 는 병발 문 제 를 예 로 들 어 설명 한다.
직렬 화 (SERIALIZABLE): 모든 사 무 를 하나씩 직렬 로 실행 하면 환 독 (phantom reads) 을 피 할 수 있 습 니 다.잠 금 을 기반 으로 병행 통 제 를 실현 하 는 데이터 베이스 에 있어 직렬 화 는 실행 범위 에서 조회 (예 를 들 어 10 ~ 30 사이 의 사용 자 를 선택) 할 때 범위 잠 금 (range lock) 을 가 져 와 야 합 니 다.잠 금 을 기반 으로 병행 통 제 를 실현 하 는 데이터 베이스 가 아니라면 직렬 작업 을 위반 하 는 사무 가 있 는 지 확인 할 때 이 사 무 를 되 돌려 야 합 니 다.
반복 읽 기 가능 (REPEATABLE READ): Select 에서 가 져 온 모든 데 이 터 를 수정 할 수 없습니다. 그러면 한 업무 의 전후 읽 기 데이터 가 일치 하지 않 는 상황 을 피 할 수 있 습 니 다.그러나 환 독 을 제어 할 방법 이 없다. 이 럴 때 다른 사 무 는 선택 한 데 이 터 를 변경 할 수 없 지만 데 이 터 를 추가 할 수 있다. 왜냐하면 이전 사 무 는 범위 잠 금 이 없 기 때문이다.
제출 한 읽 기 (READ COMMITED): 읽 힌 데 이 터 는 다른 사무 에서 수정 할 수 있 습 니 다.이렇게 하면 중복 읽 을 수 없 게 될 수도 있다.즉, 업무 가 데 이 터 를 읽 을 때 읽 기 자 물 쇠 를 가 져 오지 만 읽 은 후에 바로 방출 (업무 가 끝 날 때 까지 기다 릴 필요 가 없다) 하고 자 물 쇠 를 쓰 는 것 은 업무 가 제출 된 후에 방출 된다.읽 기 자 물 쇠 를 풀 면 다른 것 에 의 해 데 이 터 를 수정 할 수 있 습 니 다.이 등급 도 SQL Server 의 기본 격 리 등급 이다.
읽 기 미 제출 (READ UNCOMMITED): 이것 은 가장 낮은 격 리 등급 입 니 다. 제출 하지 않 은 데 이 터 를 다른 사무 에서 볼 수 있 도록 합 니 다.이런 등급 은 더러 운 독 서 를 초래 할 수 있다.
 
       예: 다음 세 가지 격 리 등급 에 대응 하 는 병발 문 제 를 살 펴 보 자.두 가지 일이 있다 고 가정 해 봐.트 랜 잭 션 1 은 조회 1 을 실행 한 다음 트 랜 잭 션 2 는 조회 2 를 실행 한 다음 제출 하고 다음 트 랜 잭 션 1 의 조회 1 은 다시 실행 합 니 다.조 회 는 다음 표 에 근거 하여 진행 된다.
users
id
name
age
1
Joe
20
2
Jill
25
반복 읽 기 가능 (환 독, phantom reads)
한 업무 에서 한 번 씩 같은 조 회 를 실 행 했 지만 돌아 오 는 결과 집 은 달 랐 다.이러한 상황 은 Select 작업 을 수행 할 때 범위 잠 금 (Range Lock) 을 가 져 오지 않 아 다른 업무 에 도 새로운 데 이 터 를 삽입 할 수 있 기 때문이다.
Transaction 1
Transaction 2
/* Query 1 */
SELECT * FROM users
WHERE age BETWEEN 10 AND 30;

 
 
/* Query 2 */
INSERT INTO users VALUES ( 3, 'Bob', 27 );
COMMIT;
/* Query 1 */
SELECT * FROM users
WHERE age BETWEEN 10 AND 30;

 
transaction 1 대 같은 검색 어 (Query 1) 를 두 번 실 행 했 습 니 다.더 높 은 등급 의 격 리 등급 (즉 직렬 화) 을 사용한다 면 앞 뒤 두 번 의 조 회 는 같은 결과 집합 으로 돌아 가 야 한다.그러나 중복 읽 기 격 리 등급 에 서 는 앞 뒤 두 번 의 결과 집 이 다르다.그런데 왜 중복 읽 기 등급 이 라 고 하 죠?그것 은 이 등급 이 아래 의 중복 읽 을 수 없 는 문 제 를 해 결 했 기 때문이다.
제출 한 읽 기 (중복 읽 기 불가, - repeatable reads 없 음)
잠 금 으로 병행 통 제 를 실현 하 는 데이터베이스 시스템 에서 중복 읽 을 수 없 는 것 은 Select 작업 을 수행 할 때 잠 금 (read lock) 을 추가 하지 않 았 기 때 문 입 니 다.
Transaction 1
Transaction 2
/* Query 1 */
SELECT * FROM users WHERE id = 1;

 
 
/* Query 2 */
UPDATE users SET age = 21 WHERE id = 1;
COMMIT; 
/* Query 1 */
SELECT * FROM users WHERE id = 1;

 
이 예 에서 Transaction 2 가 제출 되 었 기 때문에 Transaction 1 은 두 번 째 로 서로 다른 age 값 을 가 져 옵 니 다. SERIALIZABLE 과 REPEATABLE READ 격 리 단계 에서 데이터 베 이 스 는 같은 값 으로 돌아 가 야 합 니 다.READ COMMITTED 와 READ UNCOMMITTED 단계 에서 데이터 베 이 스 는 업 데 이 트 된 값 을 되 돌려 줍 니 다.이렇게 해서 중복 읽 을 수 없 는 것 이 나 타 났 다.
읽 기 미 제출 (더러 운 읽 기, 더러 운 읽 기)
한 트 랜 잭 션 2 가 다른 트 랜 잭 션 1 의 수 정 된 값 을 읽 었 지만 마지막 트 랜 잭 션 1 이 굴 러 가면 트 랜 잭 션 2 는 더러 운 데 이 터 를 읽 습 니 다. 이것 이 바로 더러 운 읽 기 입 니 다.제출 되 지 않 은 업 데 이 트 를 읽 을 수 있 도록 하 는 경우 가 발생 합 니 다.
Transaction 1
Transaction 2
/* Query 1 */
SELECT * FROM users WHERE id = 1;

 
 
/* Query 2 */
UPDATE users SET age = 21 WHERE id = 1;
/* Query 1 */
SELECT * FROM users WHERE id = 1;

 
   

RollBack
 
위 와 같이 아래 표 까지 기다 릴 수 있 습 니 다.
격 리 등급
더 럽 게 읽다
반복 해서 읽 을 수 없다
환독 하 다
읽 기 미 제출
YES
YES
YES
읽 기 이미 제출 됨
NO
YES
YES
반복 읽 기 가능
NO
NO
YES
직렬 화
NO
NO
NO
 
  참고:
Isolation (database systems):http://en.wikipedia.org/wiki/Isolation_%28computer_science%29

좋은 웹페이지 즐겨찾기