2009년 5월 19일 화요일

InnoDB flush 1

innodb_flush_log_at_trx_commit

트랜잭션 상황을 로그에 써 넣는 타이밍은 innodb_flush_log_at_trx_commit옵션으로 설정한다. 

innodb_flush_log_at_trx_commit={0|1|2}

지정가능한 값은 다음과 같다. 

0  log buffer내용이 1초간격으로 로그파일에 쓰여지고 flush된다.  commit할 때는 아무것도 하지 않는다. 

1  log buffer내용이 commit할 때에 로그 파일에 쓰여지고 flush된다. 

2  log buffer내용이 commit할 때에 로그 파일에 쓰여지고 flush는 1초간격으로 이루어진다. 

표준은 1로 , 안전성은 0이 가장 낮다.  만약 서버가 고장났을 경우에 1초간의 트랜잭션은 사라지기 때문이다.  

물론, 1이나 2의 경우에도 급한 정전, 운영체제의 crash에 따른 영향을 100% 피할 수는 없다. 

replication을  실행하고 있는 다면 다음과 같이 설정하고 가능한한 손실을 적게하는 것이 낫다. 

replication을 사용하고 있는 경우 설정
[mysqld]
innodb_flush_log_at_trx_commit=1
sync_binlog=1