MySQL 아키텍처

Minyuk·2022년 11월 4일
0

서버에서 SQL 요청이 오면 MySQL 엔진(판단과 명령을 내리는 두뇌), 스토리지 엔진(동작을 수행하는 팔과 다리)을 거쳐 운영체제를 통해 디스크에 접근하여 데이터를 서버에게 전달

MySQL 엔진

쿼리파서

  • SQL을 파싱하여 Syntax Tree를 만듬
  • 이 과정에서 문법 오류 검사가 이루어짐

전처리기

  • 쿼리파서에서 만든 Tree를 바탕으로 전처리 시작
  • 테이블이나 컬럼 존재 여부, 접근권한 등 Semantic 오류 검사

= 쿼리파서, 전처리기는 컴파일 과정과 매우 유사하나 SQL은 프로그래밍 언어처럼 컴파일 타임 때 검증 할 수 없어 매번 구문 평가를 진행

옵티마이저

  • 쿼리를 처리하기 위한 여러 방법들을 만들고, 각 방법들의 비용정보와 테이블의 통계정보를 이용해 비용 산정
  • 테이블 순서, 불필요한 조건 제거, 통계 정보를 바탕으로 전략을 결정 (실행 계획 수립)
  • 옵티마이저가 어떤 전략을 결정하느냐에 따라 성능이 많이 달라짐
  • 가끔씩 성능이 나쁜 판단을 해 개발자가 힌트를 사용해 도움을 줄 수 있음

쿼리실행기

  • 옵티마이저가 결정한 계획대로 스토리지 엔진에 요청하는 역할

    Handler API

    • MySQL 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽거나 할 때는 각 스토리지 엔진에 쓰기 또는 읽기를 요청 하게 되며, 이러한 요청을 핸들러(Handler) 요청이라고 하고, 여기서 사용 되는 API
    • InnoDB 스토리지 엔진도 Handler API 를 이용해 MySQL 엔진과 데이터를 주고 받음

스토리지 엔진

  • 디스크에서 데이터를 가져오거나 저장하는 역할
  • MySQL 스토리지 엔진은 플러그인 형태로 Handler API만 맞춘다면 직접 구현해서 사용 가능
  • InnoDB, Mylsam 등 여러개의 스토리지 엔진이 존재, 8.0부터는 InnoDB가 디폴트

InnoDB

  • Clustered Index
  • Redo - Undo
  • Buffer pool

0개의 댓글