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 의 순서로 성능차이를 보였다.
WOW!!! Nice Post!Kind Regards
답글삭제it may be something to not forget
답글삭제This is a great post. Thanks so much for sharing, like always.
답글삭제