juuuding
[데이터베이스] CH 9 트랜잭션 (1) 본문
■ 트랜잭션 (transaction)
- 데이터베이스를 수천명 이상의 사용자들이 동시에 접근
- 많은 사용자들이 서로 다른 부분, 같은 부분을 접근하면서 데이터베이스를 사용
- 동시성 제어 (concurrency control)
√ 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향은 이들을 순차적으로 수행하였을 때 데이터베이스에 미치는 영향과 같도록 보장
√ 다수 사용자가 데이터베이스를 동시에 접근하도록 허용하면서 데이터베이스의 일관성을 유지함
- 회복 (recovery)
√ 데이터베이스를 갱신하는 도중에 시스템이 고장 나도 데이터베이스의 일관성을 유지
트랜잭션 개요
* 두개의 UPDATE문을 수행하여할 때, 첫 UPDATE문을 수행한 후 두 번째 UPDATE문을 수행하기 전에 컴퓨터 시스템이 다운된다면? → 둘 다 완전히 수행되거나 어떠한 것도 수행되지 않도록, 즉 하나의 트랜잭션(단위)처럼 DBMS가 보장해야함
* 기본적으로 각각의 SQL문이 하나의 트랜잭션으로 취급됨
* 두 개 이상의 SQL문들을 하나의 트랜잭션으로 취급하려면 사용자가 이를 명시적으로 표시해야함
1. 트랜잭션의 특성 (ACID 특성) - (DBMS 기능과의 관계)
(1) 원자성 (Atomicity) - 회복
- 한 트랜잭션 내의 모든 연산들이 완전히 수행되거나 전혀 수행되지 않음
- DBMS 회복 모듈은 시스템이 다운되는 경우에, 부분적으로 데이터베이스를 갱신한 트랜잭션의 영향을 취소함으로써 트랜잭션의 원자성을 보장
- 완료된 트랜잭션이 갱신한 사항은 트랜잭션의 영향을 재수행함으로써 트랜잭션의 원자성을 보장
(2) 일관성 (Consistency) - 무결성 제약조건, 동시성 제어
- 어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에 데이터베이스는 또 다른 일관된 상태를 가짐
- 트랜잭션이 수행되는 도중에는 데이터베이스가 일시적으로 일관된 상태를 갖지 않을 수 있음
(3) 고립성 (Isoloation) - 동시성 제어
- 한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에는 갱신 중인 데이터를 다른 트랜잭션들이 접근하지 못하도록 해야 함
- 다수의 트랜잭션들이 동시에 수행되더라도 그 결과는 어떤 순서에 따라 트랜잭션들을 하나씩 차례대로 수행한 결과와 같아야 함
- DBMS의 동시성 제어 모듈이 트랜잭션의 고립성을 보장
- DBMS는 응용들의 요구사항에 따라 다양한 고립 수준(isolation level)을 제공함
(4) 지속성 (Durability) - 회복
- 일단 한 트랜잭션이 완료되면 이 트랜잭션이 갱신한 것은 그 후에 시스템에 고장이 발생하더라도 손실되지 않음
- 완료된 트랜잭션의 효과는 시스템이 고장난 경우에도 데이터베이스에 반영됨
- DBMS의 회복 모듈은 시스템이 다운되는 경우에도 트랜잭션 지속성을 보장함
2. 트랜잭션의 완료 (commit)
- 트랜잭션에서 변경하려는 내용이 데이터베이스에 완전하게 반영됨
- SQL 구문상으로 COMMIT WORK
3. 트랜잭션의 철회 (abort)
- 트랜잭션에서 변경하려는 내용이 데이터베이스에 일부만 반영된 경우에는 원자성을 보장하기 위해서, 트랜잭션이 갱신한 사항을 트랜잭션이 수행되기 전의 상태로 되돌림
- SQL 구문상으로 ROLLBACK WORK
4. 트랜잭션이 성공하지 못하는 원인
√ 시스템(사이트) 고장
- 중앙 처리 장치, 주기억 장치, 전원 공급 장치 등이 고장남
√ 트랜잭션 고장
- 트랜잭션 고장은 트랜잭션이 수행되는 도중에 철회됨
√ 매체 고장
- 디스크 헤드, 디스크 컨트롤러 등이 고장 나서 보조 기억 장치의 전부 또는 일부 내용이 지워짐
√ 통신 고장
√ 자연적 재해
√ 부주의 또는 고의적인 고장
동시성 제어
1. 동시성 제어
- 대부분의 DBMS들은 다수 사용자용
- 여러 사용자들이 동시에 동일한 테이블을 접근하기도 함
- DBMS의 성능을 높이기 위해 여러 사용자의 질의나 프로그램들을 동시에 수행하는 것이 필수적
- 동시성 제어 기법은 여러 사용자들이 다수의 트랜잭션들을 동시에 수행하는 환경에서 부정확한 결과를 생성할 수 있는, 트랜잭션들 간의 간섭이 생기지 않도록 함
2. 직렬 스케줄 (serial schedule)
- 여러 트랜잭션들의 집합을 한 번에 한 트랜잭션씩 차례대로 수행함
3. 비직렬 스케줄 (non-serial schedule)
- 여러 트랜잭션들을 동시에 수행함
4. 직렬가능(serializable)
- 비직렬 스케줄의 결과가 어떤 직렬 스케줄의 수행 결과와 동등함 (여러 트랜잭션들을 동시에 수행하는 결과가 한 트랜잭션씩 차례대로 수행하는 결과와 같음)
5. 데이터베이스 연산
- Input(X) : 데이터베이스 항목 X를 포함하고 있는 블록을 주기억 장치의 버퍼로 읽어들임
- Output(X) : 데이터베이스 항목 X를 포함하고 있는 블록을 디스크에 기록함
- read_item(X) : 주기억 장치 버퍼에서 데이터베이스 항목 X의 값을 프로그램 변수 X로 복사함
- write_item(X) : 프로그램 변수 X의 값을 주기억 장치 내의 데이터베이스 항목 X에 기록함
6. 동시성 제어를 하지 않고 다수의 트랜잭션을 동시에 수행할 때 생길 수 있는 문제
- 갱신 손실 (lost update): 수행 중인 트랜잭션이 갱신한 내용을 다른 트랜잭션이 덮어 씀으로써 갱신이 무효가 되는 것
- 오손 데이터 읽기 (dirty read): 완료되지 않은 트랜잭션이 갱신한 데이터를 읽는 것
- 반복할 수 없는 읽기 (unrepeatable read): 한 트랜잭션이 동일한 데이터를 두 번 읽을 때 서로 다른 값을 읽는 것
7. 로킹 (locking)
√ 데이터 항목을 로킹하는 개념은 동시에 수행되는 트랜잭션들의 동시성을 제어하기 위해서 널리 사용되는 기법
√ 로크는 데이터베이스 내의 각 데이터 항목과 연관된 하나의 변수
√ 각 트랜잭션이 수행을 시작하여 데이터 항목을 접근할 때마다 요청한 로크에 관한 정보는 로크 테이블 등에 유지됨
- 트랜잭션에서 갱신을 목적으로 데이터 항목을 접근할 때는 독점 로크 (X-lock) 요청
- 트랜잭션에서 읽을 목적으로 데이터 항목을 접근할 때는 공유 로크 (S-lock) 요청
- 트랜잭션이 데이터 항목에 대한 접근을 끝낸 후에 로크를 해제(unlock)함
8. 2단계 로킹 프로토콜 (2-phase locking protocol)
- 로크를 요청하는 것과 로크를 해제하는 것이 2단계로 이루어짐
- 로크 확장 단계가 지난 후에 로크 수축 단계에 들어감
- 일단 로크 한 개라도 해제하면 로크 수축 단계에 들어감
(1) 로크 확장 단계 (1단계)
- 로크 확장 단계에서는 트랜잭션이 데이터 항목에 대하여 새로운 로크를 요청할 수 있지만 보유하고 있던 로크를 하나라도 해제할 수 없음
(2) 로크 수축 단계 (2단계)
- 로크 수축 단계에서는 보유하고 있던 로크를 해제할 수 있지만 새로운 로크를 요청할 수 없음
- 로크 수축 단계에서는 로크를 조금씩 해제할 수도 있고, 트랜잭션이 완료 시점에 이르렀을 때 한꺼번에 모든 로크를 해제할 수도 있음
- 일반적으로 한꺼번에 해제하는 방식이 사용됨
- 로크 포인트(lock point)는 한 트랜잭션에서 필요로 하는 모든 로크를 걸어 놓은 시점
9. 데드록 (deadlock)
- 대부분의 트랜잭션들이 소수의 투플들을 접근하는 데이터베이스 응용에서는 투플 단위로 로크를 해도 로크 테이블을 다루는 시간이 오래 걸리지 않음
- 트랜잭션들이 많은 투플을 접근하는 데이터베이스의 응용에서 투플 단위로만 로크를 한다면 로크 테이블에서 로크 충돌을 검사하고, 로크 정보를 기록하는 시간이 오래 걸림
- 트랜잭션이 접근하는 투플 수에 따라 로크를 하는 데이터 항목 단위를 구분하는 것이 필요함
- 한 트랜잭션에서 로크할 수 있는 데이터 항목이 두 가지 이상 있으면 다중 로크 단위라고 말
- 데이터베이스에서 로크할 수 있는 단위로는 데이터베이스, 릴레이션, 디스크 블록, 투플 등
10. 다중 로크 단위
- 일반적으로 DBMS는 각 트랜잭션에서 접근하는 투플 수에 따라 자동적으로 로크 단위 조정함
- 로크 단위가 작을수록 로킹에 따른 오버헤드가 증가함
- 로크 단위가 작을수록 동시성의 정도는 증가함
11. 팬텀 문제
- 시간 1에 트랜잭션 T1의 SELECT문이 수행되면 1번 부서에 근무하는 사원들의 이름인 박영권, 김상원이 검색됨
- 시간 2에 트랜잭션 T2의 INSERT문이 수행되면 EMPLOYEE 릴레이션에 1번 부서에 근무하는 정희연 투플이 삽입됨
- 시간 3에 트랜잭션 T1의 두 번째 SELECT문이 수행되면 박영권, 김상원, 정희연이 검색됨
∴ 한 트랜잭션 T1에 속한 첫 번째 SELECT문과 두 번째 SELECT 문의 수행 결과가 다르게 나타남 -> "팬텀 문제"
'컴퓨터공학 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] CH 9 트랜잭션 (2) (1) | 2023.05.30 |
---|---|
[데이터베이스] CH 7 릴레이션 정규화 (2) (1) | 2023.05.17 |
[데이터베이스] CH 7 릴레이션 정규화 (1) (1) | 2023.05.17 |
[데이터베이스] CH 6 물리적 데이터베이스 설계 (2) (0) | 2023.05.16 |
[데이터베이스] CH 6 물리적 데이터베이스 설계 (1) (0) | 2023.05.16 |