SQL

MYSQL_ Thread, 쿼리 실행 구조

우당탕탕인생기 2023. 10. 18. 17:28

Mysql Thread 구조

Mysql 서버는 Mysql 엔진과 스토리지 엔진으로 스레드 기반으로 동작한다.

크게 Foreground thread 와 background thread로 구분된다.

 

Foreground thread

- 사용자 요청을 처리하며, 접솓된 클라이언트 수 만큼 존재 한다.

- connection이 종료되면 Thread cache로 돌아가며, 일정 수의 Tread cache가 있을 경우 종료 시킨다.

-  MyISAM의 경우 디스크 쓰기 작업도 여기서 진행한다.

 

Background thead

 

- InnoDB 버퍼 풀의 데이터를 디스크에 기록

- 데이터를 버포로 읽어오고 잠금, 데드락을 모니터링 한다.

- 로그를 디스크로 기록한다.

  •  

 

 


쿼리 실행 구조

다음은 쿼리의 실행 구조를 간단하게 표현한 것이다.

크게 mysql 엔진과 스토리지 엔진으로 구성되며 mysql 8.0으로 가면서, 그리고 앞으로 InnoDB의 역할이 더욱 커지고 MyISAm은 줄어들 것으로 보고 있다.

 

 

쿼리 파서

쿼리 파서는 사용자의 요청으로 들어온 쿼리 문장을 토근으로 인식할 수 있는 최소단위로 분리하여 트리 형태의 구조로 만들어 내는 작업을 의미한다. 여기서는 기본 문법 오류를 점검한다.

 

전처리기

파서 과정에서 만들어진 트리 기반의 문장을 구조적으로 문제가 있는지 점검한다.

이때 실제 존재하지않는 칼럼을 조회하거나, 권한상 사용할수 없는경우 이 단계에서 걸러진다.

 

옵티마이저

옵티마이저는 사용자의 요청으로 들어온 쿼리 문장을 가장 빠르게 처리하도록 도와준다.

 

 

실행엔진

실행엔진은 실제 요청받은 쿼리를 핸들러를 통해 임시데이터를 만들고 해당 데이터를 읽어보라고 지시한다.

여기서 핸들러란 실행엔지의 요청에 따라 데이터를 디스크로 저정하고 , 읽어오는 역할을 하는데, 결국 핸들러는 스토리지 엔진을 의미한다.

 

 

 

 

 

 

 

'SQL' 카테고리의 다른 글

MYSQL_ 트랜잭션 격리수준(isolation level)  (1) 2023.10.20
MySQL_ InnoDB 버퍼 풀  (0) 2023.10.18
MySQL_PRIVILEGES , Role  (0) 2023.10.17
MYSQL_ 사용자 생성 설정  (0) 2023.10.17
프로그래머스_Lv3_헤비 유저가 소유한 장소  (0) 2023.09.19