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 |