옵티마이저의 실행 계획


쿼리 실행 순서

  1. 사용자가 요청한 SQL 질의를 MySQL 서버가 이해할 수 있도록 분리(파스 트리)한다.
  2. 비용 기반 최적화를 진행한다. 질의를 수행할 수 있는 방법을 만들어, 각 방법의 통계 정보를 이용해 실행 계획별 비용을 산출하고 결정한다.
    1. 조인 순서 결정
    2. 어떠한 인덱스를 사용할 지, 인덱스를 바탕으로 스캔 방식을 결정한다.
    3. 임시 테이블을 생성해야 하는지 정한다, ..
  3. 결정된 실행 계획을 바탕으로
    1. 스토리지 엔진 : 필요한 데이터를 레코드를 가져온다.
    2. MySQL 엔진 : 가져온 레코드를 조인, 정렬하는 작업을 수행한다.

포어/백그라운드 스레드

포어그라운드 스레드는 클라이언트와 1:1로 매칭되어 아래와 같은 역할을 수행한다.

백그라운드 스레드는 말그대로 뒷 단에서 필요한 작업들을 수행한다. 너무 많아 대표적인 것들만 작성했다.

리드 어헤드와 공간 지역성, 병렬 처리

image.png

리드 어헤드로 읽기 위해 포어그라운드 스레드가 백그라운드 스레드로 디스크의 페이지들을 읽어와달라고 요청했을 때 포어그라운드는 블로킹되는 것이 아닌 계속해서 버퍼풀을 읽는 작업을 수행하며 백그라운드 스레드와 병렬로 진행한다.

image.png