트랜잭션은 작업의 완전성을 보장해주는것이다.
논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우 원 상태로 복구해 작업의 일부만 적영되는 현상이 발생하지 않게 만들어주는 기능.
잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기위한 기능
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 |