서버 엔진
- Table Join, Group By, Order By와 같은 일반적인 SQL 처리부터 Function/Procedure, Trigger, Constraint 기능
- 사용자가 쿼리를 날렸을 때, DB가 SQL을 이해할 수 있도록 쿼리를 재구성함
스토리지 엔진
- 물리적인 저장장치에 데이터를 읽어오는 역할을 한다.
- 플러그인 방식으로 동작한다. (여러개의 스토리지 엔진을 설치하여 사용할 수 있다)
- 지금도 새로운 플러그인이 개발되고 있다. (그래서 다른 어떤 DBMS보다 강력하다고 할 수 있다.)
MyISAM 스토리지 엔진
- MySQL에서 가장 오래된 스토리지 엔진
- 파일 기반 스토리지 엔진 (데이터에 대한 키, 즉 인덱스만 메모리에 올려서 처리한다.)
- 트랜잭션을 지원하지 않고 테이블 단위 잠금으로 데이터를 변경 (따라서 특정 테이블의 여러 세션에서 데이터를 변경하면 성능 저하 발생)
- 풀텍스트 인덱싱(텍스트 전문을 검색할 수 있음, 단 사용하면 테이블 파티셔닝을 사용할 수 없음)
- MySQL은 저사양 서버에 구동하기 위한 목적으로 고안된 스토리지 엔진( 따라서 다양한 기법으로 압축함)
- 동시 데이터를 처리하는 것에서는 한계가 있음(프리픽스 인덱스 압축기법)
- 로그 수집 또는 단순 SELECT에는 적합하나 동시 데이터 처리에는 한계가 있다.
InnoDB 스토리지 엔진
- 유일하게 트랜잭션을 지원하는 스토리지 엔진 (일반적으로 가장 많이 사용)
- 다중 버전 동시성 제어 매커니즘을 제공
- 인덱스와 데이터를 모두 메모리에 올린다.
- 메모리에 인덱스와 데이터가 적재되어 있기 때문에 메모리 버퍼 크기가 DB성능에 큰 영향을 미친다.
- Primary Key는 클러스터 인덱스로 구성된다. (Primary Key가 정의되어 있지 않으면 Unique Key, Unique Key도 정의도어 있지 않으면 내부적으로 6바이트 만들어서 Primary Key로 사용 하지만 복제기능을 사용하고 있는다면 성능저하 이슈 업데이트가 많은 서버 ㅜㅜ )
- 가장 빠른 경로는 Primary Key를 통해서 접근하는 것
Archive 스토리지 엔진
- 로그 수집에 적합한 스토리지 엔진
- 데이터가 메모리상에서 압축되고 압축된 상태로 디스크에 저장되기 때문에 행 단위 잠금이 가능
- 한 번 INSERT 된 데이터는 UDPATE와 DELETE를 사용할 수 없으며 인덱스를 지원하지 않는다.
- 통계 서비스 기초 데이터를 백업할 때 Archive 스토리지 엔진을 사용하여 디스크 용량을 약 1/10 정도 절약할 수 있음. (트랜잭션이 크게 중요하지 않는 곳에 사용하면 좋음)
MySQL이 데이터를 처리하는 방식
- MySQL에서는 모든 SQL을 단일 코어에서 처리한다. (3rd-Partty 사용하면 병렬로도 가능은한데.. 기본은 단일임.)
따라서 Scale-Out 보다는 Scale-Up이 성능이 훨씬 좋음
- MySQL은 테이블 조인을 Nested Loop Join 알고리즘으로만 처리 (Block Nested Loop Join 향상된걸로 만들었음 지금은)
for안에 for 돌리는 이중 for이라고 보면된다. (따라서 A나 테이블 B 중 하나라도 연산해야 할 데이터가 많아지면 쿼리 효율이 기하급수적으로 떨어진다.)
'개인공부' 카테고리의 다른 글
MYSQL WHERE 조건 이해 (2) | 2022.03.15 |
---|---|
MySQL 쿼리 성능 진단 (0) | 2022.03.15 |
쿠버네티스 : 무작정 따라해보자. 초보자 / 듀토리얼 (1) | 2022.02.04 |
쿠버네티스 : minikube , kubelctl 로 시작해보기 (0) | 2022.02.04 |
YAML 문법 (1) | 2022.02.04 |