4.1 MySQL 엔진 아키텍처

4.1.1 MySQL의 전체 구조

Untitled

  1. MySQL 엔진

    표준 SQL(ANSI SQL) 문법을 지원하기 때문에 다른 DBMS(데이터베이스 관리 시스템)과 호환 가능

    1. 커넥션 핸들러 - 클라이언트로부터의 접속 및 쿼리 요청을 처리
    2. SQL 파서
    3. 전처리기
    4. 옵티마이저 - 쿼리의 최적화된 실행을 위해 사용
  2. 스토리지 엔진

  3. 핸들러 API

    핸들러 요청 - 쿼리 실행기에서 데이터를 읽거나 쓰기 위해 스토리지 엔진에 요청하는 것

    핸들러 API - 핸들러 요청에서 사용되는 API

    핸들러 API를 통한 데이터 작업 기록 보기
    SHOW GLOBAL STATUS LIKE 'Handler%';
    

4.1.2 MySQL 스레딩 구조

Untitled

실행 중인 스레드 목록 보기
SELECT thread_id, name, type, processlist_user, processlist_host
 FROM performance_schema.threads ORDER BY type, thread_id;
  1. 포그라운드 스레드(클라이언트 스레드)

    1. 서버에 접속된 클라이언트의 수만큼 존재
    2. 사용자가 요청하는 쿼리 문장 처리
    3. 커넥션 종료 시 스레드 캐시로 돌아감
    4. 캐시에 일정 개수 이상이 대기 중인 경우 스레드 종료
    5. thread_cache_size로 캐시 개수 설정
  2. 백그라운드 스레드

    InnoDB의 경우 여러 가지 작업이 백그라운드에서 처리

    쓰기 스레드의 경우 백그라운드에서 많은 작업을 처리하기 때문에 스레드가 많이 필요

    읽기는 지연되어 처리될 수 없다. (쓰기는 가능)

    MyISAM은 사용자 스레드가 쓰기 작업까지 함께 처리 - 쓰기 버퍼링 기능 사용 못함

4.1.3 메모리 할당 및 사용 구조

Untitled

MySQL의 메모리 공간은 크게 글로벌 영역과 로컬 메모리 영역으로 나눔

서버 시작 시 운영체제로부터 할당

  1. 글로벌 메모리 영역

    보통 클라이언트 스레드의 수와 무관하게 하나의 공간만 할당

    2개 이상 할당 받아도 스레드 수와 무관

    모든 스레드에 의해 공유

  2. 로컬 메모리 영역

    세션 메모리 영역이라고도 표현

    서버상의 클라이언트 스레드가 쿼리를 처리하는 데 사용

    로컬 메모리 영역의 크기를 주의해서 설정해야 함

    쿼리의 용도별로 필요할 때만 공간이 할당됨