[Real MySQL] 트랜잭션 요약

sa46lll·2023년 12월 8일
0

Real-MySQL

목록 보기
7/9

해당 글은 백은빈, 이성욱 님의 'Real MySQL 8.0 (1권)'을 학습하며 정리한 글입니다.

MySQL의 동시성에 영향을 미치는 트랜잭션, 잠금(Lock), 트랜잭션 격리수준(Isolation Level)에 대해 알아보겠다.

트랜잭션과 잠금은 비슷해 보이지만 사실 다르다.

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

데이터 정합성은 데이터가 서로 모순 없이 일관되게 일치함을 의미하고, 동시성 제어는 다수의 사용자가 동시에 데이터에 접근하는 것을 의미한다.

1. 트랜잭션(Transaction)

트랜잭션은 작업의 완전성을 보장해준다. 작업 셋을 모두 처리하거나 모두 처리하지 않도록 적용하는 것이다.
MySQL의 스토리지 엔진 중, InnoDB는 트랜잭션을 지원하고 MyISAM은 지원하지 않는다.
MyISAM이 더 빠르다고 해도 많은 기업에서 InnoDB를 사용하고 있는 이유지 않을까 싶다.

MyISAM과 InnoDB의 차이를 간단한 쿼리로 실행시켜보자.
각각 스토리지 엔진을 설정하고, 중복된 데이터를 넣었을 때 어떤 문제가 발생하는지 보자.

스토리지 엔진이 제대로 설정됐는지 확인해 볼 수 있다.

InnoDB는 두 번째 쿼리에서 에러가 발생하여 1, 2, 3 모두 삽입되지 않았다. 반면에, MyISAM은 에러가 발생한 3을 제외하고 1, 2 까지 삽입되었다.
이처럼 트랜잭션이 없다면 모든 롤백 처리를 개발자가 직접 해야할 것이다.

트랜잭션 주의사항

트랜잭션도 DBMS 커넥션과 동일하게 필요한 최소의 코드에만 적용하자. 트랜잭션의 범위를 최소화하자는 것이다.
잘못하면 DBMS 서버가 높은 부하 상태로 빠지거나 위험한 상태에 빠지는 경우가 빈번하다.

profile
비열한 커비

0개의 댓글