Loading...
MySQL 9.5 Reference Manual 9.5의 17.8.6 Using Asynchronous I/O on Linux의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
InnoDB는 Linux에서 비동기 I/O 서브시스템(native AIO)을 사용하여 데이터 파일 페이지에 대한 읽기 선행(read-ahead) 및 쓰기 요청을 수행합니다. 이 동작은 Linux 시스템에만 적용되며, 기본적으로 활성화되어 있는 innodb_use_native_aio 구성 옵션에 의해 제어됩니다. 다른 Unix 계열 시스템에서는 InnoDB가 동기식 I/O만 사용합니다. 과거에는 InnoDB가 Windows 시스템에서만 비동기 I/O를 사용했습니다. Linux에서 비동기 I/O 서브시스템을 사용하려면 libaio 라이브러리가 필요합니다.
동기식 I/O의 경우, 쿼리 스레드는 I/O 요청을 큐에 넣고, InnoDB 백그라운드 스레드가 큐에 쌓인 요청을 하나씩 가져와 각 요청마다 동기식 I/O 호출을 수행합니다. I/O 요청이 완료되어 I/O 호출이 반환되면, 해당 요청을 처리하던 InnoDB 백그라운드 스레드는 I/O 완료 루틴을 호출하고 다음 요청을 처리하기 위해 돌아갑니다.
병렬로 처리될 수 있는 요청 수는 _n_이며, _n_은 InnoDB 백그라운드 스레드의 수입니다. InnoDB 백그라운드 스레드의 수는 innodb_read_io_threads 및 innodb_write_io_threads에 의해 제어됩니다. Section 17.8.5, “Configuring the Number of Background InnoDB I/O Threads”를 참조하십시오.
native AIO를 사용하는 경우, 쿼리 스레드는 I/O 요청을 직접 운영 체제로 보내므로 백그라운드 스레드 수에 의해 부과되던 제한이 제거됩니다. InnoDB 백그라운드 스레드는 완료된 요청을 알리는 I/O 이벤트를 기다립니다. 요청이 완료되면, 백그라운드 스레드는 I/O 완료 루틴을 호출하고 I/O 이벤트를 기다리는 작업으로 다시 돌아갑니다.
native AIO의 장점은 SHOW ENGINE INNODB STATUS 출력에서 보통 많은 대기 중인 읽기 및 쓰기가 나타나는, I/O 부하가 심한 시스템에서의 확장성입니다. native AIO 사용 시 증가하는 병렬 처리로 인해, I/O 스케줄러의 유형이나 디스크 어레이 컨트롤러의 특성이 I/O 성능에 더 큰 영향을 미치게 됩니다.
I/O 부하가 심한 시스템에서 native AIO의 잠재적인 단점은 한 번에 운영 체제로 보내지는 I/O 쓰기 요청 수에 대한 제어가 부족하다는 점입니다. 병렬 처리를 위해 운영 체제에 너무 많은 I/O 쓰기 요청이 보내질 경우, I/O 활동 양과 시스템 능력에 따라 어떤 경우에는 I/O 읽기 기아(read starvation)가 발생할 수 있습니다.
OS의 비동기 I/O 서브시스템 문제로 인해 InnoDB가 시작되지 못하는 경우, innodb_use_native_aio=0으로 서버를 시작할 수 있습니다. 또한 InnoDB가 tmpdir 위치, tmpfs 파일 시스템, 그리고 tmpfs에서 비동기 I/O를 지원하지 않는 Linux 커널의 조합과 같은 잠재적인 문제를 감지하면, 시작 시 이 옵션이 자동으로 비활성화될 수 있습니다.
17.8.5 Configuring the Number of Background InnoDB I/O Threads
17.8.7 Configuring InnoDB I/O Capacity