MySQL 서버의 구조 & MySQL엔진의 동작 원리

Kai·2023년 5월 2일
0

MySQL

목록 보기
5/16

☕ 시작


이번 글에서는 MySQL 서버의 구조에 대해서 알아보고, 그 중에서도 MySQL엔진이 어떻게 동작하는지 집중적으로 알아보겠다.

바로 드가자~


💻 MySQL 서버의 구조


MySQL 서버는 대략적으로 이렇게 구분할 수 있다.

  • Connection Pool
  • MySQL 엔진
  • 스토리지 엔진

스토리지 엔진은 InnoDB가 대표적으로 사용이 되지만, 원한다면 다른 엔진을 사용할 수도 있다.

Connection Pool은 클라이언트에 넘겨줄 DB 커넥션들을 미리 만들어놓고 관리하는 역할을 한다.

MySQL엔진은 쿼리를 분석하거나 어떻게 실행할지 계획하고 최적화하는 작업을 수행한다.

스토리지 DB는 데이터를 디스크에 쓰거나 읽는 작업을 수행한다.

MySQL 엔진과 스토리지 엔진은 Handler API를 통해서 통신하고, 이 API는 스토리지 DB쪽에 구현이 되어 있고, MySQL엔진에서 호출한다.

하나 하나 좀 더 자세히 알아보자.


🧐 MySQL 엔진


MySQL엔진은 클라이언트에서 넘어온 쿼리를 실행하기까지 필요한 처리나 역할을 수행한다.

1) SQL Interface

  • 클라이언트로부터 쿼리를 수신하고, 클라이언트에 결과를 전송하는 Interface이다.

2) Cache & Buffers

  • 동일한 쿼리에 대해서 빠른 결과를 응답하기 위해서 쿼리를 캐싱하는 메모리 공간이다.

3) Query Parser

  • 말 그대로 넘어온 쿼리를 파싱해서 MySQL이 읽을 수 있는 'Tree' 형태로 변환하는 역할을 한다.
  • 쿼리에 문법적인 오류가 있는지 판별한다.

4) 전처리기

  • 쿼리 파서로부터 전달받은 쿼리 Tree를 기반으로 예약어가 아닌 요소들의 유효성을 검증한다. (테이블 접근 권한, 테이블 똔느 컬럼의 존재 여부 판별)
    SELECT * FROM user;
    위와 같은 쿼리를 실행한다고 가정하면, user라는 테이블이 DB에 있는지 검사하는 것을 말한다.

5) Optimizer

  • 1, 2번의 과정을 거치면서 쿼리의 검증이 완료가 됐다.Optimizer는 검증이 완료된 이 쿼리를 어떻게 하면 효율적으로 실행시킬지를 정하는 역할을 한다.
  • Optimizer는 규칙 기반 최적화 또는 비용 기반 최적화방식 중 하나를 채택하여 쿼리 최적화를 진행하는데, MySQL의 Optimizer는 비용 기반 최적화 방식을 사용하고 있다.

규칙 기반 최적화: 데이터의 상태는 고려하지 않고, Optimizer에 내장된 우선순위대로 최적화하는 것을 말한다.

비용 기반 최적화: 쿼리를 처리하기 위한 여러 방법 중에서 테이블의 통계 정보를 이용해서 DB에 부하가 덜 가는 방향으로 쿼리를 최적화하는 것을 말한다.


6) 실행엔진

  • Optimizer에서 수립된 DB 실행 계획대로 기능을 실행해주는 역할을 한다
  • Handler API를 통해서 스토리지 엔진과 통신한다.

스토리지 엔진


위에서도 이야기했지만, 스토리지 엔진은 디스크에 데이터를 읽기/쓰기하는 역할을 수행한다. InnoDB, MyISAM등등 다양한 종류가 있고, InnoDB가 가장 많이 사용된다.

스토리지 엔진에 대해서는 다음 글에서 좀 더 자세히 다뤄보도록 하겠다. 🤭


참고


0개의 댓글