본문 바로가기
Mysql/MySQL 아키텍처 심층 분석

MySQL 프로세스 및 메모리 구조

by DEVLIB 2025. 4. 18.
728x90

MySQL 프로세스 및 메모리 구조 심층 분석

MySQL 서버는 기본적으로
"프로세스 기반 구조""메모리 관리 아키텍처" 를 따릅니다.

MySQL은 크게 보면 다음과 같이 나뉩니다:

  • 프로세스(Threads) 구조
  • 메모리 구조 (Global Memory, Per-thread Memory, Buffer Pool 등)

1. MySQL 프로세스 구조

MySQL 서버 프로세스는 단일 프로세스, 멀티 스레드 모델입니다.

1.1 주요 스레드 종류

스레드 설명
Connection Thread 각 클라이언트 연결마다 생성되는 스레드 (Thread-per-Connection 모델)
Thread Pool (옵션) 대량 접속 처리용. 스레드 수를 제한하여 관리
Query Thread SQL 파싱, 최적화, 실행 등을 담당
IO Thread 복제(Replication)용. Master/Slave간 로그 전송
Purge Thread Undo 로그 정리. 오래된 트랜잭션 데이터 삭제
Background Thread InnoDB 전용. Buffer Pool Flushing, Page Clean 등
Checkpoint Thread Checkpoint 관리를 통한 Redo Log 커밋

1.2 스레드 생성 정책

  • 기본은 요청당 스레드 1개 생성 (thread_handling=one-thread-per-connection)
  • 하지만, 대규모 환경에서는 Thread Pool Plugin 을 적용해 스레드 수를 제어함

1.3 대표 파라미터

  • max_connections: 최대 동시 연결 수
  • thread_cache_size: 재사용 가능한 스레드 수
  • innodb_read_io_threads, innodb_write_io_threads: InnoDB IO 처리 스레드 수

2. MySQL 메모리 구조

메모리는 크게 2가지로 구분됩니다:

  • Global Memory (서버 전체 공유)
  • Per-Thread Memory (각 세션/쿼리 전용)

2.1 Global Memory

서버 전체가 공유하는 메모리 공간

영역 설명 대표 변수
Buffer Pool InnoDB 테이블/인덱스 데이터를 캐시 innodb_buffer_pool_size
Key Buffer MyISAM 인덱스 캐시용 (거의 사용 안함) key_buffer_size
Query Cache (제거됨) 쿼리 결과 캐시 (MySQL 5.7 이하) query_cache_size
Log Buffer 트랜잭션 Redo 로그 버퍼 innodb_log_buffer_size

(1) Buffer Pool

  • InnoDB 엔진의 심장
  • 테이블, 인덱스, Undo, Doublewrite Buffer까지 모두 저장
  • 적절히 크기를 잡아야 Disk IO를 줄일 수 있음
  • 추천: 서버 메모리의 약 70~80% 수준으로 설정

2.2 Per-Thread Memory

연결(세션)별로 개별 할당되는 메모리

영역 설명 대표 변수
Sort Buffer 정렬 작업용 버퍼 sort_buffer_size
Join Buffer 조인 작업용 임시 버퍼 join_buffer_size
Read Buffer Full Table Scan 시 버퍼 read_buffer_size
Temp Table Memory 디스크 대신 메모리 임시 테이블 생성용 tmp_table_size, max_heap_table_size

특징

  • 세션마다 별도로 할당되므로,
    연결 수가 많으면 총 메모리 사용량이 급증할 수 있음
  • 대형 쿼리로 인해 메모리 폭발 가능성 존재
  • 예시:
    max_connections가 500일 때,
    sort_buffer_size=4MB라면,
    → 연결 500개 × 4MB = 2GB 추가 메모리 사용 가능

3. 메모리 최적화 관점 주요 포인트

항목 체크 포인트
Buffer Pool 사이즈 시스템 RAM 대비 최적 설정 (innodb_buffer_pool_size)
Per-Thread 메모리 관리 너무 크게 설정 시 Out of Memory 위험
Temp Table 최적화 메모리 임시 테이블 크기 (tmp_table_size, max_heap_table_size)
Redo Log Buffer 조정 대량 트랜잭션 커밋 최적화 (innodb_log_buffer_size)

전체 구조 요약 다이어그램

MySQL Server Process
├── Connection Threads (Session 관리)
├── Query Threads (SQL 처리)
├── IO Threads (Replication, Storage IO)
├── Background Threads (Purge, Checkpoint)
│
└── Memory
    ├── Global Memory (Buffer Pool, Log Buffer)
    └── Per-Thread Memory (Sort Buffer, Join Buffer, Temp Table)
LIST