Search
Duplicate
📒

[Database Study] 01-x. 대용량 시스템 이해, MySQL 소개

상태
미진행
수업
Database Study
주제
SQL
연관 노트
3 more properties
참고

MySQL 엔진 아키텍쳐

NOTE
MySQL 서버는 사람의 머리 역할을 담당하는 MySQL 엔진손발 역할을 담당하는 스토리지 엔진으로 구분할 수 있다
조금 더 친숙하게 보기위한 그림
기본적인 MySQL 서버 엔진 아키텍쳐
대부분의 작업이 MySQL엔진에서 처리되고, 데이터 읽기/쓰기 만 Storage 엔진에서 처리
MySQL 서버는 크게 MySQL 엔진과, 스토리지 엔진으로 구분할 수 있다.
손과 발 역할을 담당하는 스토리지 엔진은 핸들러 API를 만족하면 누구든지 구현하여 MySQL에 추가할 수 있다.

MySQL 엔진

NOTE
요청된 SQL 문장을 분석하고 최적화환다.
MySQL 엔진에는 좌측 4가지가 들어간다.
MySQL 엔진 흐름
전처리기, 옵티마이저, SQL Parser, Connection Handler 등이 포함된다.
실직적인 데이터 읽기/쓰기를 제외하고 Group byOrder 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에 위임하고, 서버는 상태관리를 하지 않는다.

대용량 시스템 맛보기

NOTE
최종적인 아키텍쳐인데 많은 내용이 들어가 있다. (DB 이중화, CDN 추가, CQRS ..)