Database/MySQL

[MySQL] MySQL 아키텍처

emhaki 2023. 2. 3. 11:01
728x90
반응형
SMALL

MySQL 아키텍처

데이터베이스는 파일을 관리하는 서버이다.  Client가 Server에게 데이터를 요청하는 것처럼 서버는 데이터베이스에 데이터를 요청하게 된다. Client는 JSON을 통해 Server에게 데이터를 요청하는 것과 같이 Server는 SQL을 통해서 MySQL 서버에 데이터를 요청하게 된다.  

위 그림에서 MySQL엔진은 사람으로 비유하면 판단과 명령을 하는 두뇌라고 생각하면 되고, 스토리지 엔진은 판단을 수행하는 팔과 다리라고 보면 될 것 같다. 

MySQL엔진 

MySQL엔진을 세부적으로 살펴보면 쿼리 파서, 전처리기, 옵티마이저, 쿼리 실행기로 이루어져 있다.

🔎 쿼리파서

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

🔎 전처리기

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

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

🔎 옵티마이저

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

옵티마이저가 전략을 결정하고 나면 그 다음은 쿼리 실행기가 전략을 가져가게 된다.

🔎 쿼리 실행기

쿼리 실행기는 옵티마이저가 결정한 계획을 내부 스토리지 엔진에 전달하는 역할을 한다. 이때 Handler API를 사용하게 된다. 

스토리지 엔진

MySQL 엔진 다음단계인 스토리지 엔진을 살펴보자.

스토리지 엔진의 특징은 다음과 같다.

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

 

728x90
반응형