seo78200.log
로그인
seo78200.log
로그인
Database - 트랜잭션
Bomin Seo
·
2022년 7월 26일
팔로우
0
데이터베이스
0
동시성 제어 (Concurrency control)
항공기 예약, 은행, 신용 카드 처리 등에서는 많은 사용자들이 동시에 데이터베이스의 서로 다른 부분 또는 동일한 부분을 접근하면서 데이터 베이스를 사용한다 : 동시성
동시에 수행되는 트랜잭션들이 데이터 베이스에 미치는 영향은 이들을 순차적으로 수행하였을 때 데이터 베이스에 미치는 영향과 같도록 보장해야 한다.
다수 사용자가 데이터 베이스를 동시에 접근하도록 허용하면서 일관성을 유지한다.
DBMS의 성능을 높이기 위해 동시에 수행하는 것이 필수적이며, 동시에 수행하는 환경에서 부정확한 결과를 생성할 수 있는 트랜잭션 간의 간섭이 생기지 않도록 해야 한다.
회복 (Recovery)
데이터베이스를 갱신하는 도중에 시스템이 고장나도 일관성을 유지한다.
트랜잭션
데이터 베이스 응용에서 하나의 논리적인 단위를 수행하는 데이터베이스 연산들의 모임
데이터 객체(투플, 릴레이션)들을 접근하고 갱신하는 프로그램 수행 단위
데이터 전체에 대해 수정할 때는 전원의 데이터가 수정되거나 하나의 데이터도 수정되지 않도록 DBMS에서 보장해야 한다
서로 연관된 질의는 실행 도중 데이터베이스가 가동이 멈추면 안된다 >> 트랜잭션 단위
SQL에서는 기본적으로 각각의 SQL문을 하나의 트랜잭션으로 취급하며 2개 이상의 SQL문을 하나의 트랜잭션으로 취급하려면 사용자가 명시적으로 표시해야 한다.
로그
DBMS가 고장난 후 재가동된 후에는 이전의 작업 정보를 알기 위해서 로그(Log)를 유지
Commit이 예약 완료 메시지 보다 먼저 나온다.
Commit이 뒤에 나온다면 DBMS가 고장 후 재가동할 때 오류를 발생시킬 수 있기 때문에
트랜잭션의 특성 (ACID 특성)
원자성(Atomicity) : All or nothing
한 트랜잭션 내의 모든 연산들이 완전히 수행되거나 전혀 수행되지 않음을 의미한다.
DBMS의 회복 모듈은 시스템이 다운되는 경우 부분적으로 데이터 베이스를 갱신한 트랜잭션의 영향을 취소함으로써 트랜잭션의 원자성을 보장한다
완료된 트랜잭션이 갱신한 사항은 트랜잭션의 영향을 재수행함으로써 트랜잭션의 원자성을 보장한다.
일관성(Consistency)
어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에 데이터베이스는 또 다른 일관된 상태를 가진다.
트랜잭션이 수행되는 도중에는 일시적으로 일관된 상태를 가지지 않을 수 있다.
고립성(Isolation)
한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에는 갱신 중인 데이터를 다른 트랜잭션이 접근하지 못하도록 해야 한다.
다수의 트랜잭션들이 동시에 수행되더라도 결과는 어떤 순서에 따라 트랜잭션들을 하나씩 차례대로 수행한 결과와 같아야 한다.
DBMS의 동시성 제어 모듈이 고립성을 보장한다.
DBMS는 응용들의 요구사항에 따라 다양한 고립 수준을 제공한다.
지속성(Durability)
트랜잭션이 완료되면 트랜잭션이 갱신한 것은 후에 시스템이 고장나더라도 손실되지 않는다.
완료(commit)된 트랜잭션의 효과는 시스템이 고장난 경우에도 데이터 베이스에 반영된다.
DBMS의 회복 모듈은 시스템이 다운되는 경우에도 트랜잭션의 지속성을 보장한다.
트랜잭션의 완료(Commit)
트랜잭션에서 변경하려는 내용이 완전하게 반영된다.
SQL 구문상으로 COMMIT WORK
트랜잭션의 철회(abort)
트랜잭션이 변경하려는 내용이 데이터베이스에 일부만 반영된 경우에는 원자성을 보장하기 위해서 트랜잭션이 갱신한 사항을 트랜잭션이 수행되기 전의 상태로 되돌린다.
SQL 구문상으로 ROLLBACK WORK
트랜잭션이 성공하지 못하는 원인
시스템(사이트) 고장 : 중앙 처리 장치, 주기억 장치, 전원 공급 장치 등이 고장난 경우
트랜잭션 고장 : 트랜잭션이 수행되는 도중에 철회된 경우
매체 고장 : 디스크 헤드/컨트롤러 등이 고장나서 보조 기억 장치의 전체/일부 내용 지워진 경우
통신 고장
자연적 재해
부주의 또는 고의적인 고장
동시성 제어
스케줄
트랜잭션들을 수행하는 순서
직렬 스케줄(serial schedule)
n개의 트랜잭션이 있을 때 : n!
여러 트랜잭션들의 집합을 한 번에 한 트랜잭션씩 차례대로 수행한다.
비직렬 스케줄(Non - serial schedule)
(n_1+n_2+⋯+n_n )!/(n_1 !n_2 !…n_n !)
여러 트랜잭션들을 동시에 수행한다.
직렬 가능(serializable)
비직렬 스케줄의 결과가 어떤 직렬 스케줄의 수행 결과와 동등하다.
비직렬 스케줄이 직렬 가능 스케줄일 때 올바른 스케줄이라고 판단한다.
Result equivalence : 결과가 같은 값으로 나온다는 것을 의미한다. (우연히 같아질 수 있다)
Conflict equivalence : 데이터를 읽고 쓰는 순서가 동일하다는 것을 의미한다. (주로 사용)
데이터 베이스 연산
Input(X)
데이터 베이스 항목 X를 포함하고 있는 블록을 주기억 장치의 버퍼로 읽어들인다.
Output(X)
데이터 베이스 항목 X를 포함하고 있는 블록을 디스크에 기록한다.
Read_item(X)
주기억 장치 버퍼에서 데이터베이스 항목 X의 값을 프로그램 변수 X로 복사한다.
Write_item(X)
프로그램 변수 X의 값을 주기억 장치 내의 데이터 베이스 항목 X에 기록한다.
동시성 제어를 하지 않고, 다수의 트랜잭션을 동시에 수행할 때 생길 수 있는 문제
갱신 손실 (심각성이 크다)
수행 중인 트랜잭션이 갱신한 내용을 다른 트랜잭션이 덮어씀으로써 갱신이 무효가 되는 것
오손 데이터 읽기
완료되지 않은 트랜잭션이 갱신한 데이터를 읽는 것
반복할 수 없는 읽기 (심각성이 작다)
한 트랜잭션이 동일한 데이터를 두 번 읽을 때 서로 다른 값을 읽는 것
Locking
데이터 항목을 로킹하는 개념은 동시에 수행되는 트랜잭션들의 동시성을 제어하기 위해서 가장 널리 사용되는 기법
Lock는 데이터베이스 내의 각 데이터 항목과 연관된 하나의 변수
각 트랜잭션이 수행을 시작하여 데이터 항목을 접근할 때마다 요청한 로크에 관한 정보는 로크 테이블 등에 유지한다.
트랜잭션에서 데이터 항목을 접근할 때 로크를 요청하고, 접근을 끝낸 후에 로크를 해제
- 갱신 목적 접근 : 독점 로크(X-lock, eXclusive lock)를 요청함
- 판독(읽기) 목적 접근 : 공유 로크(S-LOCK, Shared lock)를 요청함
2단계 로킹 프로토콜
로크를 요청하는 것과 해제하는 것이 2단계로 이루어진다.
로크 확장 단계가 지난 후에 로크 수축 단계에 들어간다.
로크를 한 개라도 해제하면 로크 수축 단계에 들어간다.
로크 확장 단계 (1단계)
로크 확장 단계에서는 트랜잭션이 데이터 항목에 대하여 새로운 로크를 요청할 수 있지만 보유하고 있던 로크를 하나라도 해제할 수 없다
로크 수축 단계 (2단계)
로크 수축 단계에서는 보유하고 있던 로크를 해제할 순 있지만, 새로운 로크 요청 불가
로크를 조금씩 해제할 수도 있고, 트랜잭션 완료 후 한 번에 해제할 수도 있다.
일반적으로 한 번에 해제하는 방식이 사용된다.
로크 포인트
한 트랜잭션에서 필요로 하는 모든 로크를 걸어 놓은 시점
데드록(deadlock)
2단계 로킹 프로토콜에서는 데드록이 발생할 수 있다.
데드록은 두 개 이상의 트랜잭션들이 서로 상대방이 보유하고 있는 로크를 요청하면서 기다리고 있는 상태
데드록을 해결하기 위해서는 데드록을 방지하는 기법이나, 데드록을 탐지하고 희생자(철회 비용이 적은 트랜잭션)를 선정하여 데드록을 푸는 기법 등을 사용한다.
로크 요청 그래프(방향 그래프)에서 사이클이 존재하면 데드록이 존재하는 것
다중 로크 단위(multiple granularity)
소수의 투플을 접근하는 데이터베이스 응용에서는 투플 단위로 로크를 해도 로크 테이블을 다루는 시간이 오래 걸리지 않는다.
트랜잭션들이 많은 투플을 접근하는 데이터베이스 응용에서 투플 단위로만 로크를 한다면 로크 테이블에서 로크 층들을 검사하고, 로크 정보를 기록하는 시간이 오래 걸린다.
트랜잭션이 접근하는 투플의 수에 따라 로크를 하는 데이터 항목의 단위를 구분해야 한다.
한 트랜잭션에서 로크할 수 있는 데이터 항목이 2가지 이상 있으면 다중 로크 단위
로크할 수 있는 단위 : 데이터베이스, 릴레이션, 디스크 블록, 투플 등
일반적으로 DBMS는 각 트랜잭션에서 접근하는 투플 수에 따라 자동적으로 로크 단위 조정
로크 단위가 작을수록 로킹 오버헤드가 증가하며 동시성의 정도도 증가한다.
Intension lock
X, S 로크 외에도 IX, IS 로크를 사용함으로써 하위 노드에 로크를 걸 경우 영향을 받는 노드에 IX/IS 로크를 요청하고 로크가 허용되면 해당 노드에 X/S 로크를 건다.
팬텀 문제
SELECT문이 실행되고 질의 결과를 받은 후 INSERT로 새로운 데이터가 삽입된 상황에서 다시 SELECT문을 실행하면 첫번째 SELECT문에서 등장하지 않았던 새로운 데이터(팬텀)이 등장하는 문제
Bomin Seo
KHU, SWCON
팔로우
이전 포스트
Database - 함수적 종속성
다음 포스트
Database - 회복
0개의 댓글
댓글 작성