MySQL(1)

오늘 배운 것

MySQL 아키텍처와 스레딩 구조 정리

MySQL 전체 구조

MySQL 서버는 크게 MySQL 엔진스토리지 엔진으로 나뉜다.

  • MySQL 엔진
    • MySQL의 두뇌 역할을 하는 계층
    • SQL 인터페이스, SQL 파서, SQL 옵티마이저, 캐시, 버퍼 등을 포함한다
    • 자바, C, .NET과 같은 프로그래밍 언어는 커넥션 핸들러(Connection Handler)를 통해 MySQL 엔진에 접속한다
  • 스토리지 엔진(Storage Engine)
    • MySQL의 손과 발 역할을 한다
    • 실제 데이터를 디스크 스토리지에 저장하거나 읽어온다
    • 대표적인 스토리지 엔진: InnoDB, MyISAM, MEMORY
    • 하나의 MySQL 서버에서 여러 스토리지 엔진을 동시에 사용할 수 있다
CREATE TABLE test_table (
    fd1 INT,
    fd2 INT
) ENGINE=INNODB;

위 쿼리로 생성한 test_table은 InnoDB 스토리지 엔진이 INSERT, UPDATE, SELECT 등을 처리한다.

각 스토리지 엔진은 고유의 기능을 내장한다. 예를 들어, MyISAM은 키 캐시(Key Cache) 기능을 지원한다.


핸들러 API (Handler API)

  • 커넥션 핸들러(Connection Handler):
    JDBC, CLI 등 클라이언트가 MySQL 서버에 접속할 때 연결을 생성·관리한다.

  • 핸들러 API:
    MySQL 엔진의 쿼리 실행기가 스토리지 엔진에 읽기·쓰기 요청을 보낼 때 사용하는 내부 인터페이스다.
    스토리지 엔진(InnoDB, MyISAM 등)은 이 API를 구현하여 MySQL 엔진과 데이터를 주고받는다.


MySQL 스레딩 구조

MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 동작한다.
Enterprise Edition이나 Percona MySQL 서버에서는 스레드 풀(Thread Pool) 모델을 사용하기도 한다.

  • 전통적인 스레드 모델
    • 커넥션마다 포그라운드 스레드가 1:1로 생성·할당된다
  • 스레드 풀 모델
    • 하나의 포그라운드 스레드가 여러 커넥션 요청을 순차적으로 처리한다

포그라운드 스레드 (Foreground Thread, 클라이언트 스레드)

  • MySQL에서 포그라운드 스레드 = 사용자 스레드(User Thread) 의미다
  • 클라이언트가 MySQL 서버에 접속하면 요청을 처리할 스레드를 할당한다
  • DBMS의 앞단에서 사용자와 직접 통신하므로 foreground thread라고 부른다
  • 사용자가 작업을 마치고 커넥션 종료 시 해당 스레드는 스레드 캐시(Thread Cache)로 반환한다
    • 캐시 대기 스레드가 thread_cache_size 이상이면 종료한다

포그라운드 스레드의 작업 범위

  • 공통: 데이터 버퍼나 캐시에서 데이터 읽기, 없으면 디스크/인덱스 파일에서 직접 읽는다
  • MyISAM: 디스크 쓰기 작업까지 포그라운드 스레드가 담당한다
  • InnoDB: 버퍼/캐시까지만 처리하고, 디스크 쓰기는 백그라운드 스레드가 담당한다

백그라운드 스레드 (Background Thread)

  • MyISAM: 대부분 작업이 포그라운드 스레드에서 처리되므로 백그라운드 스레드 역할이 제한적이다
  • InnoDB: 다음과 같은 작업들이 백그라운드 스레드에서 처리된다
    1. Insert Buffer 병합
    2. 로그를 디스크에 기록(Log Thread)
    3. InnoDB 버퍼 풀의 데이터를 디스크에 기록(Write Thread)
    4. 데이터를 버퍼로 읽어오기
    5. 잠금/데드락 모니터링

특히 Log ThreadWrite Thread가 매우 중요한 역할을 한다.

읽기 vs 쓰기 처리 방식

  • 읽기(SELECT): 지연 처리 없이 즉시 결과 반환 (버퍼링 없음)
  • 쓰기(INSERT/UPDATE/DELETE): InnoDB는 버퍼링 가능, MyISAM은 대부분 포그라운드에서 처리 → 버퍼링 효과 적다

내일 할 일

  1. 알고리즘, Real MySQL 다음부분 공부

results matching ""

    No results matching ""