2022. 6. 30. 15:07ㆍDatabase/데이터베이스와 SQLD 합격패스 Online.
6-1 트랜잭션이란?
트랜잭션 (Transaction) 이란
- 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위
- 유사한 시스템 > 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템
- 데이터베이스 기능 중, 트랜잭션을 조작하는 기능은 사용자가 데이터베이스 완전성(Integrity) 유지를 확신하게 함
- 단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구함. 이때 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않음. 예를 들면, 송금을 할 때 한 계좌에서 인출되면 다른 계좌에서 입금이 확인되는 것이 중요함. 또한 트랜잭션은 서로 간섭하지 않아야 함.
- 만약 쿼리 하나가 실패하면, 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백. 이것은 DBMS 내의 프로그램의 개발방식에 따라 다름. 트랜잭션은 Commit 전에 언제든지 수동으로 Rollback 될 수 있음.
트랜잭션의 4 대 특징
- 원자성 Atomicity
- 일관성 Consistency
- 고립성 Isolation
- 지속성 Durability
-
6-2 트랜잭션 처리의 필요성
- 원자성 > 전부 성공하거나 혹은 전부 실패
- 고립성 > 영화 좌석 예매 > 좌석 취소할 때까지 다른 사람이 예매 불가
6-3 트랜잭션 격리 수준(Isolation level)
ANSI 표준 격리 수준 직렬화 가능 기능으로 부터 격리 수준 완화
-
- 가장 이상은 Serializable이지만, 동시성이 떨어지면서 성능상 이슈 발생
- 그래서 Serializable보다 낮은 격리 수준으로 DBMS가 운영 됨
격리 수준 완화되면서 직렬화 가능에서 없었던 현상 발생
-
격리 수준과 3 가지 현상의 관계
-
-
-
6-4 락과 데드락
락의 개념
- 갱신손실 문제를 해결하려면 상대방 트랜잭션이 데이터를 사용하는지 여부를 알 수 있는 규칙이 필요
- 데이터를 수정 중이라는 사실을 알리는 방법의 잠금 장치
락의 유형
- 공유락(LS, shared lock) > 트랜잭션이 읽기 할 때 사용
- 배타락(LX, exclusive lock) > 읽고 쓰기 할 때 사용
- 사용규칙
데이터에 락이 걸려있지 않으면 트랜잭션은 데이터에 락을 걸 수 있다
트랜잭션이 데이터 X 를 읽기만 할 경우 LS(X)를 요청하고, 읽거나 쓰기를 할 경우 LX(X)를 요청한다
다른 트랜잭션이 데이터에 LS(X)을 걸어 둔 경우, X 의 요청은 허용하고 LX(X)는 허용하지 않는다
다른 트랜잭션이 데이터에 LX(X)을 걸어 둔 경우, X 와 LX(X) 모두 허용하지 않는다
트랜잭션이 락을 허용 받지 못하면 대기 상태가 된다.
데드락 (deadlock)
- 두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상. 교착상태
- 서로 상대의 테이블에 잠금 필요한 처리 실행 아무리 대기해도 상황 바뀌지 않음
- 일반적으로 데드락이 발생하면 DBMS는 T1 혹은 T2의 작업 중 하나를 강제로 중지시킴. 그 결과 나머지 트랜잭션은 정상적으로 실행됨. 이때 중지시키는 트랜잭션에서 변경한 데이터는 원래 상태로 되돌려 놓음.
6-5 트랜잭션 처리 시 주의 사항
데드락을 최소화하는 DBMS 전반적 대책
- 트랜잭션을 자주 커밋
- 정해진 순서로 테이블에 액세스하게 함
- 필요 없는 경우에는 읽기 잠금 획득 사용을 피함
- 쿼리에 의한 잠금 범위 좁히거나 더 작은 것으로 함
- 한 테이블 복수 행을 순서 변경 없이 갱신하면 교착 상태 발생 쉬움
- 테이블 단위 잠금 획득해 갱신 직렬화
자제해야 하는 트랜잭션 처리
-
'Database > 데이터베이스와 SQLD 합격패스 Online.' 카테고리의 다른 글
Chapter 08. 백업 및 복구 (0) | 2022.06.30 |
---|---|
Chapter 07. 테이블 설계 (0) | 2022.06.30 |
Chapter 05. SQL 기본 (0) | 2022.06.30 |
Chapter 04. 데이터베이스 설치 (0) | 2022.06.30 |
Chapter03. 데이터베이스 아키텍처 (0) | 2022.06.30 |