본문 바로가기

Database/mariaDB administrator

[mariadb] autocommit 설정과 트랜잭션 개념과 성질

#[mariadb] autocommit 설정과 트랜잭션 개념과 성질

 

헐.. 

 

autocommit 이라니..

 

무슨 애들 장난감 DB도 아니고..

 

autocommit 이 "ON"이다.

 

일단, 마리아 DB와 mysql에서 autocommit 확인방법!

show variables like 'autocommit%';

이렇게 해서 "ON" 이 나오면 거긴 오토 커밋이다.

 

세션단에서 autocommit을 설정 또는 해제하는 방법이다.

SET AUTOCOMMIT = TRUE;  --> 설정
SET AUTOCOMMIT = FALSE; --> 해제

하지만 위의 명령어로는 세션단에서만 활성화되는 것이다.

 

DB 기본 세팅을 autocommit으로 변경하기 위해선

 

/etc/my.cnf.d/server.cnf 파일을 열어 이렇게 수정해 보자.

[mysqld]
autocommit=0   --> autocommit 해제

DB를 한번 내렸다가 올려야 한다. 그래야 적용된다.

 

자, 그럼...

 

오토 커밋이 뭐가 문제냐? 혹자는 이렇게 말할수 있다..

 

오토커밋이 되어 있다는 것은 DB에 접속하여 작업하는 사람에게 한 번의 실수도 용납하지 않겠다는 뜻이다.

 

그게 휴먼에러든, 네트워크 문제가 되든 뭐가 되든.. 그냥 한 번에 잘하라는 이야기이다.

 

기회 따윈 주지 않겠다.

 

이 얼마나 위험한 행동인가....?

 

commit이 나와서 하는 이야기지만, 트랜잭션에 대해서도 한번 알아보자.

 

트랜잭션이란, 

 

데이터베이스의 상태를 변환시키는 하나의 작업 단위, 한꺼번에 모두 수행되어야 할 일련의 연산을 이야기한다.

 

하나의 트랜잭션은 commit과 rollback을 만나면 끝이 난다.

 

예를 들어, A라는 작업을 하기 위해서 1,2,3이라는 스텝을 거쳐야 하는데,

 

 

1이라는 작업을 하고, 2 라는 작업을 하다가 에러가 나버렸다.

 

그럼 이미 1 이라는 작업을 해버렸는데, 이 상황에서 오토 커밋이라면 정말 난감한 작업이 되어버린다.

 

2,3 작업은 하지 않았는데 1 작업이 완료되어 커밋되어 버렸으니.. 물론 DB가 그 상태에 머물러 있다면 다시 2,3 작업을 하면 되지만, 그게 아니라 계속 관련 변경이 일어난다면?

 

되돌리지 못하는 상황이 되는 것이다.

 

되돌릴 수 있더라도 아주 어려운 작업이 될 것이다.

 

오토 커밋이 아니었다면, 그냥 rollback 해버리면 끝날 일이었다.

 

이렇게 오토 커밋이 무서운 겁니다 여러분!!

 

이런 예를 어렵게 이야기하면 이렇다.

 

바로 <트랜잭션의 성질>

Atomicity(원자성)

1. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.

2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.

 

Consistency(일관성)

1. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.

2. 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

 

Isolation(독립성, 격리성)

1. 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.

2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

 

Durablility(영속성, 지속성)

1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장 나더라도 영구적으로 반영되어야 한다.

이렇게 트랜잭션은 DB에서 정말 중요한 개념이다.

 

철저하게 잘 이해해서, 작업하는 효율을 높여보자!!

 

그럼 이만~!

 

 

 

by.sTricky