Loading...
MySQL 9.5 Reference Manual 9.5의 17.11.1 InnoDB Disk I/O의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
InnoDB는 가능한 경우 비동기식 디스크 I/O를 사용하며, 여러 개의 스레드를 생성하여 I/O 작업을 처리하는 동시에, I/O가 여전히 진행 중이더라도 다른 데이터베이스 작업이 계속 수행될 수 있도록 합니다. Linux 및 Windows 플랫폼에서는 InnoDB가 사용 가능한 OS 및 라이브러리 함수들을 사용하여 “native” 비동기식 I/O를 수행합니다. 다른 플랫폼에서는 InnoDB가 여전히 I/O 스레드를 사용하지만, 스레드가 실제로 I/O 요청이 완료될 때까지 기다릴 수 있습니다. 이 기법은 “simulated” 비동기식 I/O라고 알려져 있습니다.
InnoDB가 어떤 데이터가 곧 필요할 가능성이 높다고 판단할 수 있으면, 해당 데이터를 버퍼 풀로 가져오기 위한 read-ahead 작업을 수행하여, 그 데이터가 메모리에서 사용 가능하도록 합니다. 연속적인 데이터에 대해 몇 개의 큰 read 요청을 수행하는 것이 여러 개의 작고 흩어진 요청을 수행하는 것보다 더 효율적일 수 있습니다. InnoDB에는 두 가지 read-ahead 휴리스틱이 있습니다:
Sequential read-ahead의 경우, InnoDB가 테이블스페이스의 어떤 세그먼트에 대한 접근 패턴이 순차적이라는 것을 알아차리면, 미리 데이터베이스 페이지들의 read 배치를 I/O 시스템에 게시합니다.
Random read-ahead의 경우, InnoDB가 어떤 테이블스페이스 영역이 버퍼 풀로 완전히 read되는 과정에 있는 것처럼 보인다고 알아차리면, 남은 read들을 I/O 시스템에 게시합니다.
Read-ahead 휴리스틱을 설정하는 방법에 대한 정보는
Section 17.8.3.4, “Configuring InnoDB Buffer Pool Prefetching (Read-Ahead)”를 참조하십시오.
InnoDB는 doublewrite buffer라고 불리는 구조를 포함하는 새로운 파일 플러시 기법을 사용하며, 이 구조는 대부분의 경우 기본적으로 활성화되어 있습니다 (innodb_doublewrite=ON). 이 기법은 예기치 않은 종료 또는 전원 장애 이후의 복구에 대한 안전성을 추가하고, 대부분의 유닉스 계열에서 fsync() 작업의 필요성을 줄여 성능을 향상시킵니다.
데이터 파일에 페이지를 쓰기 전에, InnoDB는 먼저 해당 페이지를 doublewrite buffer라고 불리는 저장 영역에 기록합니다. Doublewrite buffer에 대한 write와 플러시가 완료된 후에야 InnoDB는 해당 페이지를 데이터 파일 내의 올바른 위치에 기록합니다. 페이지 write 도중에 운영 체제, 스토리지 서브시스템, 또는 예기치 않은 mysqld 프로세스 종료가 발생하여 torn page 상태를 유발하더라도, InnoDB는 나중에 복구 과정에서 doublewrite buffer로부터 해당 페이지의 올바른 사본을 찾을 수 있습니다.
Doublewrite buffer에 대한 자세한 내용은
Section 17.6.4, “Doublewrite Buffer”를 참조하십시오.
17.11 InnoDB Disk I/O and File Space Management
17.11.2 File Space Management