DB/MySQL

MySQL 쿼리 실행 구조

행운개발자 2024. 1. 28. 17:10
728x90
  1. MySQL 엔진
    1. 쿼리 파서
      1. 사용자 요청으로 들어온 문자열을 토큰으로 분리해서 트리 형태의 구조로 변형
      2. 문법 오류가 발생하면 이 과정에서 오류 메시지가 전달된다
    2. 전처리기
      1. 컬럼 이름, 내장 함수와 같은 객체를 매핑해서 객체의 존재 여부를 확인
      2. 해당 객체에 접근 권한이 있는지 확인
      3. 실제로 존재하지 않은 객체를 지정하거나 권한이 없으면 오류 메시지가 전달됨
    3. 옵티마이저 (쿼리 변환, 비용 최적화, 실행 계획 수립)
    4. 쿼리 실행기
      1. MySQL 엔진이 핸들러를 사용해서 MySQL 서버 밑단에서 데이터를 디스크로 저장하거나 디스크로부터 읽어오는 요청을 보낸다.
      2. 이 핸들러는 스토리지 엔진을 의미한다.
  2. 스토리지 엔진
💡 쿼리 캐시

MySQL 서버에서 쿼리 캐시는 SQL 실행 결과를 메모리에 캐시하고, 동일 SQL 캐시가 실행되면 테이블을 읽지 않고 즉시 결과를 반환하는 기능이다. 그런데 테이블의 데이터가 변경되면 캐시에 저장된 결과 중 변경된 테이블과 관련된 것들을 모두 삭제해야 한다. 이 과정에서 심각한 동시 처리 성능 저하가 발생해서 8.0 버전부터는 이 쿼리 캐시 기능이 MySQL 서버의 기능에서 완전히 제거되었다.

 

💡 쓰레드 풀

MySQL 서버 엔터프라이즈 버전은 쓰레드 풀을 지원하고, 커뮤니티 버전은 쓰레드 풀을 지원하지 않는다. 커뮤니티 버전에서는 Percona Serverd에서 제공하는 쓰레드 풀을 플러그인 형태로 사용할 수 있다. (INSTALL PLUGIN 명령어)
쓰레드 풀은 사용자의 요청을 처리하는 쓰레드의 수를 줄여서 동시 처리되는 요청이 많다면 제한된 쓰레드의 수만큼 쓰레드가 실행하도록 보장해서 CPU의 오버헤드를 줄이는 것에 목적이 있다. 이 쓰레드 풀을 설정하는 것만으로 성능이 바로 두 배 세 배 올라가지는 않는다. 일반적으로 지정되는 CPU 코어 갯수만큼의 쓰레드 그룹이 생성되고, 이 이상의 쓰레드가 생성되면 불필요한 컨텍스트 스위치로 오버헤드가 오히려 더 발생할 수 있다.
728x90

'DB > MySQL' 카테고리의 다른 글

MySQL의 락  (0) 2024.03.18
MySQL 메모리 구조  (0) 2024.01.28
MySQL 멀티 쓰레딩  (0) 2024.01.28
MySQL 아키텍처  (0) 2024.01.28
MySQL 시스템 변수 조회 및 변경  (0) 2024.01.28