서비스중인 mariaDB 의 전반적인 서비스속도가 상당히 느려지는 이슈가 발생했다.
해당 이슈를 해결하기위해 InnoDB에 대해 알아보게 됐고, InnoDB Buffer pool size가 부족하여 발생한 이슈임을 확인하였다.
mysql은 주로 MyISAM
, InnoDB
두가지 스토리지 엔진중 하나를 사용한다.
현재 진행중인 프로젝트의 mariaDB는 InnoDB 스토리지 엔진을 사용중이다.
MySQL 5.5 버젼 이후에는 InnoDB를 기본 스토리지 엔진으로 사용된다고 한다.
Tablespace
개념을 사용한다. MVCC : 락을 걸지않고 작업을 수행함으로써, 다른 트랜잭션이 갖고있는 락을 기다리지않고 읽기작업이 가능
InnoDB는 In-memory 구조로, 데이터와 인덱스를 메모리에 캐싱하기 위한 버퍼 풀이라는 저장 영역을 유지 관리한다.
주요 구성으로는 Buffer Pool
, Log Buffer
, Change Buffer
등으로 구성된다.
본 페이지에서는 Buffer Pool에 대해서만 간략히 알아보겠습니다.
InnoDB가 액세스할 때 테이블 과 인덱스 데이터를 캐시하는 메인 메모리영역입니다.
해당 영역은 메모리로부터 데이터를 직접 처리할 수 있게하여 처리속도를 향상시킵니다.
dedicated server의 경우, 물리 메모리의 최대 80%까지 버퍼풀이 할당됩니다.
효과적으로 읽기 작업을 하기 위해서 버퍼 풀은 여러 행을 보유할 수 있는 페이지들로 나눠집니다.
위와 같은 LRU 방식으로 버퍼풀에 새로운 페이지를 추가시킨다.
LRU 방식을 활용하여 자주 액세스하는 데이터를 메모리에 유지시킨다.(?)