본문 바로가기
공부/Mysql

[RealMysql 8.0]04아키텍처 4.1.3 ~ 4.1.10

by 띵커베르 2023. 1. 28.
728x90

그냥 기억 정리.

  • 메모리 할당 및 사용 구조
  • mysql 에서 사용되는 메모리 공간은 크게 글로벌 메모리 영역, 로컬 메모리 영역으로 구분할 수 있다.
  • 글로벌 메모리 영역
    • mysql 서버가 시작되면서 운영체제로부터 할당된다. 
    • 클라이언트 스레드와 무관하게 하나의 메모리 공간만 할당 받는다.
    • 필요에따라 n개의 메모리 공간을 할당 받을 수 있지만 이는 클라이언트 스레드 수와는 무관하다.
    • 생성된 글로벌 영역이 n개라 하더라도 모든 스레드에 의해 공유된다.
    • 대표적인 메모리 영역은 => 테이블 캐시, InnoDb 버퍼 풀, InnoDb 리두 로그 버퍼 등이 있다.
  • 로컬 메모리 영역
    • 세션메모리 영역이라고도 한다.(클라이언트와 서버의 커넥션을 세션이라 부르기도 하여)
    • 클라이언트 스레드가 쿼리를 처리하는 데 사용하는 메모리 영역이다.
    • 각 클라이언트 스레드별로 독립적으로 할당되며, 절대 공유되어 사용되지 않는다.
    • 대표적인 로컬 메모리 영역은 => 정렬버퍼, 조인버퍼, 바이너리 로그캐시, 네트워크 버퍼 등이 있다.
  • 플러그인 스토리지 엔진 모델
    • 쿼리 실행 구조
      • 1.쿼리 파서 =>는 문장을 토큰화 하여 파서 트리를 만들고 문법적 오류를 발견한다.
      • 2.전처리기 => 파서 트리 기반으로 문장에 구조적인 문제점을 확인한다.
        • 테이블 이름, 칼럼 이름, 내장 함수 객체 존재 여부, 접근 권한 등
      • 3.옵티마이저 => 두뇌로 비유되며, 가장 효율적인 처리방식을 결정한다.(실행계획)
      • 4.실행 엔진 => 손과 발에 비유되며, 실행계획 기반으로 각 핸들러에게 요청하며 받은 결과를 다른 핸들러에게 여창 입력으로 연결해 준다.
        • 데이터를 읽어오거나 저장하도록 명령하려면 반드시 핸들러를 통해야 한다.
      • 핸들러?
        • mysql 서버 가장 밑단에서 요청에따라 데이터를 디스크에 저장, 읽어오는 역할을 담당.
        • 핸들러는 결국 스토리지 엔진을 의미함.(InnoDb 테이블을 조작하는 경우 핸들러는 InnoDb 스토리지 엔진)
    • 복제
      • 2대 이상의 서버가 동일한 데이터를 담도록 동기화 하는 기술.16장에서 알아본다고 한다.
    • 쿼리 캐시
      • sql의 실행계획을 캐싱하고, 동일한 sql 쿼리를 즉시 반환하는 등의 이점이 있었지만,
      • 동시처리 성능 저하와 많은 버그로 인하여 mysql 8.0 버전부터는 모든 쿼리캐시 기능을 삭제하였다.
        • 캐시에 저장된 결과중 데이터가 변경되면 변경된 테이블에 관련된 것들을 모두 삭제하는 등의 이슈.
    • 스레드 풀
      • 엔터프라이즈 에디션은 스레드 풀 기능을 제공, 커뮤니티는 제공하지 않음.
      • 스레드 풀: 여러 클라이언트의 요청을 처리할 수 있도록 미리 쓰레드를 제한적으로 생서앟여 풀에 보관
        • 풀에 저장된 쓰레드를 사용하여 오버헤드를 줄일 수 있고, 서버의 성능을 향상시킬 수 있음
      • 스레드 캐시: 이전에 사용하던 쓰레드를 캐시에 보관해 놓아 다시 사용할때 쓰레드 생성의 오버헤드를 줄일기 위한 기능
        • 쓰레드 풀과는 달리 쓰레드를 생성하는 것이 아니라 이전에 사용하던 쓰레드를 재사용하는 기능.
    • 트랜잭션 지원 메타데이터
      • 테이블의 구조 정보, 스토어드 프로그램 등의 정보를 메타데이터라고 함.
      • 8.0부터 기존의 문제점을 개션하기 위해 메타데이터 정보를 모두 InnoDb 에 저장하도록 개선됐다.
728x90

댓글