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