innodb_flush_log_at_trx_commit 란 ?
- 트랜잭션이 commit 될 때 log buffer를 flush하고 disk 연산이 flush 되는 시점을 설정하는 파라미터
- default 값은 1
Innodb_flush_log_at_trx_commit 개념도

1. commit
2. InnoDB의 log buffer에 데이터 쓰기 (메모리 영역)
3. OS buffer Cache에 쓰기 (메모리 영역)
4. InnoDB log file에 쓰기 (데이터 영역) --> flush
innodb_flush_log_at_trx_commit=0
- 트랜잭션 commit되면 1~2단계까지 처리하고(log buffer에 데이터 쓰기),
1초에 한번 씩 3~4단계를 자동으로 수행함 (OS buffer Cache, InnoDB log에 데이터 쓰기)
- mysqld 프로세스가 죽으면 마지막 1초간 트랜잭션 유실될 수 있음
innodb_flush_log_at_trx_commit=1
- default 값
- 트랜잭션 commit 되면 1~4단계 모두 처리
- ACID 지속성 보장이 가능하지만 IO 부하가 큼
- 쓰기 속도보다 데이터의 중요도가 클 경우 사용
innodb_flush_log_at_trx_commit=2
- 트랜잭션 commit 되면 1~3단계까지 처리하고 (메모리 영역만),
4단계는 1초에 한번씩 자동 수행 (flush)- default 값(1) 보다 IO 성능이 월등히 좋아지지만 데이터 유실 가능성 존재
- MySQL만 장애시 OS buffer Cache까지는 데이터가 넘어갔기때문에 안전할 수 있음
- 서버가 죽으면 마지막 1초간 트랜잭션 유실될 수 있음
정리
파라미터 값에 따라 IO 성능이 달라지므로, 변경 시 insert 속도를 올릴 수 있음
데이터의 중요도와 성능을 고려해 파라미터값 선택 필요
댓글