책/RealMySQL8.0

트랜잭션과 잠금 1

kkkkkdddddhhhhh 2024. 10. 10. 23:26

트랜잭션은 작업의 완전성을 보장해주는것이다. 

논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우 원 상태로 복구해 작업의 일부만 적영되는 현상이 발생하지 않게 만들어주는 기능.

 

잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기위한 기능

 

MySQL에서의 트랜잭션 

MyISAM 엔진에서는 Transaction 이 적용되지 않는다. Transaction이 필요할 경우 InnoDB와 같은 스토리지 엔진을 사용하자 

 

트랜잭션 사용시 주의사항

1. 꼭 필요한 최소한의 코드에만 적용하자 

- 메일 전송이나 FTP 파일 전송 작업 또는 네트워크 통신 같은 작업에서는 어떻게서든 DBMS의 트랙잭션 내에서 제거하는편이 좋다. 

프로그램이 실행되는 동안 메일서버와 통신할 수 없는 상황이 발생한다면 웹 서버뿐아니라 DBMS 서버까지 위험해지는 상황이 발생하게 된다. 

 

2. 절차와 작업의 성격에 따라 트랜잭션을 분리하자 

- 트랜잭션내에 단순 조회가 포함되지 않아도 된다. 

 

 

MySQL Engine 의 잠금 

 

1. 글로벌 락

- 잠금 범위가 가장 큰 락

- 잠금을 획득하면 다른 세션에서의 SELECT 를 제외한 대부분의 DML 문장들이 대기 상태로 남는다. 

- 작업 테이블이 다르거나 데이터베이스가 다르더라도 잠금이 적용된다. ( MySQL 서버 전체에 적용 ) 

데이터베이스에 존재하는 일관 백업을 받아야할 때 글로벌 락을 사용한다. 

 

2. 테이블 락

- 개별 테이블 단위로 적용되는 락

- MyISAM 같은 memory storage Engine 에는 묵시적으로 기본 적용이 된다. 데이터를 변경하는 쿼리 발생시 테이블 락 적용

InnoDB 같은 경우는 레코드 기반의 락이 묵시적으로 적용된다. 

 

3. 네임드 락 

- 임의의 문자열에 락을 적용 할 수 있다.

- 특정 String 에 잠금을 적용 할 수 있는데 자주 사용되진 않는다. 

 

4. 메타데이터 락 

-  데이터베이스 객체의 이름이나 구조를 변경하는 경우의 획득하는 락 

 

 

' > RealMySQL8.0' 카테고리의 다른 글

실행 계획 2  (0) 2024.08.05
실행 계획 1  (0) 2024.08.04
MySQL Engine Architecture  (0) 2024.08.03