2012년 12월 27일 목요일

MySQL innodb_flush_log_at_trx_commit 의 설정값 별 설명

MySQL의 InnoDB엔진에는 트랜잭션이 commit될 때 log buffer를 flush하고 disk 연산이 flush되는 시점을 설정하는 파라미터가 있다.

innodb_flush_log_at_trx_commit이라는 파라미터이다.

이 설정값은 0,1,2 이렇게 3가지 모드가 있으며 아래와 같은 차이점들이 있다.

설정값
설명

0
1초에 한번씩 log buffer를 log file에 기록하고 disk 연산에 대한 flush는 log file에서 일어나지만 commit 시점에서는 아무것도 일어나지 않습니다.
mysqld 프로세스가 죽으면 마지막 1초간의 트랜잭션이 유실될 수 있습니다.

1
매번 commit이 일어날 때마다 log buffer를 log file에 기록하고 disk 연산에 대한 flush는 log file에서 일어납니다.
따라서 성능이 느려지지만 full ACID를 만족하게 됩니다.

2매번 commit이 일어날 때마다 log buffer를 log file에 기록하지만 1초에 한번씩 disk 연산에 대한 flush는 log file에서 일어납니다.
(프로세스 스케쥴링 이슈로 인해 매번 1초에 한번씩 일어난다는 보장을 할 수 없습니다.)
OS가 crash되거나 파워가 나가면 마지막 1초(혹은 그 이상..)의 트랜잭션이 유실될 수 있습니다.

데이터의 유실이 없어야 하는 시스템에서는 1로 설정하여 사용해야 한다.

어느정도 데이터의 유실은 상관없는 서비스에서 성능만으로 테스트 했을 때 0 > 2 > 1 의 순서로 성능차이를 보였다.

댓글 3개: