Skip to main content

메모리 할당 및 사용 구조

메모리 할당 및 사용 구조

  • MySQL 메모리 공간은 글로벌 메모리 영역로컬 메모리 영역으로 구분할 수 있음
  • 글로벌 메모리 영역은 MySQL 서버가 시작되면서 운영체제로부터 할당받음
  • 글로벌 메모리 영역과 로컬 메모리 영역은 스레드가 공유해서 사용하는 공간인지 여부에 따라 구분됨

글로벌 메모리 영역

  • 일반적으로 클라이언트 스레드의 수와 무관하게 하나의 메모리 공간만 할당
    • 필요에 따라 2개 이상의 메모리 공간을 할당받을 수 있으나 클라이언트 스레드 수와 무관
    • 생성된 글로벌 영역이 N개라 해도 모든 스레드에 의해 공유됨
  • 대표적인 글로벌 메모리 영역
    • 테이블 캐시
    • InnoDB 버퍼 풀
    • InnoDB 어댑티브 해시 인덱스
    • InnoDB 리두 로그 버퍼

로컬 메모리 영역

  • 세션 메모리 영역이라 표현하며 MySQL 서버에 존재하는 클라이언트 스레드가 쿼리를 처리하는 데 사용하는 메모리 영역
    • 대표적으로 커넥션 버퍼정렬 버퍼 등이 존재함
  • 클라이언트가 MySQL 서버에 접속하면 클라이언트 커넥션으로부터의 요청 처리를 위해 스레드를 하나씩 할당
    • 클라이언트 스레드가 사용하는 메모리 공간이라고 해서 클라이언트 메모리 영역이라고 부름
    • 클라이언트와 MySQL 서버와의 커넥션 = 세션 (세션 메모리 영역)
  • 각 클라이언트 스레드별로 독립적으로 할당되며 스레드간 공유가 이뤄지지 않음
  • 각 쿼리의 용도별로 필요할 때만 공간이 할당되고 필요하지 않으면 MySQL이 메모리 공간을 할당하지 않음
    • 커넥션이 열려 있는 동안 계속 할당된 상태로 남아 있는 공간이 존재함
      • 커넥션 버퍼나 결과 버퍼
    • 쿼리를 실행하는 순간에만 할당한 후 다시 해제하는 공간이 존재함
      • 소트 버퍼나 조인 버퍼
  • 대표적인 로컬 메모리 영역
    • 정렬 버퍼
    • 조인 버퍼
    • 바이너리 로그 캐시
    • 네트워크 버퍼