이전시간에 MySQL 서버의 5계층을 알아보았고, 그 중 스토리지 엔진이 최종적으로 데이터를 디스크에서 가져오는 역할을 한다는것을 알았음.
이번에는 스토리지 엔진이 정확하게 어떤 일을 하는지 알아보자.
데이터는 디스크에 저장해 보관하지만 디스크는 굉장히 느린 단점이 있다. 그래서 InnoDB는 자주사용하는 데이터는 메모리에 캐싱하고 전체 데이터는 디스크에 보관하는 방식으로 동작한다.
InnoDB는 그래서 크게 보면 메모리영역과 디스크 영역 두개로 나눠서 크게 그림을 그릴 수 있음.

InnoDB에서 가장 중요한 메모리 영역. 성능을 위해 데이터를 메모리에 임시 보관하는 캐시로 이해하면 된다. 버퍼 풀은 테이블 데이터와 인덱스 데이터들을 페이지라는 단위로 캐시한다. 페이지는 후술하겠지만, InnoDB가 데이터를 읽고 쓰는 최소 단위라고 이해하면 됨. 기본값은 16KB
버퍼풀의 히트율이 높을 수록 디스크I/O가 줄어들어 성능이 좋아진다. 보통 DB전용 서버라면 메모리의 80%까지 버퍼 풀로 할당하는걸 권장함.
버퍼풀의 크기를 다음처럼 직접 확인할 수도 있다.
SELECT @@innodb_buffer_pool_size / 1024 / 1024 AS buffer_pool_mb;

기본값인 128MB가 나온다. 아까도 말했지만 실제 운영하는 DB서버는 절대 기본값으로 안두고 메모리의 80%까지 버퍼풀에 할당해준다.
버퍼풀 외에도 여러 영역이 있지만 개발자가 쿼리 성능 최적화를 신경쓸때 가장 중요한건 버퍼 풀임. 그래서 나머지는 그냥 기타 영역으로 이런 것들이 있다 수준으로 알고 넘어가자.
디스크영역의 리두 로그
크래시 복구용 디스크 영역. InnoDB는 데이터 변경 전(커밋 전)에 리두 로그에 먼저 기록한다. 그래서 서버가 갑자기 죽어도 재시작시 리두 로그를 재생해 커밋된 트랜잭션을 복구한다.