본문 바로가기
MySQL별책부록

6. InnoDB의 Insert Buffer

by 모모레 2011. 5. 1.

-참고-
이글은 MySQL Reference 5.1의 내용을 번역한 겁니다.
영문과 함께 번역한거 공유합니다.

It is a common situation in database applications that the primary key is a unique identifier and new rows are inserted in the ascending order of the primary key. Thus, insertions into the clustered index do not require random reads from a disk.

Application에서 일반적으로 PK 정렬 순으로 새 데이터가 입력되는것이나 PK가 Unique identifier로 된것은 아주 일반적인 모스비다. 그래서 Clustered index의 insert는 디스크로 부터 random read를 요구하지는 않는다.

On the other hand, secondary indexes are usually nonunique, and insertions into secondary indexes happen in a relatively random order. This would cause a lot of random disk I/O operations without a special mechanism used in InnoDB

다른말로 바꾸면, Secondary Index는 항상 non-unique이고 Secondary index는 상대적으로 random order로 입력이 일어난다는 것을 의미한다. 이것은 InnoDB에서 사용하는 특별한 동작방법없이는 많은 random disk I/O를 발생시킬수있다는 것을 말한다.

If an index record should be inserted into a nonunique secondary index, InnoDB checks whether the secondary index page is in the buffer pool. If that is the case, InnoDB does the insertion directly to the index page. If the index page is not found in the buffer pool, InnoDB inserts the record to a special insert buffer structure. The insert buffer is kept so small that it fits entirely in the buffer pool, and insertions can be done very fast.

만약 non-unique Secondary index에 입력이 발생한다면 InnoDB는 secondary index 페이지가 buffer pool안에 있는지 없는지 체크하나. 만약 buffer pool안에 존재한다면, InnoDB는 즉시 그 페이지에 입력 작업을 진행한다. 만약 buffer pool안에서 해당 페이지를 찾지 못한다면, InnoDB는 특별한 insert buffer 구조체 안에 그 입력 내용을 저장한다. 이 insert buffer는 전체 buffer pool안에 맞게 작은 사이즈로 유지되고, 이 입력 작업은 매우 빠르게 진행될 수 있다.

Periodically, the insert buffer is merged into the secondary index trees in the database. Often it is possible to merge several insertions into the same page of the index tree, saving disk I/O operations. It has been measured that the insert buffer can speed up insertions into a table up to 15 times.

정기적으로 insert buffer는 데이터베이스안에 secondary index에 merge하는 작업을 진행한다. 디스크 IO작업을 saving하기 위해 index tree안의 같은 페이지에 속하는 여러 insert를 merge하는 것이 가능하다. insert buffer를 사용하면 약 15대의 insert속도를 빠르게 할 수 있음이 증명되어졌다.

The insert buffer merging may continue to happen after the inserting transaction has been committed. In fact, it may continue to happen after a server shutdown and restart (see Section 13.6.6.2, “Forcing InnoDB Recovery”).

insert buffer merging 작업은 트랜잭션이 완료된 후에 진행될 수 있다. 사실 이 작업은 서버의 restart 후에도 계속 이어질 수 있다.

Insert buffer merging may take many hours when many secondary indexes must be updated and many rows have been inserted. During this time, disk I/O will be increased, which can cause significant slowdown on disk-bound queries. Another significant background I/O operation is the purge thread (see Section 13.6.9, “InnoDB Multi-Versioning”).

insert buffer merging작업은 많은 secondary index에 update가 발생하고 많은 row가 insert될 때 많은 시간동안 동작될 수 있다. 이 작업이 진행되는 동안 Disk I/O는 증가될 것이기 때문에 디스크 관련 쿼리에 성능 영향을 줄 수 있다. 이것과 마찬가지로 I/O 작업으로 중요한 thread는 purge thread가 있다.