MySQL 엔진

hyungjunn·2024년 1월 11일

데이터베이스

목록 보기
3/14
post-thumbnail

MYSQL 전체 구조

MySQL의 전체 구조를 살펴보면 크게

  • 프로그래밍 API 부분
  • MySQL 서버 부분
  • 운영체제
    이렇게 3가지 부분으로 나눌 수 있다.

MySQL 엔진 아키텍쳐

MySQL 엔진

MySQL엔진은 커넥션 핸들러, 파서, 전처리기, 옵티마이저로 나뉜다.

스토리지 엔진

실제로 데이터를 처리하는 곳이다. 스토리지 엔진을 지정하면 지정된 스토리지 엔진이 작업들을 진행한다.

핸들러 API

MySQL 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽을 때 각 스토리지 엔진에 쓰기, 읽기를 요청하는데 이 요청을 핸들러라 한다. 사용되는 api를 핸들러 API라고 한다.

다음 명령어로 핸들러 API의 작업량을 볼 수 있다.

SHOW GLOBAL STATUS LIKE 'Handler%';

MySQL threading architecture

다음 명령어로 서버에서 실행 중인 쓰레드의 목록을 볼 수 있다.

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

마지막 줄을 보면 processlist_user가 root인걸 확인할 수 있다. 이 스레드만 실제 사용자의 요청을 처리하는 포그라운드 스레드이다.

포그라운드 스레드

  • 일정 개수의 스레드만 캐시에 존재하게끔 한다. 이 갯수는 thread_chache_size 시스템 변수로 설정한다.
  • 데이터를 버퍼, 캐시로부터 가져오고, 버퍼나 캐시에 없는 경우는 직접 데이터를 읽어 온다.

백그라운드 스레드

InnoDB는 여러 가지 작업이 백그라운드로 처리된다.

  • 인서트 버퍼(Insert Buffer)를 병합하는 스레드
  • 로그를 디스크로 기록하는 스레드
  • InnoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드
  • 데이터를 버퍼로 읽어 오는 스레드
  • 잠금이나 데드락을 모니터링하는 스레드

Reference

0개의 댓글