mariaDB - InnoDB란?

박병현·2022년 2월 12일
1

개요

서비스중인 mariaDB 의 전반적인 서비스속도가 상당히 느려지는 이슈가 발생했다.

해당 이슈를 해결하기위해 InnoDB에 대해 알아보게 됐고, InnoDB Buffer pool size가 부족하여 발생한 이슈임을 확인하였다.


mariadb 엔진 종류 및 특징

mysql은 주로 MyISAM, InnoDB 두가지 스토리지 엔진중 하나를 사용한다.

현재 진행중인 프로젝트의 mariaDB는 InnoDB 스토리지 엔진을 사용중이다.

MySQL 5.5 버젼 이후에는 InnoDB를 기본 스토리지 엔진으로 사용된다고 한다.


1) MyISAM
  • MyISAM은 Table과 Index를 각각 다른 파일로 관리
  • Read Only기능이 많은 서비스일 수록 MyISAM엔진이 효율적
2) InnoDB
  • 트랜잭션 처리가 필요하고 대용량의 데이터를 다루기 위해서는 InnoDB가 효율적
  • InnoDB는 Tablespace 개념을 사용한다.
  • innodb_system 이라는 테이블스페이스로 기본적으로 구성된다.
  • mysql 설치시 디폴트로 ibdata 파일이 있음
  • 환경변수 : innodb_data_file_path, innodb_data_home_dir

InnoDB 엔진 주요 특징

  1. InnoDB는 PK를 기준으로 클러스터링
  • 따라서, 다른 보조 Index보다 PK를 우선적으로 탐색하는 경향이 존재
  1. Oracle의 아키텍쳐 적용
  • MVCC(Multi version Concurrency Control) 및 테이블 스페이스 등 오라클에서 주로 사용되는 개념들이 적용됨

    MVCC : 락을 걸지않고 작업을 수행함으로써, 다른 트랜잭션이 갖고있는 락을 기다리지않고 읽기작업이 가능


InnoDB 구조 및 아키텍처

InnoDB는 In-memory 구조로, 데이터와 인덱스를 메모리에 캐싱하기 위한 버퍼 풀이라는 저장 영역을 유지 관리한다.

주요 구성으로는 Buffer Pool, Log Buffer, Change Buffer 등으로 구성된다.

본 페이지에서는 Buffer Pool에 대해서만 간략히 알아보겠습니다.

✔ Buffer Pool

InnoDB가 액세스할 때 테이블 과 인덱스 데이터를 캐시하는 메인 메모리영역입니다.

해당 영역은 메모리로부터 데이터를 직접 처리할 수 있게하여 처리속도를 향상시킵니다.

dedicated server의 경우, 물리 메모리의 최대 80%까지 버퍼풀이 할당됩니다.

효과적으로 읽기 작업을 하기 위해서 버퍼 풀은 여러 행을 보유할 수 있는 페이지들로 나눠집니다.

위와 같은 LRU 방식으로 버퍼풀에 새로운 페이지를 추가시킨다.

  • Head(상단) : 최근에 액세스한 새로운 page의 서브리스트
  • Tail(하단) : 비교적 덜 최근에 액세스한 page의 서브리스트

LRU 방식을 활용하여 자주 액세스하는 데이터를 메모리에 유지시킨다.(?)

profile
AI Developer

0개의 댓글