Mysql의 서버엔진과 스토리지 엔진
데이터베이스/mysql

Mysql의 서버엔진과 스토리지 엔진

반응형

Mysql에는 두 가지 형태의 엔진이 존재한다. 

아래 그림에서 보면 하단에 길게 표시된 Pluggable 스토리지 엔진을 제외하고 위에 모든 부분이 서버엔진이다.


엔진별 특징 정리

서버엔진 (SQL Interface, Parser, Optimizer, Cache & Buffer)
- 클라이언트의 요청을 받아 SQL을 처리하는 DB 자체의 기능적인 역할을 수행 
- DB가 SQL을 이해할 수 있도록 쿼리를 파싱하고 메모리, 물리적 저장장치와 통신하는 기능을 수행
- 디스크와 직접적인 접근을 제외한 대부분의 역할 수행

스토리지 엔진
- 서버 엔진이 필요한 데이터를 물리적 장치에서 가지고 오는 역할을 수행
- 물리적 저장장치에서 데이터를 읽어오는 역할을 수행하고 플러그인 형식으로 여러 스토리지 엔진을 필요에 따라 추가 삭제 할 수 있다.
- 대표적 스토리지 엔진으로 MyISAM, InnoDB, CSV 등등이 있다. (8버전부터 MyISAM을 지원하지 않는것으로 알고 있다.)
- 다양한 사용 DBMS와의 호완성있게 동작하기 위해서 DB엔진에 최적화 되어있지는 않지만 범용성은 다른 DBMS보다 좋다. (카산드라나 스핑크스 등과도 연동 가능)


그럼 다른 DBMS와 다르게 유동적으로 플러그인처럼 변경이 가능한 Storage Engine에는 어떤 특징이 있을까 조금 더 알아보자.

대표적으로 존재하는 스토리지 엔진은 MyIsam과 InnoDB 스토리지 엔진이 존재한다. 
MyIsam 엔진
- 데이터는 디스크에서 인덱스와 키만 메모리에 적재해서 사용한다. 
- 트랜잭션을 지원하지 않고 테이블 단위 Lock 을 지원한다. (특정 테이블의 여러 세션에서 데이터를 변경하려 하면 성능저하. -> Lock 기준에 테이블이기 때문에 무조건 대기)
- 저사양 서버를 위해 고안된 방법으로 데이터 사이즈와 키, 인덱스를 압축해서 사용한다. 그렇기 때문에 인덱스가 필요한 검색기능이 추가된 테이블을 사용하기에 부적절

InnoDB 스토리지 엔진
- 트랜잭선이 지원, Concurrency control이 가능하고 행 단위 잠금으로 데이터 변경 작업 시 다른 사용자가 테이블에 접근할 수 있다. (MyIsam에 한계를 넘어선다.)
- 메모리에 인덱스와 데이터가 모두 적재되기 때문에 메모리 버퍼 커기가 DB 성능에 많은 영향을 끼치기 때문에 MyIsam보다 더 고사양의 서버를 요구한다.



다음에는 MySQL 성능 높이기 위한 프로파일링에 대해 공부해보자.



반응형