-
4장 1.6-7 쿼리 실행 구조 및 쿼리 캐시데이터베이스/Real MySQL 8.0 2022. 8. 11. 21:00
쿼리 실행 구조
다음은 쿼리 실행 구조를 간략하게 표현한 것입니다.
쿼리 파서
파싱이란, 어떤 구문을 분석해서, 구성 요소들을 토큰으로 만드는 것을 말합니다.
쿼리 파서는 사용자로부터 쿼리 문장이 들어오면, 쿼리를 파싱하여 트리 형태의 구조로 재구성하는 역할을 합니다.
기본 문법 오류는 파싱 과정에서 발견되어, 사용자에게 오류 메시지를 전달합니다.
전처리기
파서가 처리한 파서 트리를 기반으로 문장에 구조적인 문제점이 있는지 확인합니다.
테이블, 컬럼 또는 내장 함수와 같은 객체들의 존재 여부와 접근 권한이 있는지 확인하는 과정을 수행합니다.
객체가 존재하지 않거나 접근 권한이 없다면 전처리기가 오류 메시지를 전달합니다.
옵티마이저
쿼리 문장을 어떻게 저렴한 비용으로 가장 빠르게 처리할지를 결정하는, 일종의 알고리즘 집합입니다.
옵티마이저는 처리 속도에 큰 영향을 미치기 때문에
개발자는 옵티마이저가 더 나은 결정을 할 수 있도록 잘 유도해야 합니다.,
실행 엔진(쿼리 실행기)
실행 엔진은 만들어진 계획대로 각 핸들러에게 요청해서 받은 결과를
또 다른 핸들러 요청의 입력으로 연결하는 역할을 수행합니다.
옵티마이저가 GROUP BY를 처리할 때의 예시입니다.
- 실행 엔진이 핸들러에게 임시 테이블 생성을 요청합니다.
- 다시 실행 엔진은 WHERE 절에 일치하는 레코드(행)를 읽어오라고 핸들러에게 요청합니다.
- 읽어온 레코드들을 임시 테이블에 저장하라고 핸들러에게 요청합니다.
- 데이터가 준비된 임시 테이블에서 필요한 방식으로 데이터를 읽어 오라고 핸들러에게 다시 요청합니다.
- 최종적으로 실행 엔진은 결과를 사용자나 다른 모듈로 넘깁니다.
핸들러(스토리지 엔진)
MySQL 서버의 가장 밑단에서 MySQL 실행 엔진의 요청에 따라
데이터를 디스크로 저장하고, 디스크로부터 읽어 오는 역할을 담당합니다.
즉, 핸들러는 스토리지 엔진을 의미합니다.
쿼리 캐시
쿼리 캐시는 쿼리의 실행 결과를 캐시에 저장하고, 동일 쿼리가 실행되면
캐시에서 결과를 읽어와서 출력하기 때문에 성능이 매우 빠릅니다.
하지만 테이블의 데이터가 변경되면 캐시 또한 변경되어야 하기 때문에
이를 처리하기 위해 성능이 저하되고, 많은 버그들이 발생하였습니다.
따라서 MySQL 8.0 버전부터는 쿼리 캐시 기능이 제거되었습니다.
'데이터베이스 > Real MySQL 8.0' 카테고리의 다른 글
4장 1.9 트랜잭션 지원 메타데이터 (0) 2022.08.11 4장 1.8 스레드 풀 (0) 2022.08.11 4장 1.4-5 플러그인 및 컴포넌트 (0) 2022.08.10 4장 1.3 메모리 할당 및 사용 구조 (0) 2022.08.10 4장 1.2 MySQL 스레딩 구조 (0) 2022.08.09 - 실행 엔진이 핸들러에게 임시 테이블 생성을 요청합니다.