..
RDBMS Auto Commit 동작원리: SQL은 언제 커밋되는가
TOC
Overview
앞 글인 RDBMS 트랜잭션은 왜 필요한가: 논리적 작업 단위와 커밋·롤백에서는 여러 SQL을 하나의 작업 단위로 묶는 트랜잭션을 살펴봤다.
이번 글에서는 트랜잭션을 직접 명시하지 않았을 때 데이터베이스가 어떻게 동작하는지 정리한다.
Auto Commit이란
Auto Commit은 SQL 실행 후 데이터베이스가 트랜잭션을 자동으로 끝내는 설정이다.
Auto Commit이 켜져 있고 BEGIN을 작성하지 않으면 SQL 하나가 하나의 암시적 트랜잭션이 된다.
SQL 실행
→ 트랜잭션 자동 시작
→ 성공하면 자동 COMMIT
→ 실패하면 해당 SQL ROLLBACK
즉, Auto Commit은 트랜잭션을 사용하지 않는 방식이 아니다. SQL마다 트랜잭션을 만들고 바로 끝내는 방식이다.
Auto Commit ON과 OFF
MariaDB에서는 Auto Commit이 기본적으로 켜져 있다.
SELECT @@autocommit;
Auto Commit ON
UPDATE account SET balance = balance - 10000
WHERE account_id = 1;
위 SQL이 성공하면 즉시 커밋된다. 다음 SQL이 실패해도 이미 커밋된 변경은 되돌아가지 않는다.
Auto Commit OFF
SET autocommit = 0;
UPDATE account SET balance = balance - 10000
WHERE account_id = 1;
UPDATE account SET balance = balance + 10000
WHERE account_id = 2;
COMMIT;
Auto Commit이 꺼지면 여러 SQL이 하나의 트랜잭션에 누적된다. 작업을 확정하려면 COMMIT, 취소하려면 ROLLBACK을 실행해야 한다.
명시적 트랜잭션과의 차이
Auto Commit이 켜져 있어도 START TRANSACTION을 사용하면 여러 SQL을 명시적으로 묶을 수 있다.
START TRANSACTION;
UPDATE account SET balance = balance - 10000
WHERE account_id = 1;
UPDATE account SET balance = balance + 10000
WHERE account_id = 2;
COMMIT;
차이는 트랜잭션의 경계를 누가 정하느냐에 있다.
| 방식 | 트랜잭션 범위 | 종료 방식 |
|---|---|---|
| Auto Commit ON | SQL 한 문장 | 데이터베이스가 자동 처리 |
| Auto Commit OFF | 여러 SQL | COMMIT 또는 ROLLBACK 필요 |
| 명시적 트랜잭션 | BEGIN부터 종료 시점까지 |
애플리케이션이 결정 |
Conclusion
다음 세 문장으로 정리할 수 있다.
- Auto Commit ON에서는 SQL마다 암시적 트랜잭션이 생성되고 자동 커밋된다.
- Auto Commit OFF에서는 여러 SQL이 누적되며
COMMIT또는ROLLBACK으로 종료한다.
Auto Commit은 트랜잭션이 없는 상태가 아니라, SQL마다 트랜잭션을 자동으로 완료하는 설정이다.