새소식

MySQL & Maria

[Maria] max_binlog_size 이슈

  • -
반응형

언제 한번 이중화로 구성된 고객사에 Lock이 심하게걸리고 문제가 생긴적이있다. 해당 Lock을 해결하고나서 Slave에 상태를 보니 Lock이후부터 따라가지 못하고있는것을 확인하였다. 여러가지 확인을 해보다 Master DB쪽의 binary log의 사이즈가 비정상적으로 컸던적이있다. 나의 예상으론 Binary log에 큰 트랜잭션들이 들어갔고 이 값을 max_allowed_packet 보다 커서 보내지 못한걸로 생각하였다.  나의 경우에는 Mariabackup을 이용해서 Replication을 재설정하였다.

 

이번에는 문제가 발생했던 영역인 Max_binlog_size 를 작게하였음에도 Binary log 사이즈가 커지는 것을 테스트해볼 생각이다.

 

■ max_binlog_size 확인

MariaDB [(none)]> show variables like '%max_binlog_size%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| max_binlog_size | 104857600 |
+-----------------+-----------+
1 row in set (0.01 sec)

MariaDB [(none)]> select 104857600/1024/1024 from dual;
+---------------------+
| 104857600/1024/1024 |
+---------------------+
| 100.00000000        |
+---------------------+

** 100M로 설정해두었음

 

■ 100MB 이상의 Transaction 실행

- 100MB이상의 Transaction을 실행하여 Max_binlog_size이상의 Binary log 파일이 만들어지는것을 확인해본다.

1. Table 생성

use test;
drop table if exists test_bak;
create table test_bak (a int primary key,name varchar(10),test varchar(100),Address varchar(500));

2. Insert Procedure 생성
drop procedure if exists PInsert;
DELIMITER $$
CREATE PROCEDURE PInsert()
begin
declare i int;
set i=1;
while(i < 1000000) do
insert into test_bak values(i,'LEE','TEST','117, Gaeumjeong-ro, Seongsan-gu, Changwon-si, Gyeongsangnam-do, Republic of Korea');
set i=i+1;
end while;
end$$
delimiter ; $$

3. Procedure 실행
MariaDB [test]> begin;
MariaDB [test]> call PInsert();
MariaDB [test]> commit;

 

■ Binary log file을 확인

- binary log file의 max인 100M 이상인 206M 사이즈의 binary log file이 생성된것을 볼 수있다.

1. Binary log file size 확인
[root@redis mysql]# du -sh ./*
16K	./aria_log.00000001
4.0K	./aria_log_control
4.0K	./ib_buffer_pool
76M	./ibdata1
48M	./ib_logfile0
48M	./ib_logfile1
12M	./ibtmp1
206M	./maria.000001
4.0K	./maria.000002
4.0K	./maria.index
0	./multi-master.info
1.1M	./mysql
4.0K	./performance_schema
4.0K	./server_audit.log
129M	./test

 

■ 조치

- 조치사항으로는 binary log file을 조회해서 대용량 트랜잭션을 찾아서 해당 트랜잭션을 고치는것이 가장 베스트이다.

 

 

 

 

 

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.