본문 바로가기

프로그래밍언어/DB

MYSQL 아키텍처 - 스토리지 엔진

SHOW ENGINES

 

 

InnoDB

 MySql 8.0의 기본 스토리지 엔진이며 보편적으로 가장 많이사용함 (오라클과 유사한 구조)

 -  성능이 뛰어나고 commit,rollback 및 장애 복구 기능을 가지고 있으며, 결제 정보와 같이 무결성을 필요로하고 손실되면 안되는 데이터들이 필요할 때 사용 (ACID,  원자성,일관성,격리성,내구성)

 - 핵심 특징은 Buffer Pool을 사용하여 디스크상의 Data파일이나 인덱스 정보를 메모리에 캐시 해두어, 디스크의 I/O를 줄  일 수 있고 , 프라이머리키를 기준으로 클러스터링 되어 저장되는데, 키값 순서대로 디스크에 저장이되어 스캔히 상당히 빠름 

   - InnoDb에서만 사용가능한 외래키는 참조 대상값이 바뀌는 것에 대한 보장을 할 수 있음(데이터의 무결성) , 단 잠금(lock)을 발생시키기도 함

 

 

MyISAM

 -  InnoDb보다 훨씬 심플하고 빠르지만  동시성 제어가 어려움 ,(MYSQL 5.5 이전까지 기본 스토리지 엔진)

 - FULL TEXT 인덱싱 ( 텍스트로 구성된 문자열 데이터의 내용을 가지고 생성한 인덱스 ) ,  압축, 함수(지리정보시스템) 등 여러 유효기능을 제공

 - 트랙잭션을 지원하지않음

 - InnoDB의 Buffer Pool과 유사한 역할을 하는 Key Cache라는 메모리 영역이 존재하며, MyISAM 테이블의 인덱스를 저장하기 위해 미리 할당된 영역. 테이블 Data는 캐시나 버퍼링 기능이 없기 때문에 항상 디스크를 사용.

 - 동시 삽입을 지원하기 때문에 대량의 insert를 수행할 때 적합

 - 읽기 전용 또는 읽기 위주의 작업에 적합하며 주로 Read 쿼리가 많은 DW(데이터 웨어하우스) 환경에서 많이 사용

 

 

 

FEDERATED 

 -  데이터를 자체 스토리지에 저장하지 않고 , 원격 MySQL서버 내의 테이블을 참조한다, 즉 모든 작업에 있어서 원격 서버에 연결한다고 볼 수 있다. (분산 Data 환경에 권장)

 - 특유의 작동 방식 때문에 기본키를 이용한 단일 행 조회나 원격 서버에 실행 될  insert쿼리에 가장 유용하지만 집계나 조인 또는 기본적인 작업에는 성능이 떨어짐

  - Remote서버와  Local 서버로 구성되는데  

       Remote서버는  MyiSam또는 InnoDB를 포함해 Remote서버에서 지원하는 모든 유형의 스토리 엔진을 사용 가능하며,    Local서버는 Remote서버의 테이블 정의와 일치하는 테이블이 필요하며 Federated  엔진으로 테이블을 구성해야함.   Local 서버는 실제 Data파일이 없으며, 테이블 정의 시  Remote서버 테이블을 가리키는  커넥션 정보를 포함함

   

 

MEMORY(Heap)

 -  메모리에 Data를 저장하는 스토리 엔진으로 , I/O 효율이 다른엔진에 비해 좋음 .  단 , Data를 유실할 가능성이 있음. (중요도가 낮아도 빠른 처리가 필요한 임시테이블에 많이 사용)

 -  트랜잭션을 지원하지않고, table-level locking(ex. 테이블 전체를 잠궈 10개 제품중 한개를 살때 나머지 9개는 살 수 없음)을 사용

 - Data 조회, Mapping , 주기적으로 집계되는 data의 캐시, Data 분석 시 중간 결과 저장에 많이 사용됨

 

 

BLACKHOLE

 - 저장 메카니즘을 전혀 갖고 있지 않으며 ,  insert해도 빈 결과값만을 반환함

 - Dump 파일 구문 확인 , 스토리지 엔진 자체와 관련 없는 성능 관련 병목현상 탐색에 사용됨

 

 

 

참조

-https://offbyone.tistory.com/225

-https://nomadlee.com/mysql-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84-%EC%A2%85%EB%A5%98-%EB%B0%8F-%ED%8A%B9%EC%A7%95/

-https://blog.ex-em.com/1680