MySQL 아키텍쳐

Do_It·2023년 10월 25일

데이터베이스는 결국에는 파일을 관리하는 서버이다.
서버는 SQL을 통해서 MySQL 서버에 데이터를 요청하게 되는 것

MySQL 서버

MySQL엔진 -> 스토리지 엔진 -> 운영체제 -> 디스크 로 이루어짐

1) MySQL엔진 : 판단과 명령을 하는 두뇌 역할

쿼리 파서 -> 전처리기 -> 옵티마이저 -> 쿼리 실행기로 이루어짐

쿼리파서

  • SQL을 파싱하여 Sytax Tree를 만들고 이 과정에서 문법 오류 검사가 이루어짐
  • Sytax Tree(구문 트리) : 문법적으로 정의된 문장 또는 표현의 구조를 나타내는 계층적인 트리 구조

전처리지

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

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

옵티마이저

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

쿼리실행기

  • 옵티마이저가 결정한 방법대로 쿼리를 실행함 이때 Handler API를 사용하게 됨
  • Handler API의 조건을 만족하는 스토리지 엔진만 구현할 수 있다면, 어떤 식이든 직접 구현하여 스토리지 엔진을 사용할 수 있음

2)스토리지 엔진 : 판단을 수행하는 팔과 다리 역할

  • 디스크에서 데이터를 가져오거나 저장하는 역할
  • MySQL 스토리지 엔진은 플러그인 형태로 Handler API만 맞춘다면 직접 구현해서 사용할 수 있음
  • 8.0대 부터는 InnoDB 엔진을 디폴트로 사용
profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글