참고
MySQL 엔진 아키텍쳐
NOTE
MySQL 서버는 사람의 머리 역할을 담당하는 MySQL 엔진과 손발 역할을 담당하는 스토리지 엔진으로 구분할 수 있다
조금 더 친숙하게 보기위한 그림
기본적인 MySQL 서버 엔진 아키텍쳐
대부분의 작업이 MySQL엔진에서 처리되고, 데이터 읽기/쓰기 만 Storage 엔진에서 처리
•
MySQL 서버는 크게 MySQL 엔진과, 스토리지 엔진으로 구분할 수 있다.
•
손과 발 역할을 담당하는 스토리지 엔진은 핸들러 API를 만족하면 누구든지 구현하여 MySQL에 추가할 수 있다.
MySQL 엔진
NOTE
요청된 SQL 문장을 분석하고 최적화환다.
MySQL 엔진에는 좌측 4가지가 들어간다.
MySQL 엔진 흐름
•
전처리기, 옵티마이저, SQL Parser, Connection Handler 등이 포함된다.
•
실직적인 데이터 읽기/쓰기를 제외하고 Group by나 Order by 같은 복잡한 쿼리 처리는 모두 여기에서 처리된다.
•
MySQL은 표준 SQL(ANSI SQL)문법을 지원하기 때문에 표준 문법에 따라 작성된 다른 DBMS에서 사용하는 쿼리도 호환되어 실행이 가능하다.
Handler API
NOTE
MySQL 엔진의 쿼리 실행기가 데이터를 읽기/쓰기 할 때 스토리지 엔진에 요청해야하고, 이 요청에 사용하는 API를 Handler API라고 한다.
show global status like '%Handler%';
SQL
복사
대충 이러한 데이터가 나온다. (이게 뭔지는 모르겠다)
•
해당 API를 통해 얼마나 많은 레코드 작업이 있었는지 확인할 수 있다.
•
InnoDB Storage 엔진도 핸들러 API를 이용해 MySQL 엔진과 데이터를 주고 받게된다.
스토리지 엔진
NOTE
실제 데이터를 디스크에 저장하거나, 읽어오는 역할을 담당한다!
CREATE TABLE test (fd1 INT, fd2 INT) ENGINE=INNODB;
SQL
복사
특정 테이블에 특정 스토리지 엔진을 지정해둘 수 있다.
•
MySQL 서버에서 MySQL 엔진은 하나 밖에 존재 못하지만, Storage 엔진은 여러개를 동시에 사용할 수 있다.
•
엔진 성능을 향상 시키기위해서 key cache, buffer pool과 같은 기능을 내장하고 있다.
InnoDB 구조 및 아키텍처
NOTE
Transaction-safe한 Storage Engine으로 MySQL 5.5이후 기본적으로 사용되고 있다.
•
사용 이유
◦
대용량의 데이터를 컨트롤하는 경우
◦
트랜잭션 관리가 필요한 경우
◦
복구가 필요한 경우
◦
정렬등의 구문이 들어가는 경우
◦
IUD 등이 빈번하게 발생하는 경우
◦
높은 퍼포먼스가 필요한 대용량 사이트에 적합하다.
장점
•
데이터 무결성이 보장
•
동시성 제어가 가능
•
제약조건, 외래 키 생성이 가능
•
Row-level Lock을 사용하기 때문에 변경작업에 대한 속도가 빠름
단점
•
복구 방법이 어려움
•
Dead lock 발생 가능성 있음
•
시스템 자원을 많이 차지함
DB가 왜 병목이 되는가?
NOTE
스케일 업 → 컴퓨터 사양이 올라감
스케일 아웃 → 컴퓨터가 많아짐
스케일 아웃을 하면 여러 서버가 DB를 사용하게 됨..
•
DB를 사용하는데 있어서는 하나의 서버를 사용하는것처럼 보여야한다.
•
여러대의 서버를 사용하는데 있어 중요한건 무상태를 유지하는건데 DB는 데이터 상태를 유지함
◦
DB를 스케일 아웃하기 위해선 굉장히 신경쓸게 많아짐
•
현대 아키텍쳐는 상태관리를 DB에 위임하고, 서버는 상태관리를 하지 않는다.