MariaDB에는 'innodb buffer pool instances' 변수 설정이 없다...?
지난 글에 이어서 MySQL 및 MariaDB의 성능 테스트를 진행하였습니다.
MariaDB 10.5 버전부터는 innodb 버퍼 풀이 1개로 동작하는데요, MySQL과 비교하였을 때 성능차이가 어느정도인지 직접 비교해보려고 합니다.
벤치마트 툴은 sysbench
이며 oltp_read_only
테스트를 진행하였습니다.
서버 정보
- Ubuntu 18.04
- Intel(R) Xeon(R) Silver 4215 CPU @ 2.50GHz * 2
- 64GB RAM
- 6TB HDD
Mysql / MariaDB 환경 및 설정
테스트 환경
- 테이블 40개
- 테이블 당 1000만 row
- 총 약 100GB 데이터
MySQL
- version: MySQL 8.0.26
- innodb_buffer_pool_size: 24GB
- innodb_buffer_pool_instances는 1, 4, 8(기본값), 16, 24 값에 대해서 테스트를 진행하였습니다.
- 최대 64까지 설정 가능하지만, 아래 공식홈페이지 내용에 따라 24까지만 테스트 하였습니다.
For best efficiency, specify a combination of innodb_buffer_pool_instances and innodb_buffer_pool_size so that each buffer pool instance is at least 1GB.
Configuring Multiple Buffer Pool Instances
MariaDB
- version: MariaDB 10.6.4
- innodb_buffer_pool_size: 24GB
MySQL 테스트 결과
innodb_buffer_pool_instances=1
- 총 쿼리수: 39,604,048 (3959.31 per sec)
- 총 트랜잭션 수: 2,475,253 (247.46 per sec)
innodb_buffer_pool_instances=4
- 총 쿼리수: 38,473,296 (3846.55 per sec)
- 총 트랜잭션 수: 2,404,581 (240.41 per sec)
innodb_buffer_pool_instances=8
- 총 쿼리수: 38,075,408 (3806.49 per sec)
- 총 트랜잭션 수: 2,379,713 (237.91 per sec)
innodb_buffer_pool_instances=16
- 총 쿼리수: 37,389,024 (3738.06 per sec)
- 총 트랜잭션 수: 2,336,814 (233.63 per sec)
innodb_buffer_pool_instances=24
- 총 쿼리수: 37,317,152 (3730.85 per sec)
- 총 트랜잭션 수: 2,332,322 (233.18 per sec)
MariaDB 테스트 결과
- 총 쿼리수: 29,998,288 (2998.17 per sec)
- 총 트랜잭션 수: 1,874,893 (187.39 per sec)
Total 비교
결론
의외로 MySQL instance가 1일 때 가장 성능이 좋아서 여러번 테스트를 해봤는데 결과는 똑같았습니다.
How Many innodb_buffer_pool_instances Do You Need in MySQL 8?
해당 포스트에서는 innodb_buffer_pool_instances 값이 높아질수록 처리량이 높아졌으나, 저는 낮을 수록 처리량이 높아졌는데, 해당 서버는 SSD이고 제 서버는 HDD 인게 가장 큰 차이인듯 합니다.
SSD는 속도가 빠르기 때문에, 여러 인스턴스가 동시에 접근해도 모두 다 처리할 성능이 되지만,
HDD 속도가 느리기 때문에 여러 인스턴스가 동시에 HDD에 접근하게 되면 병목현상이 발생하여 속도가 더 낮게 나오는게 아닐까 하고 예상해봅니다.
그리고, MariaDB 성능이 MySQL보다 성능차이가 많이나서 이것도 여러번 테스트를 진행하였으나, 결과는 비슷 했습니다. MySQL 성능이 훨씬 좋네요.
다음 글은 SSD에서의 성능 비교입니다.