본문 바로가기

Database/MySQL

InnoDB change buffer

NSERT, UPDATE, DELETE 등 이 secondary index 에 영향을 주게 되는데 해당 페이지가 buffer pool 에 없다면

원칙적으로 바로 disk i/o 가 발생해야 한다. 이는 operation 에 의해 임의적으로 disk i/o 가 발생할 수 있다는 이야기 인데

이런 상황이 성능에 좋지 않기 때문에 change buffer 에 임의로 적용해 두고 

  • 시스템이 비교적 한가할때
  • change buffer 가 full 이 될때
  • 해당 페이지를 select 에 의해 buffer pool 에 캐싱될때
  • 혹은 주지적으로

disk i/o 를 발생시켜 성능을 향상 시키는 역할을 한다.

 

change buffer 크기

change buffer 는 buffer pool 의  25% 정도 차지하고 최고 50% 까지 조절할 수 있다.

상태는 show engine innodb status  에서 다음과 같이 확인할 수 있다.

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
 insert 0, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 4425293, used cells 32, node heap has 1 buffer(s)
13577.57 hash searches/s, 202.47 non-hash searches/s
  • size: change buffer 에서 사용된 페이지 수  change buffer 크긱는 set size - ( 1 + free list len ) , 1 은 헤더 페이지 
  • seg size:  change buffer 의 페이지들( 둘 중 누가 상위 개념인지 모르겠네 )

 

change buffer 의 병합

change buffer 에 기록된 페이지 내용이 buffer pool 에 기록되면 해당 페이지가 활성화 되기 전에  change buffer 의 내용과 병합된다.

change buffer 병합 작업은 백그라운드로 동작 하며 io 상한선은 innodb_io_capacity 에 영향을 받는다.

crash recovery(응급복구) 시에도 disk의 change buffer 내용을  buffer pool 의 secondary index 의 내용에 병합하면서 복구에 사용된다.

  • change buffer fully durable 이라는 표현이 있는거 봐서는 sync io 를 수행하는거 같다.

 

change buffer 안쓰기

  • 대부분의 데이터가 buffer pool 사이즈와 같을때
  • ssd 처럼 random 억세스에 성능이 좋은 디스크를 사용할때

 

change buffer 모니터링

'Database > MySQL' 카테고리의 다른 글

InnoDB on-disk structures  (0) 2021.10.01
InnoDB Adaptive Hash index  (0) 2021.10.01
InnoDB Buffer pool  (0) 2021.10.01
InnoDB Locking and Transaction Model  (0) 2021.10.01
MySQL shell importTable() 사용하기  (0) 2021.10.01