트랜잭션
트랜잭션은 애플리케이션 개발 입장에서, 고민해야 할 문제를 풀어주는 필수적인 DBMS 의 기능.
트랜잭션 사용 시 주의사항
DBMS 의 커넥션과 동일하게 꼭 필요한 최소의 코드에만 적용하는 것이 좋다.
트랜잭션의 범위를 최소화하라는 의미.
각 단위프로그램이 커넥션을 소유하는 시간이 길어질 수록 사용 가능한 여유 커넥션의 개수는 줄어든다.
메일 전송이나, 파일 전송 작업 등, 네트워크를 통해 원격 서버와 통신하는 작업은 트랜잭션 내에서 제거하라.
웹 서버뿐 아니라 DBMS 서버까지 위험한 상황 발생
저장 데이터의 단순 조회의 경우도 트랜잭션에 포함할 필요가 없다.
락
레코드 락
레코드 자체만을 잠그는 것
InnoDB 스토리지 엔진은 레코드 자체가 아니라, 인덱스의 레코드를 잠근다.
인덱스가 없을 경우, 내부적으로 자동 생성 된 클러스터 인덱스를 통해 잠금을 설정.
자동 증가 락
mysql 의 AUTO_INCREMENT 칼럼 속성은 INSERT 시에만 발생.
테이블 수준의 락이다.
명시적으로 획득하고 해제하는 방법은 없다. 아주 짧은 시간 걸렸다 해제되는 잠금이라서 대부분의 경우 문제가 되지 않는다.
인덱스와 잠금
인덱스가 없는 칼럼으로 쓰기를 진행할 경우,
인덱스가 걸려 있지 않은 레코드에 모두 락이 걸리게 된다.
격리 수준
트랜잭션 O select
- REPEATABLE READ 격리 수준에서는 트랜잭션 범위 내에서 작동
- 항상 동일한 결과만 반환
언두 레코드는 잠금을 걸 수가 없다. → FOR UPDATE, LOCK IN SHARE MODE 는 현재 레코드 값을 가져옴
반응형
'📘 DataBase > Mysql' 카테고리의 다른 글
[DB] 옵티마이저 (1) (0) | 2024.08.11 |
---|---|
쿼리 작성 및 최적화 (0) | 2022.05.17 |