728x90
➡️트랜잭션
- 트랜잭션은 DBMS가 데이터베이스를 다룰 때 사용하는 작업의 단위이다.
- 트랜잭션은 데이터베이스의 무결성을 유지하기 위해 원자성, 고립성, 지속성의 성질을 갖는다.DBMS는 트랜잭션이 이러한 성질을 유지할 수 있도록 지원한다.
- 데이터베이스에서 데이터를 다룰 때 장애가 일어나는경우에 데이터를 복구하는 작업의 단위가 된다.
- 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때 서로 분리하는 단위가 된다.
➡️트랜잭션의 수행 과정
아래와 같은 트랜잭션의 수행 과정은 2가지 방법으로 나눠진다.
방법 1 : 1 - 2 - 3 - 4 - Commit - 5 - 6
방법 2 : 1 - 2 - 3 - 4 - 5 - 6 - Commit
+@Commit은 트랜잭션의 수행이 완료가 된것을 트랜잭션 관리자에게 알려주는 연산이다.Commit을 사용하는 이유는 DBMS가 일괄적으로 하드디스크에 접근하여 처리함으로써 개별 접근하는 것을 피하고 사용자에게 빠른 응답성을 보장하기 위해서 이다.
이 두가지 방법중에서 DBMS는 클라이언트에세 빠른 응답성을 보장하기 위해 방법 1을 선택한다.
이유는 수행결과를 데이터베이스에 기록하는 5,6의 과정이 시간이 많이 소요되고,다른 트랜잭션이 또 사용중인 테이블이 필요할 수 있기 때문이다.즉 트랜잭션은 임시로 종료선언하고 실제 데이터 베이스에 기록하는 것은 DBMS가 수행한다.
- 1.A계좌의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다.
- B계좌의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다.
- A 계좌에서 10000원을 인출한 값을 저장한다
- B 계좌에서 10000원을 입금한 값을 저장한다.
- A 계좌의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다.
- B 계좌의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다.
➡️트랜잭션 성질(ACID 성질)
- 원자성(Atomicity)
- 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 않아야 한다.
- 트랜잭션이 중간에 끊기면 이후에 해당 트랜잭션의 어디서부터 이어 수행해야되어야 하는지 모르기 때문에 작업이 잘못되면 회복 알고리즘을 이용하여 변경한 내용을 취소한다.
- 일관성(Consistency)
- 트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야 한다.
- 고립성(Isolation)
- 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경중인 데이터 값을 훼손하지 않아야한다.
- 고립성을 유지하기 위해서는 여러 트랜잭션이 동시에 접근하는 데이터에 대한 제어가 필요하다.
- 지속성(Durability)
- 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 한다.
- 트랜잭션의 성공 결과 값은 장애발생 후에도 변함없이 보관되어야 한다는 것으로 트랜잭션이 정상적으로 완료(Commit)된 경우에는 버퍼의 내용을 하드디스크에 확실히 기록하여야 하며, 부분 완료(Partial Commit)된 경우에는 작업을 취소(Aborted)하여야 한다.
➡️트랜잭션과 DBMS
- DBMS는 원자성을 유지하기 위해 회복관리자 프로그램을 작동시킨다.회복 관리자 프로그램은 데이터베이스가 변경한 내용을 로그로 기록하고 있다가 트랜잭션에 문제가 생겼을 때 원래 상태로 되돌린다.
- DBMS는 일관성을 유지하기 위해 무결성 제약조건을 활용한다.트랜잭션 수행 시 데이터에 변경이 가해지면 미리 정의해 둔 무결성 제약조건을 검사하여 일관성이 깨지는 것을 막는다.
- DBMS는 고립성을 유지하기 위해 일관성을 유지하는 것과 마찬가지로 동시성 제어 알고리즘을 작동시킨다.동시성 제어 알고리즘을 작동시켜 여러 트랜잭션이 동시에 같은데이터를 접근할 때 마치 한 트랜잭션씩 순서대로 접근하는 것처럼 제어한다.
- DBMS는 지속성을 유지하지 위해 회복관리자 프로그램을 이용한다. 회복관리자 프로그램은 데이터베이스가 변경한 내용을 로그로 기록하고 있다가 트랜잭션에 문제가 있을 때 원래 상태로 되돌린다.
Reference
- Mysql로 배우는 데이터베이스 개론과 실습
728x90
'Dev > Database' 카테고리의 다른 글
[AWS]RDS Mysql Replication 설정 (SpringBoot + JPA + Mysql) (0) | 2021.11.10 |
---|---|
[MYSQL]효율적인 트래픽 분산을 위한 Master/Slave 동적 라우팅 (0) | 2021.10.24 |
[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency) (0) | 2021.09.13 |
[DB] 정규화(Normalization) (0) | 2021.09.11 |
[MYSQL]SQL_1 (0) | 2021.08.21 |