NW-book-club / Real-MySQL-8.0

Real MySQL 8.0
0 stars 0 forks source link

4장. 아키텍처 #3

Open jjy0918 opened 2 years ago

jjy0918 commented 2 years ago

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 스레딩 구조

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

4.1.2.2 백그라운드 스레드

4.1.3 메모리 할당 및 사용 구조

4.1.3.1 글로벌 메모리 영역

4.1.3.2 로컬 메모리 영역

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

4.1.5 컴포넌트

4.1.6 쿼리 실행 구조

4.1.6.1 쿼리 파서

4.1.6.2 전처리기

4.1.6.3 옵티마이저

4.1.6.4 실행 엔진

4.1.6.5 핸들러(스토리지 엔진)

4.1.7 복제

4.1.8 쿼리 캐시(Query Cache)

4.1.9 스레드 풀

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

KKambi commented 2 years ago

플러그인 vs 컴포넌트

플러그인은 단점

  1. MySQL 서버와만 인터페이스 가능, 플러그인끼리 통신 불가능
  2. 캡슐화X (MySQL 서버의 변수, 함수를 직접 호출)
  3. 상호 의존 관계 설정 불가 -> 초기화 어려움

MySQL 8.0부터 컴포넌트 도입!

스토어드 프로그램

프로시저, 함수, 테이블 트리거, 이벤트를 포함하는 용어

프로시저 - 여러 쿼리를 묶어놓은 집합 (여러 동작 일괄 처리) 함수 - Return 값을 반환하므로, 다른 SQL문장에 넣어 사용할 수 있음 테이블 트리거 - 테이블의 레코드가 저장되거나 변경될 때, 미리 정의된 작업을 자동으로 실행 이벤트 - 유저가 정의한 스케줄에 따라 실행되는 작업

글로벌 메모리 영역의 테이블 캐시?

MySQL 서버에서 사용되는 각 테이블의 메타 정보를 담고 있는 캐시

DAN? SAN?

DAS, SAN, NAS, ...

뭐가 다른데

DEFINER

권한 관련 용어, MySQL에서 Stored Procedure의 수행 권한과 관련있다.

VIEW

데이터베이스에 존재하는 일종의 가상 테이블

장점

  1. 특정 사용자에게 테이블 전체가 아닌, 필요한 필드만 보여줄 수 있음
  2. 복잡한 쿼리를 단순화시킬 수 있음
  3. 쿼리를 재사용할 수 있음 (이건 어떨 때인지?)

단점

  1. 한 번 정의된 뷰는 변경할 수 없음 (새로 생성해야 한다는 의미인듯)
  2. 삽입, 삭제, 갱신 작업에 제한이 크다.
  3. 뷰만을 위한 인덱스를 가질 수 없다.
jjy0918 commented 1 year ago

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

4.2.1 PK에 의한 클러스터링

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.7.1 버퍼 풀의 크기 설정

4.2.7.2 버퍼 풀의 구조

4.2.7.3 버퍼 풀과 리두 로그

4.2.7.4 버퍼 풀 플러시(Buffer Pool Flush)

4.2.7.5 버퍼 풀 상태 백업 및 복구

4.2.7.6 버퍼 풀의 적재 내용 확인

4.2.8 Double Write Buffer

KKambi commented 1 year ago

인덱스

메인메모리 I/O 속도 >>> 디스크 I/O 속도

클러스터링 인덱스

image InnoDB 스토리지 엔진은 테이블을 Primary key에 따라 클러스터링한다.

세컨더리 인덱스

image

Q. 어댑티브 해시 인덱스 = B-Tree 인덱스를 위한 보조 인덱스라고 보면 되는거지?

Online DDL

테이블 구조를 변경(=스키마 변경)을 실행하는 도중에도, INSERT나 UPDATE와 같은 DML을 실행할 수 있게 하는 기능 InnoDB는 3가지 알고리즘 지원

테이블스페이스

간단하게, 데이터가 저장되는 공간

InnoDB 테이블스페이스의 종류

  1. System : Shared Tablespace / 데이터 딕셔너리, 이중 쓰기 버퍼, 변경 버퍼 등의 저장 / 여기서 테이블 생성도 가능
  2. File-per-table : 하나의 InnoDB 테이블에 대한 Data 및 인덱스를 개별 파일로 관리하는 공간
  3. General : Shared Tablespace / 테이블스페이스 추가를 위한 용도
  4. Undo : 5.7 이후 시스템 테이블스페이스에서 분리
  5. Session Temporary : 세션 사용자가 생성한 임시 테이블 & 옵티마이저가 내부적으로 생성하는 임시 테이블
  6. Global Temporary : 사용자가 생성한 임시 테이블의 변경사항에 대한 롤백 세그먼트 저장
jjy0918 commented 1 year ago

4.2.9.2 언두 테이블스페이스 관리

4.2.10 체인지 버퍼

4.2.11 리두 로그 및 로그 버퍼

4.2.11.1 리두 로그 아카이빙

4.2.11.2 리두 로그 활성화 및 비활성화

4.2.12 어댑티브 해시 인덱스

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

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

4.3.1 키 캐시

4.3.2 운영체제의 캐시 및 버퍼

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

4.4 MySQL 로그 파일

4.4.1 에러 로그 파일

4.4.1.1 MySQL이 시작하는 과정과 관련된 정보성 및 에러 메시지

4.4.1.2 마지막으로 종료할 때 비정상적으로 종료된 경우 나타나는 InnoDB의 트랜잭션 복구 메시지

4.4.1.3 쿼리 처리 도중에 발생하는 문제에 대한 에러 메시지

4.4.1.4 비정상적으로 종료된 커넥션 메시지(Aborted connection)

4.4.1.5 InnoDB의 모니터링 또는 상태 조회 명령의 결과 메시지

4.4.1.6 MySQL의 종료 메시지

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

4.4.3 슬로우 쿼리 로그