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
'공부 > Mysql' 카테고리의 다른 글
[RealMysql 8.0]04아키텍처 4.2.7.5 ~ 4.2.8 (0) | 2023.01.30 |
---|---|
[RealMysql 8.0]04아키텍처 4.2.7 ~ 4.2.7.4 (0) | 2023.01.28 |
[RealMysql 8.0]04아키텍처 4.2.1 ~ 4.2.6 (0) | 2023.01.28 |
[RealMysql 8.0]04아키텍처 4.1 ~ 4.1.2.2 (0) | 2023.01.28 |
DB 인덱스는 왜 대부분 B-Tree 를 쓸까 B-Tree vs Hash..링크공유.. (2) | 2023.01.19 |
댓글