무료(유료도 있다!) Database로 가장 유명한 Mysql에 대해 알아보자.

8.0 내용은 따로 기술

  1. mysql을 구동하는데 쓰이는 설정 파일
  2. 글로벌 변수: 하나의 Mysql 인스턴스(클러스터)에서 전체적으로 영향을 미치는 변수
  3. 세션 변수: 클라이언트가 서버에 접속했을 때 영향을 미치는 변수

image-20201020-154633.png

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

image-20201020-161218.png