일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- MyISAM
- REDIS
- maxclients
- RDS
- percona
- vacuum
- mysql
- NOSQL
- slack
- Maria
- opensource
- DELETE
- DML
- mongo
- NCP
- Connection
- 6.2.7
- OD
- zabbix
- online ddl
- jmeter
- 성능테스트
- postgresql
- autovacuum
- RDBMS
- Docker
- Cloud DB for MySQL
- cdb
- ncloud
- InnoDB
- Today
- Total
개인 공부
[MySQL / Maria] Innodb_flush_log_at_trx_commit 본문
innodb_flush_log_at_trx_commit 파라미터는 Transaction이 Commit되었을때 디스크에 저장되는 방법을 지정하는 변수이다. 해당 파라미터를 이용해서 Insert 작업 성능을 높일 수 있다.
* innodb_flush_log_at_trx_commit = 0
-MySQL 서버에 문제가 생기면 마지막 1초의 Transaction 유실 발생
* innodb_flush_log_at_trx_commit = 1
- Default 값으로 데이터 유실 발생하지 않는다.
* innodb_flush_log_at_trx_commit =2
- OS가 crash되거나 파워가 나가면 마지막 1초(혹은 그 이상..)의 트랜잭션이 유실될 수 있습니다.
■ innodb_flush_log_at_trx_commit 1로 (Default)
- Innodb_flush_log_at_trx_commit 파라미터를 1로하엿을떄 Insert시 속도 측정
MariaDB [(none)]> show variables like '%innodb_flush_log_at%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_timeout | 1 |
| innodb_flush_log_at_trx_commit | 1 |
+--------------------------------+-------+
2.TEST TABLE 생성
drop table if exists test_bak;
create table test_bak (a int primary key,name varchar(10),test varchar(100),Address varchar(500));
3.INSERT PROCEDURE 생성
drop procedure if exists PInsert;
DELIMITER $$
CREATE PROCEDURE PInsert()
begin
declare i int;
declare b int;
set i=10004;
set b=76834;
while(i < 100000) do
Insert into test.test_bak values (i,b,now(),now());
set i=i+1;
set b=b+1;
end while;
end$$
delimiter ; $$
4.PROCEDURE 실행
MariaDB [test2]> call PInsert();
Query OK, 1 row affected (1 min 8.68 sec)
■ innodb_flush_log_at_trx_commit 2
- 기존 Default값인 1로 실행시 1분 이상걸렸던 Insert Procedure가 2초로 줄어든 것을 볼 수 있다.
1.innodb_flush_log_at_trx_commit 값 변경
MariaDB [test]> set global innodb_flush_log_at_trx_commit=2;
2.innodb_flush_log_at_trx_commit 값 확인
MariaDB [test]> show variables like '%innodb_flush_log_at%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_timeout | 1 |
| innodb_flush_log_at_trx_commit | 2 |
+--------------------------------+-------+
3.Procedure 실행
MariaDB [test]> call PInsert();
Query OK, 1 row affected (2.26 sec)
* 데이터의 유실에 민감한 서비스라면 Default 값인 1로 설정해두고 서버가 내려갔을때 1초 정도의 Data 유실은 민감하게 받아들이지 않는 서비스라면 0, 2로 값을 변경하여 성능을 높이는 것이 좋다.
* 만약 Replication 복제를 사용하고있다면 innodb_flush_log_at_trx_commit =2는 문제가되지 않는다.
■ 참고 URL
innodb_flush_log_at_trx_commit 개념도와 튜닝 포인트
innodb_flush_log_at_trx_commit 개념도와 튜닝 포인트
minsql.com
'MySQL & Maria' 카테고리의 다른 글
[MySQL] MSR ( Multi Source Replication ) (0) | 2021.11.23 |
---|---|
[MySQL] MySQL_8.0 Binary Install (0) | 2021.11.10 |
[Maria] max_binlog_size 이슈 (0) | 2021.10.26 |
[ Maria ] DB 접근 관리 Aduit_log (0) | 2021.10.25 |
[Maria] Maria DB Upgrade (0) | 2021.10.11 |