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 |