책/RealMySQL8.0

MySQL Engine Architecture

kkkkkdddddhhhhh 2024. 8. 3. 14:45

mysql 서버는 

사람의 머리 역할을 담당하는 MySQL Engine

손발 역할을 담당하는 storage Engine 으로 구분 가능.

 

SQL Parser , Optimizer ... -> MySQL Engine

Data 를 Disk에 저장하거나 Disk에서 읽어오는 역할 -> Storage Engine

 

MySQL Engine은 단 한개지만 

Storage Engine은 여러개를 동시에 사용 가능. 따라서 

CREATE TABEL Query에서 각각의 Storage Engine을 지정해 사용이 가능하다. 

CREATE TABLE inno_db_table (foo INT) ENGINE=INNODB;

 

MySQL Engine 작업 중 데이터를 쓰거나 읽기가 필요할 때 Storage Engine에 쓰기 또는 읽기 요청을 하는데,

이 때의 요청을 Handler 요청이라하며 사용되는 API 를 핸들러 API라 한다.

 

MySQL Thread 구조 

크게 ForeGround 와 BackGround 로 나뉜다. 

외부에서 실제 사용자 요청을 처리하는 스레드는 thread/sql/one_connection 

backGround 스레드는 가변적으로 변할 수 있다.

 

Fore Ground

포그라운드는 MySQL 서버에 접속한 클라이언트 수만큼 존재하며 

클라이언트 사용자가 요청하는 쿼리문을 처리한다. 

클라이언트 사용자가 작업을 마치고 커넥션을 종료하면 해당 커넥션 스레드는 Thread Cache로 되돌아간다. 

이 때,

이미 스레드 캐시에 일정 갯수의 대기중인 스레드가 있다면 스레드 캐시에 보내지않고 스레드를 종료시켜 

스레드 캐시에는 일정 개수의 스레드만 존재하도록 한다. 

이 스레드 캐시의 스레드 개수의 좆어은 thread_cache_size 변수로 조정이 가능함.

 

Back Ground

백그라운드는 스토리지 엔진을 InnoDB로 사용시 여러가지 작업이 백그라운드에서 실행된다.

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

 

' > RealMySQL8.0' 카테고리의 다른 글

트랜잭션과 잠금 1  (3) 2024.10.10
실행 계획 2  (0) 2024.08.05
실행 계획 1  (0) 2024.08.04