14.10.1 InnoDB 디스크 I/O
InnoDB
는 가능하면 I / O 작업을 처리하기 위해 여러 스레드를 생성하여 비동기 디스크 I / O를 사용합니다. 이를 통해 I / O가 아직 진행중인 동안에도 다른 데이터베이스 작업을 계속할 수 있도록합니다. Linux 및 Windows 플랫폼에서는 InnoDB는 사용 가능한 OS 및 라이브러리 함수를 사용하여 "기본"비동기 I / O를 수행합니다. 다른 플랫폼의 경우도, InnoDB는 계속 I / O 스레드를 사용하지만 이러한 스레드가 실제로는 I / O 요청의 완료를 기다릴 수 있습니다. 이 기술은 "시뮬레이션 된"비동기 I/O라고합니다.
예측
InnoDB는 데이터가 곧 필요하게 될 가능성이 높다고 판단 할 경우 예측을 수행하여 그 데이터를 메모리에서 사용할 수 있도록 버퍼 풀로 이동합니다. 연속적인 데이터에 대해서는 몇 가지 큰 읽기 요청을 만드는 것이 여러 확산 작은 요청을 만들려면보다 효율적인 경우가 있습니다. InnoDB는 두 개의 예측에 관한 경험칙이 있습니다.
순차 예측에서는, 테이블 스페이스 내의 세그먼트에 대한 액세스 패턴이 시퀀셜 인 것을 알게되면
InnoDB
는 데이터베이스 페이지 읽기의 배치를 I / O 시스템에 미리 전송합니다.랜덤 예측에서는, 테이블 스페이스 내의 일부 영역이 버퍼 풀에 완전히 읽고있는 중임을 발견하면
InnoDB
는 나머지 읽기 I / O 시스템에 보냅니다.
이중 쓰기 버퍼
InnoDB
는 이중 기입 버퍼 로 불리는 구조에 관련한 참신한 파일 플래시 기법을 사용하고 있습니다. 이것은 기본적으로 활성화되어 있습니다 ( innodb_doublewrite=ON
). 따라서 충돌이나 정전 후 복구의 안전성이 높아질뿐만 아니라 fsync()
조작의 필요성이 줄어들 기 때문에 거의 모든 종류의 Unix에서 성능이 향상됩니다.
데이터 파일에 페이지를 쓰기 전에 InnoDB
는 먼저 그 페이지를 이중 쓰기 버퍼라는 연속 된 테이블 스페이스 영역에 씁니다. 이중 쓰기 버퍼에 기록하고 플래시가 완료된 후에 비로소 InnoDB
는 그 페이지를 데이터 파일의 적절한 위치에 기입합니다. 페이지 쓰기 중에 운영 체제, 스토리지 서브 시스템 또는 mysqld 프로세스의 충돌 (그에 따른 손상 페이지 의 상태)가 발생했을 경우, InnoDB
는 나중에 복구하는 동안 해당 페이지의 정상적인 사본을 이중 쓰기 버퍼 에서 찾을 수 있습니다.