MySQL/성능 관련 지식

MySQL, MariaDB 의 innodb_io_capacity 파라미터 설정

`O` 2024. 1. 12. 03:11
728x90
반응형

이 페이지에서는 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

 

[2] https://aws.amazon.com/ko/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/

 

[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 시스템으로 구성되기 때문이다.

반응형