모종닷컴

MySQL 메모리 할당 및 사용 구조 본문

Programming/데이터베이스

MySQL 메모리 할당 및 사용 구조

모종 2022. 7. 22. 23:08
반응형

MySQL에서 사용되는 메모리 공간은 글로벌 메모리 영역로컬 메모리 영역으로 구분할 수 있다.

글로벌 메모리 영역의 모든 메모리 공간은 MySQL 서버가 시작되면서 운영체제로부터 할당된다. 운영체제에 따라 100퍼센트 할당해 줄 수도 있고, 공간을 예약만 해두고 필요할 때 조금씩 할당할 수도 있다.

 

글로벌 메모리 영역

글로벌 메모리 영역은 아래와 같이 이루어져 있다.

  • 테이블 캐시
  • InnoDB 버퍼 풀
  • InnoDB 어댑티브 해시 인덱스
  • InnoDB 리두 로그 버퍼

클라이언트 스레드의 수와 무관하게 하나의 메모리 공간만 할당된다. 필요에 따라 2개 이상의 메모리 공간을 할당받을 수도 있지만, 클라이언트의 스레드 수와는 무관하며, 생성된 글로벌 영역이 N개라도 모든 스레드에 공유된다.

로컬 메모리 영역

로컬 메모리 영역은 아래와 같이 이루어져 있다.

  • 정렬 버퍼
  • 조인 버퍼
  • 바이너리 로그 캐시
  • 네트워크 버퍼

클라이언트와 MySQL 서버와의 커넥션을 맺은 것을 세션이라고 하기 때문에 세션 메모리 영역이라고 표현되며, 클라이언트 스레드가 쿼리를 처리하는 데 사용되는 메모리 영역이다. 

로컬 메모리는 클라이언트 스레드별로 독립적으로 할당되며 절대 공유되어 사용되지 않는다. 때문에 로컬 메모리 공간을 너무 크게 잡다보면 최악의 경우 MySQL 서버가 메모리 부족으로 멈춰 버릴 수도 있으므로 조심해야한다.

쿼리의 용도별로 필요한 때만 로컬 메모리가 할당되고 필요하지 않은 경우에는 MySQL이 메모리 공간을 할당조차 하지 않을 수 있다. 대표적으로 소트 버퍼나 조인 버퍼와 같은 공간이 그러하다. 그리고 로컬 메모리 공간은 커넥션이 열려 있는 동안 계속 할당된 상태로 남아 있는 공간도 있고(커넥션 버퍼, 결과 버퍼) 그렇지 않고 쿼리를 실행하는 순간에만 할당했다가 다시 해제하는 공간(소트 버퍼, 조인 버퍼)도 있다.

 

반응형

'Programming > 데이터베이스' 카테고리의 다른 글

MySQL 쿼리 실행 구조  (0) 2022.07.25
MySQL 플러그인 스토리지 엔진 모델  (0) 2022.07.23
MySQL 스레딩 구조  (0) 2022.07.19
MySQL 아키텍처  (0) 2022.07.19
N+1 Selects 문제  (0) 2018.11.13