이 포스팅은 Real MySQL의 04장을 읽고 개인적으로 학습하고 이해한 내용입니다. 틀린 부분이 있다면 언제든 지적 부탁드립니다.
클라이언트가 MySQL서버로 쿼리를 요청하게 되면 동작 절차는 간단하게 아래와 같습니다.
클라이언트의 연결과 요청을 담당하는 곳으로, 실제 프로그래밍 언어별 커넥션 API를 통해 연결이 유지되며, 요청을 전달받습니다.
SQL의 분석과 최적화 그리고 실행까지 이어지는 MySQL서버의 두뇌에 해당하는 곳입니다.
MySQL엔진은 내부적으로 다시 4단계로 구분되어 작업을 처리하게 됩니다.
쿼리를 이해할 수 있는 최소 단위인 토큰으로 나누어 트리형태로 구조화합니다. 이 부분에서 쿼리 문법과 관련된 오류를 검출하고 사용자에게 에러 메시지를 반환하게 됩니다.
나누어진 토큰이 유효한지 여부를 확인하는데, 토큰이 존재하지 않거나 권한이 없는 경우 이곳에서 토큰이 제외되게 됩니다.
쿼리를 최소한의 비용으로 최대 성능을 내기 위해 어떻게 작업을 수행해야하는지 선택하는 곳입니다. 실질적으로 MySQL서버에서 중요한 역할을 가지고 있습니다.
MySQL에서 분석하고 최적화한 쿼리를 실행하는 역할을 수행합니다. 실질적으로 디스크에 읽기, 쓰기 작업을 하는 스토리지 엔진에게 작업을 요청하게 되며, 결과를 사용자에게 반환하거나 다른 스토리지 엔진에 요청합니다.
실행엔진으로부터 요청받은 작업에 따라 데이터 버퍼 혹은 캐시, 디스크에 데이터를 읽거나 쓰는 작업을 수행합니다. 대표적으로 InnoDB, MyISAM이 있습니다.
쿼리를 분석하고 최적화하는 MySQL엔진과 디스크의 읽기, 쓰기 작업 위주의 스토리지 엔진으로 구분된 구조 ( 마치 사람의 두뇌와 팔다리와 같다 )
쿼리 문법과 관련된 오류는 쿼리 파서에서 발견하고 오류 메시지를 전달하는 점
SQL 실행 성능을 결정하는 SQL 옵티마이저의 역할
MySQL서버가 효과적으로 SQL 요청을 처리하기위한 아키텍처에 대해 알게되었는데, 더 깊게 들어가서 MySQL엔진과 스토리지 엔진의 세부 동작 방식에 대해서도 살펴볼 필요가 있을 것 같습니다.