728x90

Mysql architecture 에 대해서 한번 알아보자

Mysql은 머리 역할을 하는 Mysql Engine과 손발 역할을 하는 Storage Engine으로 구분 할 수 있다. 

 

이번 포스팅에서는  Mysql server에서 제공되는 Mysql Engine과 Storage Engine을 알아보자. 

Mysql Server는 다른 DBMS에 비해 구조가 독특하다. 우리가 체감하기는 쉽지 않지만 이러한 구조 때문에 다른 DBMS에서는 가질 수 없는 엄청난 혜택을 누릴수도 있고, 반대로 다른 DBMS에서는 전혀 문제가 되지 않는 것이 문제가 될수도 있다.

 

아래 사진은 Mysql의 전체 구조이다. 이제 하나씩 알아보자

Real Mysql 8.0

 

Handler API(Connection Handler)

  • Mysql Engine의 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때는 각 스토리지 엔진에 쓰기 또는 읽기를 요청하는데, 이 요청을 Handler 요청이라고 하고 여기서 사용하는 API이기도 하고 Mysql Engine이 Storage Engine을 조정하기 위해 사용 하는 것이다. Handler API라고 한다.
  • InnoDB 스토리지 엔진 또한 이 Handler API 를 이용해 Mysql Engine과 데이터를 주고 받기도 한다. 

위 사진은 핸들러 API를 통해 얼마나 많은 데이터 작업이 있었는지를 표시한다.

Mysql Engine

  • Mysql engine은 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌 역할을 한다.
  • Mysql Engine은 Handler API 통해 접속된 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 Connection Handler,SQL Interface, SQL parser , 전처리기, 쿼리에 최적화된 실행을 위한 옵티마이저가 중심을 이룬다.

쿼리 요청시 처리하는 세부 실행 구조에 대해서 알아보자

SQL Interface

  • 사용자가 입력하는 SQL 쿼리를 MySQL로 전달하는 계층입니다. 이 인터페이스는 MySQL이 SQL 쿼리를 받아들이는 첫 번째 지점이다.

SQL Parser

  • 쿼리 파서는 사용자 요청이 들어온 쿼리 문장을 토큰으로 분리해 트리 형태의 구조로 만들어내는 작업이다.
  •  위 과정에서 SQL 쿼리를 구문 분석(Parsing)하여 쿼리의 구조가 올바른지 확인하고, 이를 MySQL이 처리할 수 있는 구조로 변환한다.
  • 만약 오류가 존재한다면 사용자에게 오류메시지를 전달한다.

전처리기

  • 파서 과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에 구조적인 문제점이 있는지 확인한다. (위 쿼리 파서는 문법에 대한 검증이고 이 과정은 구조에 대한 검증이다.)
  • 내장 팜수와 같은 개체를 매핑해 해당 객체의 존재 여부와 객체의 접근 권한 들을 확인하는 과정을 전처리기에서 수행한다.
  • 권한상 사용이 불가한 개체는 전처리기에서 걸러진다.

8.0에서는 제거된 MYSQL 서버의 캐시

  • 캐시와 버퍼 (Cache and Buffer)는 실행된 쿼리나 데이터 페이지를 메모리에 캐싱하여 성능을 최적화한다. MySQL은 결과를 저장해 재사용할 수 있도록 쿼리 캐시 또는 버퍼를 사용한다.

하지만 Mysql 8.0부터는 캐시 기능이 완전히 제거되고 시스템 변수도 모두 제거되었다. 가져다 주는 이점보다 버그가 더 많았기 때문이다.

 

SQL Optimizer 

  • 사용자의 요청으로 들어온 쿼리를 가장 효율적으로 실행할 수 있도록 최적화한다. 옵티마이저는 여러 가지 실행 계획을 비교하고, 가장 빠르게 쿼리를 실행할 방법과 저렴한 비용으로 처리할지 결정한다. 
  • SQL 옵티마이저: 같은 의미로, SQL 쿼리를 최적화하는 데 사용되는 구성 요소이다.

Storage Engine

  • Mysql Engine에서 SQL 문장을 분석하거나 최적화하는 등 처리를 수행하면 Storage Engine은 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 역할을 담당한다. Mysql 서버에서 Mysql Engine은 하나지만 Storage Engine은 여러 개를 동시에 사용할 수 있다.
  • 스토리지 엔진에는 대표적으로 InnoDB storage Engine 이 있다. 이 부분은 다음 포스팅에서 조금 더 상세하게 정리를 할 예정이다.
728x90