Skip to main content
메모리 할당 및 사용 구조
메모리 할당 및 사용 구조
- MySQL 메모리 공간은 글로벌 메모리 영역과 로컬 메모리 영역으로 구분할 수 있음
- 글로벌 메모리 영역은 MySQL 서버가 시작되면서 운영체제로부터 할당받음
- 글로벌 메모리 영역과 로컬 메모리 영역은 스레드가 공유해서 사용하는 공간인지 여부에 따라 구분됨
글로벌 메모리 영역
- 일반적으로 클라이언트 스레드의 수와 무관하게 하나의 메모리 공간만 할당
- 필요에 따라 2개 이상의 메모리 공간을 할당받을 수 있으나 클라이언트 스레드 수와 무관
- 생성된 글로벌 영역이 N개라 해도 모든 스레드에 의해 공유됨
- 대표적인 글로벌 메모리 영역
- 테이블 캐시
- InnoDB 버퍼 풀
- InnoDB 어댑티브 해시 인덱스
- InnoDB 리두 로그 버퍼
로컬 메모리 영역
- 세션 메모리 영역이라 표현하며 MySQL 서버에 존재하는 클라이언트 스레드가 쿼리를 처리하는 데 사용하는 메모리 영역
- 대표적으로 커넥션 버퍼와 정렬 버퍼 등이 존재함
- 클라이언트가 MySQL 서버에 접속하면 클라이언트 커넥션으로부터의 요청 처리를 위해 스레드를 하나씩 할당
- 클라이언트 스레드가 사용하는 메모리 공간이라고 해서 클라이언트 메모리 영역이라고 부름
- 클라이언트와 MySQL 서버와의 커넥션 = 세션 (세션 메모리 영역)
- 각 클라이언트 스레드별로 독립적으로 할당되며 스레드간 공유가 이뤄지지 않음
- 각 쿼리의 용도별로 필요할 때만 공간이 할당되고 필요하지 않으면 MySQL이 메모리 공간을 할당하지 않음
- 커넥션이 열려 있는 동안 계속 할당된 상태로 남아 있는 공간이 존재함
- 쿼리를 실행하는 순간에만 할당한 후 다시 해제하는 공간이 존재함
- 대표적인 로컬 메모리 영역
- 정렬 버퍼
- 조인 버퍼
- 바이너리 로그 캐시
- 네트워크 버퍼