DB & AWS Knowledge
MySQL, MariaDB 의 innodb_io_capacity 파라미터 설정 본문
이 페이지에서는 MySQL, MariaDB 에서 메모리 영역에서 (buffer pool) storage 로 데이터 (dirty page) 를 전송 시 이에 대한 처리 속도에 관여 될 수 있는 파라미터인 innodb_io_capacity 에 대하여 다룬다.
이 내용은 아래의 MySQL, AWS 공식 Document 를 참조한다.
[1] https://dev.mysql.com/doc/refman/8.0/en/innodb-configuring-io-capacity.html
[3] https://www.percona.com/blog/give-love-to-your-ssds-reduce-innodb_io_capacity_max/
innodb_io_capacity 의 개념과 의의
Innodb_io_capacity 는 MySQL, MariaDB 의 InnoDB 가 background 로 수행하는 IO 작업에 대해서 초당 IO 작업 수치를 (IOPS) 결정하게 해주는 파라미터다. 이 때 IO 작업은 위에서 설명한 메모리에서 storage 로 데이터를 전송하거나 (flush)
merge (일반적으로 Change buffer merging) 등을 수행시에 관여하는 IO 작업을 일컫는다.
이 파라미터가 중요한 이유는 이 파라미터가 너무 낮게 설정되면 storage 가 구성된 H/W 의 성능을 제대로 이끌어 내지 못하여 위의 전송작업 속도에 큰 악영항을 주기 때문이다.
예를 들어 buffer pool 영역에서 데이터 변경이 일어 난 데이터에 대해서 (dirty page) storage 에 전송을 하면서 최종 반영을 할 시, 전송 속도가 늦어지면 축적되는 dirty page 의 비율이 높아져서 이후에 이를 한꺼번에 flush 를 할 때, 엄청난 성능 저하가 필연적으로 발생한다. 즉, 이 파라미터를 적절치로 조절하면서 flush 가 가능한 이렇게 일괄적으로 일어나지 않도록 하면서 disk 의 처리 속도를 남용하지않는 수준으로 조절해야 한다.
이와 같이 innodb_io_capacity 파라미터는 DB 가 disk 처리속도를 적절히 활용 하도록 하는데 의의가 있다.
innodb_io_capacity 조절 시, 주의점
물론 이 파라미터를 조절 시, 주의 해야 할 사항이 있다.
- 이 파라미터를 너무 높게 설정하면 OS 및 다른 프로세스들의 IO 에 영향을 미칠 수 있다.
- 또한, 이 파라미터를 높게 설정해도 H/W disk 의 성능 자체가 좋지 않으면 큰 성능 향상을 기대 할 수 없다.
이때는 H/W 자체를 SSD 등으로 구성하는 게 더 유리할 수 있다.
- MySQL, MariaDB 는 이 파라미터를 매우 높게 설정함으로 발생 할 수 있는 위의 문제들로 인하여
innodb_io_capacity_max 를 통하여 IO 작업의 상한선을 둘 수 있도록 설정했다. 또한, innodb_io_capacity 를 아무리 높게 설정해도 innodb_io_capacity_max 값을 넘을 수 없다.
예를 들어 아래 test 와 같이 innodb_io_capacity_max 가 2000 인 상태에서 innodb_io_capacity 을 10000 으로 설정하면 2000 으로 설정되는 것을 확인 할 수 있다.
- 적용 전
MySQL [(none)]> show global variables like '%innodb_io_capacity%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_io_capacity | 100 |
| innodb_io_capacity_max | 2000 |
+------------------------+-------+
2 rows in set (0.00 sec)
- innodb_io_capacity 를 10000 으로 적용 시, 결과
MySQL [(none)]> show global variables like '%innodb_io_capacity%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_io_capacity | 2000 |
| innodb_io_capacity_max | 2000 |
+------------------------+-------+
참고로, 해당 파라미터는 온프레미스 환경 및 RDS MySQL 에서는 자유롭게 설정이 가능하나 Aurora MySQL 에서는 사용 할 수 없는 파라미터다. 이는 Aurora Cluster 는 AWS 의 독자적인 stroage 시스템으로 구성되기 때문이다.
'MySQL > 성능 관련 지식' 카테고리의 다른 글
MySQL latch 유형 - btr_search_latch (0) | 2023.06.23 |
---|---|
MySQL / MariaDB 의 쿼리 실행 계획 (explain) (0) | 2021.07.30 |