Loading...
MySQL 9.5 Reference Manual 9.5의 17.8.7 Configuring InnoDB I/O Capacity의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
InnoDB master thread와 기타 thread는 대부분 I/O와 관련된 다양한 작업을 백그라운드에서 수행합니다. 예를 들어, buffer pool의 더티 페이지를 플러시하고 change buffer에 기록된 변경 사항을 적절한 세컨더리 인덱스에 쓰는 작업 등이 있습니다. InnoDB는 이러한 작업이 서버의 정상적인 동작에 악영향을 주지 않도록 작업을 수행하려고 합니다. 사용 가능한 I/O 대역폭을 추정하고, 사용 가능한 용량을 활용할 수 있도록 자신의 활동을 조정하려고 시도합니다.
innodb_io_capacity 변수는 InnoDB에 사용 가능한 전체 I/O 용량을 정의합니다. 이 값은 시스템이 초당 수행할 수 있는 I/O 작업 수(IOPS)와 대략 일치하도록 설정해야 합니다. innodb_io_capacity가 설정되면, InnoDB는 설정된 값을 기반으로 백그라운드 작업에 사용 가능한 I/O 대역폭을 추정합니다.
innodb_io_capacity는 100 이상의 값으로 설정할 수 있습니다. 기본값은 10000입니다. 일반적으로, 더 빠른 하드 드라이브, RAID 구성, 솔리드 스테이트 드라이브(SSD)는 최대 7200 RPM의 하드 드라이브와 같은 저가형 스토리지 장치보다 더 높은 값에서 이점을 얻습니다.
이상적으로는 설정 값을 가능한 한 낮게 유지하되, 백그라운드 활동이 뒤처지지 않을 정도로만 낮춰야 합니다. 값이 너무 높으면 데이터가 buffer pool과 change buffer에서 너무 빠르게 제거되어 캐싱이 큰 이점을 제공하지 못하게 됩니다. 더 높은 I/O 속도를 감당할 수 있는 바쁜 시스템의 경우, 행 변경이 높은 비율로 발생할 때 관련된 백그라운드 유지 관리 작업을 서버가 처리할 수 있도록 더 높은 값을 설정할 수 있습니다.
일반적으로, InnoDB I/O에 사용되는 드라이브 수의 함수로 값을 증가시킬 수 있습니다. 예를 들어, 여러 개의 디스크 또는 SSD를 사용하는 시스템에서 값을 증가시킬 수 있습니다.
백만과 같은 높은 값을 지정할 수는 있지만, 실제로는 이러한 큰 값이 거의 이점을 제공하지 않습니다. 일반적으로, 워크로드에 낮은 값이 충분하지 않다는 확신이 없는 한 20000보다 큰 값은 권장되지 않습니다. 플러시 작업이 뒤처질 때 이 값을 자동으로 증가시키는 innodb_io_capacity_max 옵션도 참조하십시오.
innodb_io_capacity를 튜닝할 때 쓰기 워크로드를 고려하십시오. 쓰기 워크로드가 큰 시스템은 더 높은 설정으로부터 이점을 얻을 가능성이 큽니다. 쓰기 워크로드가 작은 시스템에는 더 낮은 설정으로도 충분할 수 있습니다.
innodb_io_capacity 설정은 buffer pool 인스턴스별 설정이 아닙니다. 사용 가능한 I/O 용량은 플러시 활동을 위해 buffer pool 인스턴스 간에 동일하게 분배됩니다.
innodb_io_capacity 값은 MySQL 옵션 파일(my.cnf 또는 my.ini)에서 설정하거나, SET GLOBAL 문을 사용하여 런타임에 수정할 수 있습니다. 이 작업에는 글로벌 시스템 변수(global system variable)를 설정할 수 있는 충분한 권한이 필요합니다. 자세한 내용은 Section 7.1.9.1, “System Variable Privileges”를 참조하십시오.
기본적으로 활성화된 innodb_flush_sync 변수는 checkpoint에서 발생하는 I/O 활동 폭증 동안 innodb_io_capacity 설정을 무시하게 합니다.
innodb_io_capacity 및 innodb_io_capacity_max 설정으로 정의된 I/O 속도를 따르려면 innodb_flush_sync를 비활성화하십시오.
innodb_flush_sync 값은 MySQL 옵션 파일(my.cnf 또는 my.ini)에서 설정하거나, SET GLOBAL 문을 사용하여 런타임에 수정할 수 있으며, 이 작업에는 글로벌 시스템 변수를 설정할 수 있는 충분한 권한이 필요합니다. 자세한 내용은 Section 7.1.9.1, “System Variable Privileges”를 참조하십시오.
플러시 활동이 뒤처지는 경우, InnoDB는 innodb_io_capacity 변수에 정의된 I/O 작업 per second(IOPS) 속도보다 더 높은 속도로, 보다 공격적으로 플러시할 수 있습니다. 이러한 상황에서 InnoDB 백그라운드 작업이 수행하는 최대 IOPS 수를 innodb_io_capacity_max 변수가 정의합니다.
스타트업 시 innodb_io_capacity 설정을 지정하지만 innodb_io_capacity_max 값을 지정하지 않으면, innodb_io_capacity_max는 innodb_io_capacity 값의 2배를 기본값으로 사용합니다.
innodb_io_capacity_max를 구성할 때, innodb_io_capacity의 2배는 종종 좋은 시작점입니다. innodb_io_capacity 설정과 마찬가지로, 설정 값을 가능한 한 낮게 유지하되, InnoDB가 innodb_io_capacity 설정을 넘어서 IOPS 속도를 충분히 확장할 수 없을 정도로 너무 낮게 설정하지 마십시오.
innodb_io_capacity_max를 튜닝할 때 쓰기 워크로드를 고려하십시오. 쓰기 워크로드가 큰 시스템은 더 높은 설정으로 이점을 얻을 수 있습니다. 쓰기 워크로드가 작은 시스템에는 더 낮은 설정으로도 충분할 수 있습니다.
innodb_io_capacity_max는 innodb_io_capacity 값보다 작은 값으로 설정할 수 없습니다.
SET 문(SET GLOBAL innodb_io_capacity_max=DEFAULT)을 사용하여 innodb_io_capacity_max를 DEFAULT로 설정하면, innodb_io_capacity_max는 기본값으로 설정됩니다.
innodb_io_capacity_max 제한은 모든 buffer pool 인스턴스에 적용됩니다. buffer pool 인스턴스별 설정이 아닙니다.
17.8.6 Using Asynchronous I/O on Linux
17.8.8 Configuring Spin Lock Polling