Jane-s-Lab / books

since 2022.04.28
0 stars 0 forks source link

[4장] 인덱스 #7

Open janeljs opened 2 years ago

janeljs commented 2 years ago

04. 아키텍처

4.1 MySQL 엔진 아키텍처

4.1.1 MySQL 전체 구조

4.1.1.1 MySQL 엔진

4.1.1.2 스토리지 엔진

4.1.1.3 핸들러 API

4.1.2 MySQL 스레딩 구조

SELECT thread_id, name, type, processlist_user, processlist_host
FROM performance_schema, threads ORDER BY type, thread_id

4.1.2.1 포그라운드 스레드(클라이언트 스레드)

클라이언트 사용자가 요청하는 쿼리 문장을 처리하는 스레드

4.1.2.2 백그라운드 스레드

4.1.3 메모리 할당 및 사용 구조

4.1.4 플러그인 스토리지 엔진 모델

4.1.5 컴포넌트

기존의 플러그인 아키텍처를 컴포넌트 아키텍처로 대체 중

4.1.6 쿼리 실행 구조

SQL 요청
-> MySQL 엔진
  -> 쿼리파서
  -> 전처리기
  -> 옵티마이저 (DBA 핵심역량)
  -> 쿼리 실행기
-> 스토리지 엔진(핸들러)
  - InnoDB, MyISAM, Memory
-> SQL 결과

4.1.7 복제(Replication)

4.1.8 쿼리 캐시(Query Cache)

버그 투성이라서 지금은 완전히 제거됨

4.1.9 스레드 풀

돈을 내야하는 엔터프라이즈 에디션에서만 지원하는 기능

일반적인 쓰레드 풀 구조

4.1.10 트랜잭션 지원 메타 데이터

4.2 InnoDB 스토리지 엔진 아키텍처

InnoDB 가 스토리지 엔진 중 유일하게 레코드 기반의 잠금을 제공

4.2.1 프라이머리 키에 의한 클러스터링

4.2.2 외래 키 지원

4.2.3 MVCC(Multi Version Concurrency Control)

4.2.4 잠금 없는 일관된 읽기(Non-Locking Consistent Read)

4.2.5 자동 데드락 감지

4.2.6 자동화된 장애 복구

4.2.7 InnoDB 버퍼 풀

4.2.8 Double Write Buffer

4.2.9 언두 로그(Undo Log)

4.2.10 체인지 버퍼

4.2.11 Redo 로그 및 로그 버퍼

4.2.12 어댑티브 해시 인덱스

4.2.13 InnoDB 와 MyISAM, MEMORY 스토리지 엔진 비교

결론: InnoDB 가 짱이다!

4.3 MyISAM 스토리지 엔진 아키텍처

InnoDB 가 짱이므로 자세한 설명은 생략한다.

4.3.1 키 캐시

InnoDB 의 버퍼 풀과 비슷한 녀석

4.3.2 운영체제의 캐시 및 버퍼

InnoDB 보다 후져서 운영체제의 캐시 및 버퍼를 직접 사용한다.

4.3.3 데이터 파일과 프라이머리 키(인덱스) 구조

4.4 MySQL 로그 파일

MySQL 서버가 맛탱이가 갔을 때, 다음 로그들을 보면 좋다.

4.4.1 에러 로그 파일

4.4.2 제너럴 쿼리 로그 파일(제너럴 로그 파일, General log)

4.4.3 슬로우 쿼리 로그