◆ 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 까지 저장하느냐의 차이다.
'Application > SQL (Mysql,MariaDB)' 카테고리의 다른 글
[SQL] MySQL replication status 정보 정리 (0) | 2023.03.13 |
---|---|
[SQL] MariaDB slow query log 적용 안될 시 확인 방법 (0) | 2023.01.29 |
[SQL] DB생성 및 사용자 추가 (MySQL/MariaDB) (0) | 2023.01.29 |
[SQL] DB 외부 접속 허용 (MySQL / MariaDB) (0) | 2023.01.29 |
댓글