이번 글에서는 MySQL 서버의 구조에 대해서 알아보고, 그 중에서도 MySQL엔진이 어떻게 동작하는지 집중적으로 알아보겠다.
바로 드가자~
MySQL 서버는 대략적으로 이렇게 구분할 수 있다.
스토리지 엔진은 InnoDB가 대표적으로 사용이 되지만, 원한다면 다른 엔진을 사용할 수도 있다.
Connection Pool은 클라이언트에 넘겨줄 DB 커넥션들을 미리 만들어놓고 관리하는 역할을 한다.
MySQL엔진은 쿼리를 분석하거나 어떻게 실행할지 계획하고 최적화하는 작업을 수행한다.
스토리지 DB는 데이터를 디스크에 쓰거나 읽는 작업을 수행한다.
MySQL 엔진과 스토리지 엔진은 Handler API를 통해서 통신하고, 이 API는 스토리지 DB쪽에 구현이 되어 있고, MySQL엔진에서 호출한다.
하나 하나 좀 더 자세히 알아보자.
MySQL엔진은 클라이언트에서 넘어온 쿼리를 실행하기까지 필요한 처리나 역할을 수행한다.
SELECT * FROM user;
위와 같은 쿼리를 실행한다고 가정하면, user
라는 테이블이 DB에 있는지 검사하는 것을 말한다.규칙 기반 최적화
또는 비용 기반 최적화
방식 중 하나를 채택하여 쿼리 최적화를 진행하는데, MySQL의 Optimizer는 비용 기반 최적화
방식을 사용하고 있다.규칙 기반 최적화: 데이터의 상태는 고려하지 않고, Optimizer에 내장된 우선순위대로 최적화하는 것을 말한다.
비용 기반 최적화: 쿼리를 처리하기 위한 여러 방법 중에서 테이블의 통계 정보를 이용해서 DB에 부하가 덜 가는 방향으로 쿼리를 최적화하는 것을 말한다.
위에서도 이야기했지만, 스토리지 엔진은 디스크에 데이터를 읽기/쓰기하는 역할을 수행한다. InnoDB, MyISAM등등 다양한 종류가 있고, InnoDB가 가장 많이 사용된다.
스토리지 엔진에 대해서는 다음 글에서 좀 더 자세히 다뤄보도록 하겠다. 🤭