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
'Mysql > MySQL 아키텍처 심층 분석' 카테고리의 다른 글
InnoDB Storage Engine 상세 (0) | 2025.04.18 |
---|---|
InnoDB Buffer Pool 내부 구조 (Chunk, Instance 분리 등) (0) | 2025.04.18 |
Optimizer Hints 상세 매뉴얼 (USE INDEX, FORCE INDEX, STRAIGHT_JOIN 등) (0) | 2025.04.18 |
Query Layer 최적화 과정 (Optimizer 내부 동작) (0) | 2025.04.18 |
MySQL 서버 구조 (Connection Layer, Query Layer, Storage Engine Layer) (0) | 2025.04.18 |