본문 바로가기
  • 배움에는 끝이 없다.
Application/SQL (Mysql,MariaDB)

[SQL] innodb_flush_log_at_trx_commit 란? (Innodb insert 속도를 올려보자)

by 줘패자 2023. 1. 29.

innodb_flush_log_at_trx_commit 란...?

https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html

 

MySQL :: MySQL 8.0 Reference Manual :: 15.14 InnoDB Startup Options and System Variables

 

dev.mysql.com

 

요약하자면..

innodb_flush_log_at_trx_commit 이란 쿼리 요청이 디스크에 저장되는 방법이 지정된 변수이다.

즉 이 값을 변경하면 transaction 방법을 수정해서 insert 속도를 올릴 수 있다는 것 같다.

 

transaction, commit이란?

DB에서의 transaction이란 정상적으로 완료된 일련의 작업들이라고 생각하면된다.

예를들어 insert , update , delete가 순차적으로 일어나고 그 후 commit을 하게되면 transaction이 정상적으로 완료됐다할 수 있다.

즉 commit이란 저장되지 않은(메모리에 적혀있는)데이터를 DB에 저장 후 트랜잭션을 종료한다.

 

 

■ innodb_flush_log_at_trx_commit  값이 디폴트일때의 과정(즉 1일 때)은 아래 처럼 진행된다.

query 하나당 log buffer(Memery 영역) 를 거쳐서 -> os buffer/cache (메모리 영역)를 거쳐서  -> 마지막으로 ib_logfile (Disk영역)에 저장(flush) 된다.

즉 1회 요청당 1회 commit - 한번의 요청때마다 매번 commit을 진행한다. - (요게 핵심임)

 

0 또는 2로 바꾼다면 저 과정이 간략해진다.

 

 innodb_flush_log_at_trx_commit  =0
쿼리 하나당 log buffer(Memery 영역) 저장하고 1초에 한번씩 나머지 commit을 수행(os buffer/cache(Memery 영역)를 거쳐서  -> 마지막으로 ib_logfile(디스크영역)에 저장(flush)])

 

 innodb_flush_log_at_trx_commit  = 2

쿼리 하나당 [log buffer(Memory 영역)를 거쳐서 >os buffer/cache(메모리 영역)에 저장] 후 1초에 한번씩 나머지 commit을 수행ib_logfile(Disk 영역)에 저장(flush)])

 

[결론]

0과 2의 차이는 query 하나당 log buffer까지 저장하느냐 os buffer/cache 까지 저장하느냐의 차이다.

 

댓글