2) 쿼리 실행 과정

홍기대·2022년 1월 7일
0

MySQL

목록 보기
2/2


1. Query cashe

  • SQL 실행 결과를 메모리에 캐싱하는 역할
  • 동일 SQL 실행시 이전 결과를 즉히 반환
  • 테이블 데이터가 변경되면 캐싱된 데이터 삭제가 필요함 (퀴리 캐시에 접근하는 쓰레드에 Lock이 걸림 -> 동시 처리 기능 저하)
  • MySQL 8.0부터는 완전히 제거됨
  1. Parser
  • SQL 문장을 의미 있는 단위의 토큰으로 쪼개서 트리로 만듦(Parse tree)
  • 이 과정에서 트리 문장의 기본 문법 오류를 체크
  1. Preprocessor
  • Parse tree 기반으로 SQL의 문장 구조를 체크
  • Parse tree 토큰을 하나씩 검사하면서, 토큰에 해당하는 테이블 이름이나 컬럼 등이 실제로 존재하는 값인지 체크하고, 접근 권한에 대해서도 체크
  1. Query optimizer
  • SQL 실행을 최적화해서 실행 계획을 수립
    1) 규칙 기반 최적화 : 옵티마이저에 내장된 우선 순위에 따라 점수를 매겨 실행 계획 수립
    2) 비용 기반 최적화 : SQL을 처리하는 다양한 방법을 마련해두고, 각 방법의 비용과 테이블 통계 정보를 통해서 시행 계획을 수립
  1. Query execution engine
  • 옵티마이저가 만든 실행 계획대로 스토리지 엔진을 호출해서 레코드를 읽고 씀
  1. Storge engine
  • 쿼리 실행 엔진이 요청하는대로 데이터를 디스크로 저장하고 읽음(대표적으로 InnoDB, MYISAM 스토리지 엔진)
  • 핸들러 API에 의해 동작(핸들러라고도 불림)
  • 플러그인 형태로 제공(스토리지 뿐 아니라, 검색어 파서, 사용자 인증 모듈 등도 플러그인으로 제공), 단 플러그인끼리는 통신할 수 없고, 플러그인은 MySQL 서버의 변수나 함수를 직접 호출하기 때문에 캡슐화를 위반 한다는 단점이 있음. MySQL 8.0부터는 이러한 플러그인 아키텍처를 보완한 컴포넌트 아키텍처를 제공.
profile
열심히 살자

0개의 댓글