14.2.13.5 삽입 버퍼
종종 데이터베이스 응용 프로그램은 새로운 행이 기본 키의 오름차순으로 삽입됩니다. 이 경우 클러스터 된 인덱스의 순서가 기본 키와 동일하다는 레이아웃을 위해, InnoDB 테이블에 삽입 할 때 디스크에서 랜덤 읽기가 필요하지 않습니다.
한편 일반적으로 보조 인덱스는 고유 아니라 보조 인덱스에 삽입 비교적 무작위 순서로 발생합니다. 마찬가지로, 삭제 및 업데이트가 보조 인덱스의 인접하지 않은 데이터 페이지가 영향을받을 가능성이 있습니다. 따라서 InnoDB
에서 특별한 메커니즘을 사용하지 않고 다수의 임의의 디스크 I / O가 발생합니다.
인덱스 레코드를 삽입하거나 삭제 대상으로 표시하거나 고유하지 않은 보조 인덱스에서 제거 할 때 InnoDB
가 보조 인덱스가 버퍼 풀 에 존재하는지 여부를 확인합니다. 이에 해당하는 경우, InnoDB
에 의해 변경이 직접 인덱스 페이지에 적용됩니다. 버퍼 풀 인덱스 페이지를 찾을 수없는 경우, InnoDB
에 의해 삽입 버퍼 라는 특별한 구조로 변경이 기록됩니다. 삽입 버퍼는 버퍼 풀에 완전히 수용되도록 크기가 작고 유지되기 때문에 변화를 아주 빠르게 적용 할 수 있습니다. 이 프로세스는 변경 버퍼 라고합니다. (이전에는 삽입에만 적용되어 있었기 때문에, 삽입 버퍼라고했습니다. 데이터 구조는 계속 삽입 버퍼라고합니다.)
삽입 버퍼를 비우기 위해 디스크 I / O
삽입 버퍼는 데이터베이스의 보조 인덱스 트리에 정기적으로 병합됩니다. 많은 경우 여러 변경을 인덱스 트리의 같은 페이지에 병합 할 수 있으므로 디스크 I / O 작업을 줄일 수 있습니다. 삽입 버퍼에 의해 테이블에 삽입 속도가 최대 15 배 늘어날 것으로 측정되어 있습니다.
삽입 버퍼 병합은 트랜잭션이 커밋 된 후에 발생 계속 수 있습니다. 사실, 이것은 서버가 종료하고 다시 시작한 후까지 계속 발생 가능성이 있습니다 ( 섹션 14.19.2 "InnoDB 복구 강제 실행" 을 참조하십시오).
많은 보조 인덱스가 갱신 될 필요가 있고, 많은 행이 삽입 된 경우, 삽입 버퍼 병합에 많은 시간이 걸릴 수 있습니다. 이 기간은 디스크 I / O가 증가합니다. 따라서 디스크에 부하가 걸리는 쿼리는 상당히 느려집니다. 또 하나의 중요한 백그라운드 I / O 작업은 퍼지 스레드 입니다 ( 섹션 14.2.12 "InnoDB 멀티 버전" 을 참조하십시오).