본문 바로가기
Database & Bigdata/MySQL&MariaDB

[MySQL/MariaDB] innodb_flush_log_at_trx_commit 파라미터 / 개념도

by jionee 2021. 9. 16.
SMALL

innodb_flush_log_at_trx_commit 란 ?

- 트랜잭션이 commit 될 때 log buffer를 flush하고 disk 연산이 flush 되는 시점을 설정하는 파라미터

- default 값은 1

 

 

Innodb_flush_log_at_trx_commit 개념도

출처 : http://minsql.com/mysql/innodb_flush_log_at_trx_commit-%EA%B0%9C%EB%85%90%EB%8F%84%EC%99%80-%ED%8A%9C%EB%8B%9D-%ED%8F%AC%EC%9D%B8%ED%8A%B8/

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 속도를 올릴 수 있음

데이터의 중요도와 성능을 고려해 파라미터값 선택 필요

댓글