본문 바로가기

CS/DataBase

(MySQL) MySQL 아키텍처

  • MySQL 엔진 아키텍처
  • InnoDB 스토리지 엔진 아키텍처

MySQL 엔진 구조

MySQL 엔진의 아키텍처는 크게 MySQL 엔진, 스토리지 엔진, 핸들러 API 이루어져 있다.

MySQL 엔진

MySQL 엔진은 클라이언트 요청을 처리하는 시작점이다.

커넥션 연결 및 쿼리에 대한 요청 및 최적화를 담당한다.

  • SQL 파서, 전처리기 (Query)
  • 옵티마이저 (Optimize)

스토리지 엔진

스토리지 엔진은 MySQL 엔진의 쿼리 실행기에서의 요청 데이터를 디스크에 저장하거나 읽어오는 역할을 담당한다.

대표적으로 InnoDB와 MyISAM이 존재한다.

각각의 스토리지 엔진은 처리 시 최적화를 진행한다.

  • InnoDB : 키 캐시
  • MyISAM : 버퍼 풀

핸들러 API

핸들러 API는 MySQL 엔진이 스토리지 엔진에게 디스크에 대한 요청 있을 때 사용되는 요청이다.

MySQL 엔진과 스토리지 엔진은 핸들러 API를 통해서 데이터를 주고받는다.

 

핸들러 확인

show global status like 'handler%';

MySQL 스레딩 구조

MySQL 서버는 프로세스 기반이 아닌 스레드 기반으로 동작하며 해당 스레드는 크게 포그라운드 스레드백그라운드 스레드로 이루어져 있다.

MySQL의 기본적은 스레드 처리 방식은 커넥션 별로 스레드가 생성되고 (1 : 1) 이를 스레드 캐시에 담아 재사용하는 방식이지만 
MySQL Enterprise Edition은 기본적으로 스레드 풀 방식 또한 사용 가능하다.

*MySQL Community Edition 또한 PlugIn을 사용하면 스레드 풀 사용 가능 (Percon Server)

스레드 목록 확인

select *
  from performance_schema.threads
;

 

스레드 정보 확인 (cached, connected, created, running)

show status like 'thread_%';

Thread cache miss rate

cache miss rate (%) = (Thread_created / connections) * 100

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

포그라운드 스레드는 버퍼, 캐시, 디스크로 부터 데이터를 읽어오는 작업을 처리한다.

  • InnoDB : READ
  • MyISAM : READ, WRITE

백그라운드 스레드

백그라운드 스레드는 데이터를 쓰고 로그를 기록하는 작업을 처리한다.

(읽어오는 작업은 포그라운드 스레드에서 대부분 담당하지만 백그라운드 스레드 또한 읽어오는 작업을 담당하는 경우도 있다.)

WRITE에 대한 작업은 무겁기 때문에 해당 작업은 버퍼링을 하여 일괄로 처리한다. (MyISAM은 해당사항 없음)

 

백그라운드 스레드의 종류 (InnoDB)

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

MySQL 쿼리 실행 구조

쿼리 파서

쿼리를 MySQL 서버가 인식할 수 있는 언어로 변환하는 역할 (ex Java Compiler)

쿼리 문장의 기본 문법 오류 발견

전처리기

쿼리에 구조적인 문제가 있는지 확인하는 역할

테이블명, 칼럼명 등

옵티마이저

쿼리를 가장 빠르게 처리할 수 있는 방안을 마련하는 역할

MySQL의 두뇌

실행 엔진

스토리지 엔진에게 요청하여 요청 결과를 전달하는 역할

MySQL의 손

Reference

https://book.interpark.com/product/BookDisplay.do?_method=detail&sc.shopNo=0000400000&sc.prdNo=353614840&sc.saNo=003002001&bid1=search&bid2=product&bid3=title&bid4=001 

 

싸니까 믿으니까 인터파크도서

생년월일 - 컴퓨터 공학을 전공하고 카카오에서 MySQL/MongoDB DBA로 근무하면서 DB 운영 및 트러블슈팅과 데이터 모델링, DBMS 도구 개발 및 신기술 벤치마킹을 수행했으며, 현재 당근마켓에서 MySQL/Mon

book.interpark.com

https://www.theopenforce.com/2006/11/new_mysql_stora.html

 

New MySQL Storage Engines

Back at our users conference in April we announced our pluggable storage engine program encouraging developers to extend MySQL with new innovative engines. Not only have we expanded our internal development with engines like Falcon, Cluster and others, but

www.theopenforce.com

https://dung-beetle.tistory.com/70

 

[튜닝] thread cache miss rate 1%를 향해 (mysql parameter tuning)

mysql에 thread_cache_size라는 것이 있다. 이것의 역할은 connection당 스레드를 생성하고 해제할 때 메모리를 할당하고 캐시할 메모리(192K or 256K)를 미리 생성해놓고 적절하게 관리하는 용도이다. 일종

dung-beetle.tistory.com

 

'CS > DataBase' 카테고리의 다른 글

(MySQL) MySQL 스토리지 엔진 아키텍처 - InnoDB  (0) 2022.08.31
(MySQL) MMM, MHA  (0) 2020.04.05
(MySQL) Transaction Isolation Levels  (0) 2020.03.29
(MySQL) Replication  (0) 2020.03.29
(MySQL) Direct I/O  (0) 2020.03.08