2024. 4. 22. 23:04ㆍMySQL/Class
insert .. on duplicate key update 가 실행되는 마스터에서 Com_update 수가 마스터에서는 증가하지 않으나 슬레이브에서 급속도록 증가하고 있어서 해당 부분을 찾아 보게 되었습니다.
아래도 여러번 말을 하겠지만, duplicate key update 문 때문에 헷갈리게 된 바보같은 내용일 수도 있을 것 같습니다.
예제를 본다면 훨씬 이해가 편할 겁니다.
time (Seq) |
Master | Slave |
1 | create table member ( name varchar(10), num int, reg_date timestamp, upt_date timestamp, primary key(name)); |
|
2 | show global status where variable_name in ('Com_select',Com_insert','Com_update','Questions'); |
|
3 | ||
4 | insert into member values('soccer',1,now(),now()) on duplicate key update num=num+1, upt_date=now(); |
|
5 |
- Com_insert가 증가하였습니다. |
|
6 | - 데이터 확인 |
- 데이터 확인 |
7 |
- 데이터 동기화를 하면서 내부적으로 insert를 하여 Com_insert가 증가한 것으로 보입니다. |
|
8 | - 동일 쿼리를 다시 한번 날려봅니다. 여기서는 데이터가 존재하기 때문에 update 가 작동하여, num값이 2로, upt_date값이 갱신될 것입니다. insert into member values('soccer',1,now(),now()) on duplicate key update num=num+1, upt_date=now(); |
|
9 |
- Com_update가 아닌 Com_insert 가 증가하였습니다. - 이것은 insert쿼리라서 update 쿼리라고 인식하지 않은 것 같습니다. |
|
10 | - 데이터 확인(num과 upt_date 가 변경되었습니다.) |
|
11 | - 데이터 확인(master와 동일합니다.) |
|
12 |
- Com_update가 증가하였습니다. - 기존 데이터가 존재하기 때문에 동기화 작업을 하면서 내부적으로 업데이트를 진행한 것으로 보입니다. |
master 는 Com_insert가 증가하였지만, slave는 Com_update 가 증가 하였습니다.
이것은 insert 구문에 duplicate key update 때문에 혼란을 가져다 줄 수 있을 것 같습니다.
처음에는 별에별 생각을 많이하게 되었습니다.(저는 이런 생각도 했습니다.)
슬레이브는 업데이트가 작동했는데 마스터는 왜 insert인가? 마스터에 들어가면서 슬레이브에 동기화 시키고 데이터가 존재하기 때문에 업데이트를 한번더 한게 아닌가? 그렇다면 업데이트를 하면서 값이 2배로 증가되는 게 아닌가? |
결론을 말씀드리자면
master 는 발생된 insert 쿼리로 인해 Com_insert 가 증가한것이 맞습니다.
여기서 왜 slave는 Com_update 가 증가한 것이냐 였습니다. 계속 insert 쿼리랑 엮어서 생각 했던것이 문제였습니다.
slave는 마스터의 binlog를 보고 데이터 동기화를 하기 때문에 insert 쿼리랑은 전혀 무관합니다.(binlog_format=row)
즉, slave는 쿼리가 어떤것인지 상관없이 binlog를 보고 동기화를 하기 때문에, Com_update, Com_insert 등 모든 것이 내부적인 작동에 의해서 결정 되는 것입니다.
너무 당연한 얘기를 어렵게 풀어서 얘기를 한게 아닌가 싶지만, 개인적으로 com_insert, com_update 에 대해서 좀 더 알아보는 시간을 갖게 되어 많은 도움이 되었다고 생각합니다.^^
'MySQL > Class' 카테고리의 다른 글
기초공부 - (14) innodb_buffer_pool_pages_data 값이 Total보다 크다면 (0) | 2024.05.07 |
---|---|
기초공부 - (13) procedure (0) | 2024.04.28 |
기초공부 - (11) QPS & TPS (0) | 2024.04.16 |
HA 구성 - (7) MHA : slave가 다운 되었을 경우 mha 반응은? (0) | 2024.04.08 |
M2(Mac)용 VMWare로 가상화 만들기 - (7) mysqldump upgrade (0) | 2024.04.01 |