무료(유료도 있다!) Database로 가장 유명한 Mysql에 대해 알아보자.
8.0 내용은 따로 기술
- mysql을 구동하는데 쓰이는 설정 파일
- 글로벌 변수: 하나의 Mysql 인스턴스(클러스터)에서 전체적으로 영향을 미치는 변수
- 세션 변수: 클라이언트가 서버에 접속했을 때 영향을 미치는 변수

- Mysql 엔진
- 커넥션 풀(핸들러): 인증/접속 제한/쿼리 요청을 처리한다
- 파서: 쿼리 해석 및 객체 권한 체크
- 옵티마이저: 쿼리 최적화
- 캐시/버퍼: MyISAM 또는 InnoDb의 버퍼 풀
- 스토리지 엔진
- 쿼리 실행기에서 데이터를 읽거나 쓸 때 스토리지 엔진을 통해 작업을 진행한다
- 데이터의 읽기/쓰기 영역을 주로 담당하며 핸들러 API 를 통해 Mysql 엔진과 통신한다
- 다양한 엔진이 존재한다
- 스레드 구조
- mysql은 스레드 기반으로 동작하며 크게 foreground와 background 로 구분한다
- foreground
- 클라이언트가 요청하는 쿼리를 처리하는 스레드
- 접속한 클라이언트 수 만큼 존재한다
- innoDb는 데이터 버퍼와 캐시만 이 스레드가 작업을 처리한다
- background
- 인서트 버퍼 병합, 로그 기록, 버퍼를 디스크 기록과 같은 중요 작업을 처리한다
- innodb에서는 주로 이곳에서 디스크 관련 작업이 일어난다
- 메모리 구조
- 크게 글로벌 메모리 영역과 로컬(세션) 영역으로 구분된다
- 글로벌 영역
- 서버 전체에서 하나로 공유해서 사용하는 메모리 영역
- 버퍼 풀,
쿼리 캐시, 테이블 캐시, 로그 버퍼가 존재한다
- 로컬 영역
- 클라이언트 스레드가 쿼리를 처리하는데 사용하는 영역
- 커넥션 버퍼, 정렬 버퍼, 조인 버퍼가 존재한다
-
쿼리 실행 구조
- 쿼리 파서 → 전 처리기 → 옵티마이저 → 쿼리 실행기→ 스토리지 엔진(핸들러) → 결과
- 쿼리 파서: 쿼리 문장을 토큰 단위로 분해하여 트리를 생성한다
- 전 처리기: 해당 객체 ( 테이블, 칼럼) 존재 여부와 접근 권한 등을 확인한다
- 옵티마이저: 쿼리 문장을 어떻게 처리 할지 결정하는 역할
-
InnoDB
- Mysql에서 가장 많이 사용되는 스토리지 엔진

- 특징
- 프라이머리키(PK)에 의한 클러스터링: PK를 기준으로 클러스터링 되어 저장된다. 즉, 키 값의 순서대로 디스크에 저장된다
- 무 잠금 일관된 읽기: MVCC( 하기 기술 ) 를 이용하여 락을 걸지 않고 읽기 작업을 수행한다
- 외래키 지원
- 자동 데드락 감지
- 자동화된 장애 복구