[MySQL] MySQL 메모리 구조

신찬규·2024년 4월 5일

MySQL

목록 보기
3/13

MySQL의 메모리 구조는 글로벌 메모리 영역과 로컬 메모리 영역(커넥션 또는 세션 메모리 영역이라고도 한다.)으로 나뉜다. 글로벌 메모리 영역은 MySQL 시작 시 OS로부터 할당되고, 로컬 메모리 영역은 클라이언트 쓰레드가 사용하는 영역이다.

1. 글로벌 메모리 영역

글로벌 메모리 영역은 MySQL 내의 모든 쓰레드에 의해 공유되며 클라이언트 쓰레드 수와 무관하다. 글로벌 메모리 영역에는 InnoDB 버퍼 풀, InnoDB 로그 버퍼 등과 같은 전역 버퍼와 테이블 캐시, 쓰레드 캐시 같은 전역 캐시 등이 있다.

2. 로컬 메모리 영역

로컬 메모리 영역은 클라이언트 쓰레드가 쿼리를 처리하는데 사용하는 메모리 영역이며 쓰레드 별로 독립적으로 할당되며 절대 공유되지 않는다. 클라이언트와 MySQL 간의 커넥션을 세션이라고 하기 때문에 세션 메모리 영역, 커넥션 메모리 영역이라고 하기도 한다. 로컬 메모리 영역에는 커넥션 버퍼와 정렬 버퍼 등이 있다.

로컬 메모리 영역은 쿼리의 용도별로 필요한 공간만 할당되고 필요하지 않은 경우 할당조차 하지 않을 수 있다. 예를 들어, 정렬하지 않는 쿼리인 경우 정렬 버퍼는 할당되지 않고 조인을 하지 않는 쿼리인 경우 조인 버퍼는 할당되지 않는 방식이다. 또한 커넥션이 열려 있는 동안 계속 할당된 상태로 남아있는 공간도 잇고(커넥션 버퍼나 결과 버퍼) 쿼리를 실행하는 순간에만 할당된 뒤 해제되는 공간(정렬 버퍼나 조인 버퍼)도 있다.

참고 자료

profile
느려도 조금씩 꾸준하게

0개의 댓글