본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 34일차 (트랜잭션, 동시성 제어, 회복)

오늘 NCS 평가가 있어서, 어제 복습을 못하여서 오늘 올립니다.

트랜잭션, 동시성, 제어, 회복

트랜잭션

트랜잭션의 개념

.- 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위이다.

.- 트랜잭션은 장애 발생 시 데이터를 복구하는 단위가 된다.

.- 트랜잭션은 작업을 서로 분리하는 단위가 된다.

.- 트랜 잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 한다.(all or nothing)

.- 트랜잭션은 데이터베이스에 저장된 테이블을 읽어와 주기억장치 버퍼에 저장하고, 버퍼에

...,저장된 데이터를 수정한 후 최종적으로 데이터베이스에 다시 저장한다.

.- 트랜잭션의 사실적인 종료는 하드디스크(DB)에 기록하는 것이지만, DBMS는 COMMIT

...까지만 수행하고 사용자에게 완료사실을 알린다. 그 후, 하드디스크(DB)에 기록하는 것은

,..DBMS가 알아서 한다. 이렇게 하는 이유는 DBMS가 동시에 많은 트랜잭션을 수행할 때,

...각각의 트랜잭션이 하드디스크에 개별 접근하는 것을 피하고 DBMS가 일괄적으로

...하드디스크에 접근하여 처리함으로써 사용자에게 빠른 응답성을 보장하기 위해서다.

2. 트랜잭션의 성질

.- 트랜잭션은 데이터베이스에 저장된 데이터를 다루며 DBMS에 의해 처리된다.

....반면 프로그램은 파일에 저장된 데이터를 다루며 DBMS 없이 직접 데이터를 처리한다.

.1) 원자성(Atomicity)

..(1) 트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 않아야 한다.

..(2) 트랜잭션의 길이가 길면 트랜잭션의 중간 지점에 수정내용을 반영하는

......SAVEPOINT(저장점)을 만드는데, 트랜잭션이 잘못되어 처음부터 다시 실행해야 할 경우

......트랜잭션의 처음이 아니라 SAVEPOINTᄁᆞ지 돌아가면 트랜잭션 전체가

......ROLLBACK(무효화, 돌아감)되는 것을 막을 수 있다.

.2) 일관성(Consistency)

..(1) 일관성은 테이블이 생성될 때 CREATE 문과 ALTER문의 무결성 제약조건을 통해

.....명시된다.(PK, NOT NULL 등..)

.3) 고립성(Isolation)

..(1) 여러 트랜잭션이 동시에 수행될 때 상호 간섭이나 데이터 충돌이 일어나지 않는 현상

..(2) 동시에 수행되는 트랜잭션이 같은 데이터를 가지고 충돌하지 않도록 제어하는 작업인

.....동시성 제어를 통해 트랜잭션 고립 수준을 결정한다.

.4) 지속성(Durablity)

..(1) 트랜잭션이 정상적으로 완료 혹은 부분완료한 데이터는 반드시 데이터베이스에

.......기록되어야 한다.

..(2) DBMS는 부분완료 상태에서는 작업한 내용을 DB에 반영하고 실패 상태에서는 작업한

...... 내용을 취소한다.

..(3) 부분완료

...,,-트랜잭션 수행은 완료되었지만 변경 내용이 DB에 기록되었는지 확실하지 않은 상태

..(4) 실패

.....- 트랜잭션을 중간에 중단하였거나 부분완료 상태에서 변경 내용을 DB에 저장하지 못한

,,,,,,상태

 

동시성 제어(concurrency control)

상황

트랜잭션1

트랜잭션2

발생문제

동시접근

[상황 1]

읽기

읽기

없음(읽기만 하면 아무 문제가 없음)

허용

[상황 2]

읽기

쓰기

오손 읽기, 반복불가능 읽기, 유령데이터 읽기

허용 혹은 불가선택

[상황 3]

쓰기

쓰기

갱신손실(절대 허용하면 안됨)

허용불가(LOCK을 이용)

갱신손실 문제(lost update)

.1) 두 개의 트랜잭션이 한 개의 데이터를 동시에 갱신할 때 발생한다.

2. 락(lock)

.1) 트랜잭션이 데이터를 읽거나 수정할 때 데이터에 표시하는 잠금장치이다.

,2) 락을 사용하면 데이터에 대한 갱신을 순차적으로 진행할 수 있기 때문에 갱신손실 문제를

....,해결할 수 있다.

.3) 락의 유형

..(1) 락은 트랜잭션이 다루는 데이터를 다른 트랜잭션이 접근하지 못하도록 막아 대기 상태로

.......만든다. 다른 트랜잭션을 대기 상태로 만드는 일은 사용자의 응답시간에 영향을 주기

.......때문에 가능한 최소화해야 한다.

..(2) 트랜잭션이 다루는 데이터는 읽기만 하는 데이터, 읽고 쓰는 데이터, 쓰기만 하는

......데이터가 있다. 이 중에서 읽기만 하는 데이터를 다루는 트랜잭션은 어느정도 허용을

......해도 문제가 없다.

..(3) 공유락(LS, shared lock)

...- 트랜잭션이 읽기를 할 때 사용하는 락

..(4) 배타락(LX, exclusive lock)

...- 읽기/쓰기를 할때 사용하는 락

..(5) 공유락과 배타락 사용 규칙

...① 데이터에 락이 걸려있지 않으면 트랜잭션은 데이터에 락을 걸 수 있다.

...② 트랜잭션이 데이터 X를 읽기만 할 경우 LS(X)를 요청하고, 읽거나 쓰기를 할 경우

.....,LX(X)를 요청한다.

...③ 다른 트랜잭션이 데이터에 LS(X)를 걸어두면, LS(X)의 요청은 허용하고 LX(X)는

.....허용하지 않는다.

...④ 다른 트랜잭션이 데이터에 LX(X)를 걸어두면, LS(X)와 LX(X) 모두 허용하지 않는다.

...⑤ 트랜잭션이 락을 허용받지 못하면 대기상태가 된다.

 

LS 상태

LX 상태

LS 요청

허용

대기

LX 요청

대기

대기

..(6) 2단계 락킹

...- 락을 걸고 해제하는 시점에 제한을 두지 않으면 두 개의 트랜잭션이 동시에 실행될 때

.....데이터의 일관성이 깨질 수 있다.

....① 확장단계

......- 트랜잭션이 필요한 락을 획득하는 단계로 이 단계에서는 이미 획득한 락을 해제하지

.........않는다.

....② 수축단계

......- 트랜잭션이 락을 해제하는 단계로, 이 단계에서는 새로운 락을 획득하지 않는다.

 

트랜잭션 고립수준

트랜잭션 동시 시행 문제

.1) 오손 읽기(dirty read)

..(1) 트랜잭션 1이 쓰기 작업을 하는 트랜잭션 2가 작업한 중간 데이터를 읽을 때 생기는 문제

..(2) 작업 중인 T2가 어ᄄᅠᆫ 이유로 작업을 철회(ROLLBACK) 할 때 T1은 무효가 된 데이터를

......읽게 되고 잘못된 결과를 도출한다.

.2) 반복불가능 읽기(non-repeatable read)

..(1) T1이 데이터를 읽고 T2가 데이터를 쓰고 (갱신,UPDATE), T1이 다시 한 번 데이터를

.....읽을 때 생기는 문제

..(2) 즉, T1이 읽기 작업을 다시 한번 반복할 경우 이전의 결과가 반복되지 않는 현상을

......반복불가능 읽기라고 한다.

.3) 유령데이터 읽기(phantom read)

..(1) T1이 데이터를 읽고 T2가 데이터를 쓰고(삽입, INSERT), T1이 다시 한 번 데이터를

......읽을 때 생기는 문제

..(2) T1이 읽기 작업을 다시 한 번 반복할 경우 이전에 없던 데이터(유령 데이터)가 나타나는 현상

2. 트랜잭션 고립 수준 명령어

고립수준

오손 읽기

반복불가능 읽기

유령데이터 읽기

READ UNCOMMITTED

가능

가능

가능

READ COMMITED

불가능

가능

가능

REPEATABLE READ

불가능

불가능

가능

SERIALIZABLE

불가능

불가능

불가능

 

회복

트랜잭션과 회복

.1) 트랜잭션은 데이터베이스 회복의 단위이다.

.2) 트랜잭션은 데이터의 변경 내용을 한순간에 모두 데이터베이스에 기록하지 않는다.

.3) 일단 변경한 내용(버퍼)을 로그(임시 디스크)에 기록한 후 DB에 반영한다.

.4) DBMS의 회복관리자는 트랜잭션의 ACID 성질 중 원자성과 지속성을 보장하여 장애로부터

....DB를 보호한다.

.5) 장애가 발생하면 로그의 내용을 참조하여 트랜잭션의 변경 내용을 모두 반영하거나

....아니면 아예 반영하지 않는 방법으로 원자성을 보장한다.

.6) 지속성도 마찬가지다. 트랜잭션이 일단 COMMIT한 내용은 로그를 이용하여 반드시 DB에

....기록한다.

2. 로그파일

.1) 로그 파일은 트랜잭션이 반영한 모든 데이터의 변경사항을 데이터베이스에 기록하기 전에

....미리 기록해두는 별도의 DB다.

.2) 로그 파일에 저장된 로그의 구조는 다음과 같다.

☞ <트랜잭션번호, 로그타입, 데이터항목 이름, 수정 전 값, 수정 후 값>

3. 로그파일을 이용한 회복

.1) 트랜잭션의 재실행(REDO)

..(1) COMMIT 연산이 로그에 있다는 것은 트랜잭션이 모두 완료되었다는 의미이다. 다만,

.....변경 내용이 버퍼에서 DB에 기록되지 않았을 가능성이 있다. 따라서 로그를 보면서

.....트랜잭션이 변경한 내용을 DB에 다시 기록하는 과정이 필요하다. 이 과정을 REDO라고

.....한다.

.2) 트랜잭션의 취소(UNDO)

..(1) COMMIT 연산이 로그에 보이지 않는다는 것은 트랜잭션이 완료되지 못했다는 의미로,

......트랜잭션이 한 일을 모두 취소해야 한다. 이 경우 완료하지 못했지만 버퍼의 변경 내용이

......DB에 기록되어 있을 가능성이 있기 때문에 로그를 보면서 트랜잭션이 변경한 내용을

......DB에서 원상복구 시켜야 한다. 이 과정을 UNDO라고 한다.

.3) 즉시갱신

..(1) ‘버퍼→로그파일’, ‘버퍼→DB’ 작업이 부분완료 전에 동시에 진행될 수 있으며,

......부분완료 전에 버퍼의 갱신 데이터는 로그에 기록이 진행이 된 상태이며 부분완료 전에

.......버퍼의 일부 내용이 실제 DB에 반영이 될 수 있다.

.4) 지연갱신

..(1) ‘버퍼→로그파일’이 모두 끝난 후 부분완료를 하고 ‘버퍼→DB’작업을 진행하는 방법

..(2) 부분완료 전에는 갱신 내용이 실제 DB에 반영이 되지 않은 상태이다.

4. 체크포인트를 이용한 회복

.1) 체크포인트 이전에 COMMIT 기록이 있는 트랜잭션의 경우

..(1) 아무 작업이 필요없다. 로그에 체크포인트가 나타나는 시점은 이미 변경 내용이

......체크포인트에 의하여 DB에 모두 기록된 후이기 때문이다.(즉시갱신, 지연갱신)

.2) 체크포인트 이후에 COMMIT 기록이 있는 트랜잭션의 경우

..(1) REDO(T)를 진행한다. 체크포인트 이후에 변경 내용이 DB에 반영되지 않았을 가능성이

.....있으므로 REDO를 진행한다(즉시갱신, 지연갱신)

.3) 체크포인트 이후에 COMMIT 기록이 없는 트랜잭션의 경우

..(1) 즉시갱신 방법을 사용했다면 UNDO(T)를 진행한다.

..(2) 지연갱신 방법을 사용했다면 아무것도 할 필요가 없다.