티스토리 뷰

DB

트랜잭션이란? (feat.TCL)

tioon 2023. 8. 10. 20:15
트랜잭션이란?

   -데이터베이스에 논리적 연산 단위입니다. 트랜잭션은 더이상 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리키며, 무조건 하나 이상의 SQL 문장이 포함됩니다.
즉 트랜잭션은 분할할 수 없는 최소의 단위이고, 한번에 전부 적용하거나, 전부 취소밖에 할 수 없습니다.

 

 

 

트랜잭션의 특징 (ACID)

1.원자성(Atomicity) : 트랜잭션은 중간에 일부분만 수행되어선 안되고 완료(전부 성공) 아니면 실패(전부 실패)만 있어야 합니다.

2.일관성(Consistency) : 트랜잭션이 실행되기 전과 후의 상태가 일관성이 있어야 합니다. 즉 트랜잭션이 진행되는동안 데이터베이스의 정보가 중간에 바뀌면 안됩니다.

3.독립성(Isolation) : 동시에 실행되는 여러개의 트랜잭션은 서로 영향을 주지않고 간섭하지 않아야합니다.

4.지속성(Durability) : 트랜잭션이 성공적으로 완료된 후에는 결과가 영구적으로 저장되어야합니다.

 

 

 

 

트랜잭션 관리
  • 동시성제어 (Concurrecny Control)
    -여러 트랜잭션이 동시에 실행될 때 데이터가 꼬이지 않게 데이터의 일관성을 보장하기 위한 작업입니다.


  • 회복 (Recovery)
    -트랜잭션 실행시 시스템의 장애나 오류가 발생했을 시, 데이터베이스를 안전하고 일관된 상태로 롤백(복구)하는 작업입니다.

  • 트랜잭션 스케줄링 (Transaction Scheduling)
    -여러 트랜잭션들 사이에서 실행 순서를 결정하여 트랜잭션끼리 충돌이 일어나지 않게 하는 작업입니다.
    한 트랜잭션의 처음부터 끝까지 실행하는 직렬화(Serializability), 서로 자원 기다리면 멈추는 데드락(Deadlock)이 있습니다.

 

 

 

 

트랜잭션 상태
  • 수행(Active)
    -트랜잭션이 현재 연산을 실행 중인 상태입니다.

  • 부분 완료(Partially Committed)
    -트랜잭션의 모든문장이 실행되었지만, 아직 커밋은 되지 않은 상태입니다.

  • 완료(Commit)
    -트랜잭션의 모든 문장이 다 실행되고, 커밋까지 완료된 상태입니다.

  • 철회(Aborted)
    -트랜잭션 수행중에 오류가 발생하여 롤백된 상태입니다

 

 

 

 

 

 

 

올바르지 못한 트랜잭션 현상
  • 오손읽기(Dirty Read)
    - 다른 트랜잭션이 WRITE를 한 후 아직 COMMIT을 하지않은 값을 읽는 현상을 뜻합니다.
    이는 만약 해당 트랜잭션이 추후에 ABORT를 할 시에 여러 트랜잭션이 다 ABORT를 해야한다는
    문제가 생겨 연쇄철회문제가 생길 수 있습니다.

  • 갱신손실(Lost Update)
    - 다른 트랜잭션이 WRITE를 한 후 COMMIT을 아직 안한 상태에서  또 다른 트랜잭션이 해당 데이터를 WRITE한 후 바로 COMMIT을 하여 한 트랜잭션에서 WRITE한 값이 덮어씌워져서 사라지는 현상입니다.

  • 반복불가(Unrepeatable Read)
    -한 트랜잭션이 해당 데이터를 여러번 읽을 때, 만약 중간에 다른 트랜잭션에서 데이터 수정을하여 읽은 데이터 값이 달라지는 현상입니다.

 

 

 

 

 

트랜잭션 스케줄링 종류

-트랜잭션 스케줄링에서 가장 중요한 목표는 스케줄의 안정성을 보장하는 것인데, 여러 트랜잭션을 어떻게 동시에 실행할 때 어떻게 안정성을 보장할 것인지를 정합니다. 크게 직렬가능성(Serializability) 관점과 회복가능(Recoverable) 관점이 있습니다.

 

  • 직렬 가능성 관점 스케줄

  • 직렬 스케줄
    -모든 트랜잭션이 직렬적으로 하나씩 연속적으로 실행되는 스케줄입니다.

  • 직렬 가능 스케줄 (Serializable Schedule)
    -여러 트랜잭션들이 병렬로 실행되더라도, 순서를 뒤바꿨을 때, 트랜잭션을 한개씩 연속적으로 실행한 것과 같은 결과를 내는 스케줄입니다.
    즉, 스케줄의 일부를 변경해 데이터베이스의 일관성을 보장하면서 동시에 여러 트랜잭션을 병렬로 처리할 수 있을때의 스케줄입니다.


  • 충돌 직렬화 가능 스케줄 (Conflict Serializable Schedule)
    -두 트랜잭션 사이의 연산이 충돌하는 경우 충돌을 기반으로 직렬화 가능한 스케줄을 판별하는 방식입니다.
    즉, 충돌이 일어난 스케줄에서 충돌연산의 순서를 제외한 나머지 연산 순서를 바꾸어 직렬스케줄로 바꿀 수 있으면 충돌 직렬가능 스케줄입니다.
    충돌이란? - 서로 다른 트랜잭션이 동일한 변수에 접근하고, 하나 이상의 쓰기가 발생하는 상황(읽기는 충돌X)
    (충돌 사이클이 발생하지 않아야합니다.)

  • 뷰 직렬 가능 스케줄 (View Serializable Schedule)
    -여러 트랜잭션이 동일한 데이터 X에 대해서 '최초 READ' , '중간 READ/WRITE' , '마지막 WRITE'를 수행하는 트랜잭션의 순서가 동일해야 한다는 의미의 스케줄입니다.
    다음은 뷰 직렬 가능 스케줄의 조건입니다.
1) 데이터 x에 대하여 S에서 트랜잭션 Ti가 x의 초깃값을 읽는다면, S'에서도 Ti가 초깃값을 읽어야 한다. 
2) S에서 트랜잭션 Ti가 수행한 모든 read(x)의 연산 값이 Tj가 수행한 write(x)가 생성한 값이라면, S'에서 Ti가 수행한 모든 read(x)의 연산 값도 Tj가 수행한 write(x)가 생성한 값이어야 한다. 
3) S에서 Ti가 마지막 write(x)를 수행했다면, S'에서도 Ti가 마지막으로 write(x)를 수행해야 한다. 

 

 

 

 

  • 회복 가능성 관점 스케줄

  • 회복 가능 스케줄
    -다른 트랜잭션으로부터 의존성이 있는(WRITE 한 데이터를 READ한 경우) 트랜잭션은 의존하는 트랜잭션이 종료될 때 까지 COMMIT을 하지않은 스케줄입니다.
    즉, 다른 트랜잭션으로부터 데이터를 READ했으면 그 트랜잭션이 끝날 때 까지 COMMIT되면 안된다 라는 뜻입니다.

  • Aboids Cascadeless  abort스케줄
    -연속적인 철회현상을 방지하기 위해 기본적으로 COMMIT 또는 ROLLBACK으로 완료된 데이터만 READ할 수 있도록 허용하는 스케줄입니다. WRITE기능은 해당하지않습니다.

  • Strict 스케줄
    -cascadeless 스케줄보다 좀더 강화된 스케줄이며, 기본적으로 COMMIT 또는 ROLLBACK으로 완료된 데이터만 READ,WRITE할 수 있도록 허용하는 스케줄입니다.

 

 

 

 

 

TCL이란?

-데이터베이스에서 트랜잭션을 관리하는 데 사용되는 언어로, 하나 이상의 SQL 문장으로 구성된 작업을 뜻합니다.
이 언어는 트랜잭션을 구성하므로, 트랜잭션의 원자성에 의해 전부 성공, 전부 실패로 나뉩니다.

 

 

 

  • COMMIT(커밋) - 현재 트랜잭션에서 수행한 모든 변경사항을 데이터베이스에 저장합니다.
    (기본적으로는 자동 COMMIT이 됩니다.)
UPDATE employees SET salary = 5000 WHERE employee_id = 1;
COMMIT;

 

 

 

  • ROLLBACK(롤백) - 현재 트랜잭션에서 수행한 사항을 모두 취소 후, 트랜잭션 시작상태로 되돌립니다.
UPDATE employees SET salary = 6000 WHERE employee_id = 2;

ROLLBACK;

 

 

 

  • SAVEPOINT(세이브포인트) - 트랜잭션 내에서 세이브 지점을 설정해 ROLLBACK 시 저장한 곳으로 되돌아 옵니다.
UPDATE employees SET salary = 7000 WHERE employee_id = 3;

SAVEPOINT my_savepoint;

UPDATE employees SET salary = 8000 WHERE employee_id = 4;

ROLLBACK TO my_savepoint;

 

'DB' 카테고리의 다른 글

SQL 함수  (0) 2023.08.10
WHERE 조건절  (0) 2023.08.10
데이터베이스 권한(grant,revoke)  (0) 2023.05.05
트리거(Triggers)  (0) 2023.05.04
무결성 제약  (0) 2023.05.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함