MySQL Memory
MySQL은 하나의 프로세스로 동작 합니다. 세션은 thread로 확장되고 시스템 자원을 할당 받습니다.
MySQL의 Memory 부분은Connection 수의 영향을 받는 부분이며 항상 주의를 요해야 합니다.
● Memory Management
MySQL 레퍼런스에 나온 식 :
innodb_buffer_pool_size + key_buffer_size + max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)
레퍼런스에 달린 코멘트 (by David Tonhofer)
total memory =
innodb_buffer_pool_size +
key_buffer_size +
innodb_additional_mem_pool_size +
innodb_log_buffer_size +
max_connections * (sort_buffer_size + read_buffer_size + binlog_cache_size + thread_stack)
항목 (64 Bit 기준) |
Default |
Range |
Scope |
Dynamic |
innodb_buffer_pool_size |
134217728 |
10전체 메모리의 70~80%가 적당합니다. G -> 12G , 32G -> 26G 정도를 설정 합니다. |
Global |
No |
key_buffer_size |
8388608 |
8-4294967295 |
Global |
Yes |
max_connections |
151 |
1-100000 |
Global |
Yes |
sort_buffer_size |
2097144 |
18446744073709547520 |
Global, Session |
Yes |
read_buffer_size |
131072 |
8200-2147479552 |
Global, Session |
Yes |
binlog_cache_size |
32768 |
4096-18446744073709547520 |
Global |
Yes |
innodb_additional_mem_pool_size |
8388608 |
2097152-4294967295 |
Global |
No |
innodb_log_buffer_size |
8388608 |
262144-4294967295 |
Global |
No |
thread_stack |
262144 |
131072-18446744073709547520 |
Global |
No |
innodb_buffer_pool_size
: InnoDB 가 data 와 index 를 캐싱하기 위해 사용하는 공간 입니다. default 값은 128M 입니다. 이 공간을 크게 잡을수록 디스크로의 I/O 는 감소됩니다. 데이터베이스용 서버라면 이 공간을 Physical Memory Size 의 80% 까지 잡기도 합니다.
다음 상황에 대해 크기를 줄이는 것을 고려해야 합니다.
1)Physical Memory 부족으로 OS 상에서 Paging 이 발생할 때
2)InnoDB 는 buffer 와 control structures 를 위해 일부 공간을 남겨둡니다. 그렇기 때문에 정의된 크기보다 10% 정도의 공간이 추가적으로 필요로 합니다.
3)buffer pool 을 초기화하는 시간은 이 파라미터의 크기에 비례 합니다. 이를테면 10GB 의 경우 6초 정도가 소요 됩니다.
key_buffer_size
: MyISAM 이 Index 를 캐싱하는데 사용하는 영역으로 key cache 로도 알려져 있습니다. 통상 Physical Memory 의 25% 정도는 허용범주로 볼 수 있지만 이 영역을 지나치게 크게 잡는 경우는 페이징이 발생하고 시스템이 매우 느려질 수 있습니다. 데이터 영역의 캐싱은 OS 의 SYSTEM CACHING 을 이용하기 때문입니다. 또한 다른 Storage Engine 이 사용할 영역도 고려해야 합니다.
max_connections
: mysql 에 접속할 있는 세션수를 의미 합니다. 해당 파라미터의 값을 변경해야 할 때는 시스템의 메모리 사용량을 고려해야 합니다.
sort_buffer_size
: 해당 Variable 은 특정 Storage 에 정의된 값이 아니어서 일반적으로 사용 가능합니다. (MyISAM, InnoDB 든 똑같은 영향을 받습니다.)
특징으로는 이 sort 공간을 사용하는 경우 일량에 상관없이 전체 공간을 할당받아 사용한다는 것 입니다. 그렇기 때문에 특정 쿼리를 위해 global 하게 변경하는 것은 시스템 성능의 저해를 초래할 수 있으며 굳이 변경을 한다면 scope 를 session 으로 특정짓고 진행하는 것이 바람직 합니다.
read_buffer_size
: 각각의 시퀀셜 스캔을 수행하는 쓰레드는 스캔하는 테이블에 대해 설정된 크기(bytes) 만큼의 버퍼를 할당 받습니다. 해당 값은 4KB 의 배수값으로 설정되어야 하며 다른 값이 설정된 경우 내림으로 배수셋팅이 됩니다.
binlog_cache_size
: 트랜잭션 중 바이너리 로그에 대해 발생한 변경사항을 보유하기 위한 캐시 사이즈를 할당 합니다. 이 캐시는 서버가 트랜잭션을 지원하는 스토리지 서버를 사용하고 ( ex : InnoDB ) binary log 를 enable 한 상태라면 각 Client 에 대해 할당 됩니다.
innodb_log_buffer_size
: InnoDB 가 log files 를 disk 에 쓰기위한 buffer size 입니다. default 는 8M 이다. 큰 크기의 log buffer 는 large transactions 이 commit 되기 전에 log 를 disk 로 내려쓰는 것을 피할 수 있습니다.
thread_stack
: 각 쓰레드에 대한 스택사이즈를 정의 합니다. default 값은 256KB (64-bit system) 이며 통상적인 경우 충분 합니다. 만약 thread stack size 가 지나치게 작으면 그것은 서버가 핸들할 수 있는 복잡한 SQL 구문의 사용에 제약을 가하게 됩니다. (stored procedures 의 recursion depth, 기타 memory-consuming actions 들도 영향 받습니다. )
● 튜닝
1) MySQL이 사용 가능한 최대 메모리를 계산 합니다.
2) 정렬 버퍼나 임시테이블 등의 개별적인 연결에 필요한 메모리 양을 계산 합니다.
3) 운영체제가 필요한 메모리양을 계산 합니다. ( 주기적인 배치 작업 및 다른 프로그램이 실행되는데 필요한 메모리 양 고려)
4) 나머지 메모리를 InnoDB 버퍼 풀과 같은 MySQL 캐시로 사용 합니다.
참고 사항
: MyISAM 을 사용하지 않는다면 innodb_additional_mem_pool_size은 기본값인 8M으로 충분 합니다.
InnoDB를 사용하지 않는다면 buffer size 를 OS 가 data 캐싱할 것을 고려하여 정해야 합니다. 이 경우 최초 MySQL 이 사용할 최대 메모리를 70 % 로 잡았지만 더 낮춰야 할 수 있습니다.
● Connection Memory 사용량 조회
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'innodb_additional_mem_pool_size';
SHOW VARIABLES LIKE 'innodb_log_buffer_size';
SHOW VARIABLES LIKE 'thread_stack';
● Connection 별 메모리 사용률 확인
SET @kilo_bytes = 1024;
SET @mega_bytes = @kilo_bytes * 1024;
SET @giga_bytes = @mega_bytes * 1024;
SET @innodb_buffer_pool_size = 2 * @giga_bytes;
SET @innodb_additional_mem_pool_size = 16 * @mega_bytes;
SET @innodb_log_buffer_size = 8 * @mega_bytes;
SET @thread_stack = 192 * @kilo_bytes;
SELECT
( @@key_buffer_size + @@query_cache_size + @@tmp_table_size
+ @innodb_buffer_pool_size + @innodb_additional_mem_pool_size
+ @innodb_log_buffer_size
+ @@max_connections * (
@@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size
+ @@join_buffer_size + @@binlog_cache_size + @thread_stack
) ) / @giga_bytes AS MAX_MEMORY_GB;
실제메모리사용량 (Actual Used Physical Memory) Mem: total -(free + buffers + cached) buffers/cache: used
실제메모리 사용률 ( total - free - buffers - cached) / total (total - buffer/cashe: free) /total
번호 | 분류 | 제목 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | 유머 |
🚨(뉴비필독) 전체공지 & 포인트안내
13 ![]() |
2024.11.04 | 27572 |
공지 | 이슈 | URL만 붙여넣으면 끝! 임베드 기능 | 2025.01.21 | 21816 |
380574 | 일반 |
3900x에서 573D 업글은 무의미한짓이군요
![]() ![]() |
2025.06.28 | 10 |
380573 | 일반 |
수냉쿨러 질문드립니다.
![]() |
2025.06.28 | 9 |
380572 | 일반 |
CPU 시피유에 좋은 램속도를 알아봅시다
![]() ![]() |
2025.06.28 | 13 |
380571 | 잡담 |
우중콘일때 준비해야할것들
1 ![]() |
2025.06.28 | 19 |
380570 | 잡담 |
'케이팝 데몬 헌터스' 감독 'BTS가 준 감동, 우리 노래에서 일부나마 느끼길'
![]() ![]() |
2025.06.28 | 18 |
380569 | 잡담 |
킬린잇걸 멜론 Top100 76위 진입
![]() ![]() |
2025.06.28 | 16 |
380568 | 잡담 |
제이홉, 프랑스 파리 패션위크 '루이비통' 패션쇼
![]() ![]() |
2025.06.28 | 19 |
380567 | 잡담 |
제이홉, 프랑스 파리 패션위크 '루이비통' 패션쇼
![]() ![]() |
2025.06.28 | 15 |
380566 | 잡담 |
제이홉, 독일 베를린 롤라팔루자 1시간 30분 공연 예정
![]() ![]() |
2025.06.28 | 14 |
380565 | 잡담 |
슈가, 인스타그램 팔로워수 5000만명 돌파
![]() ![]() |
2025.06.28 | 20 |
380564 | 잡담 |
콜버트 레이트쇼에 출연한 존 시나, 자기 소개(ft.진격의 방탄소년단)
![]() ![]() |
2025.06.28 | 21 |
380563 | 잡담 |
호비X배캠의 비하인드
![]() ![]() |
2025.06.28 | 19 |
380562 | 잡담 |
내 최애의 사생활ㅋㅋㅋㅋ
![]() ![]() |
2025.06.28 | 11 |
380561 | 잡담 |
지들끼리 꺄루루하는거
![]() ![]() |
2025.06.28 | 14 |
380560 | 잡담 |
칼럼]돌아온 그들, 낯선 '방탄'에 홀리다
![]() ![]() |
2025.06.28 | 19 |
380559 | 잡담 |
우리 윤기 스승의 날 카네이션도 받았다 함 5
![]() ![]() |
2025.06.28 | 16 |
380558 | 잡담 |
엠카 1위 실시간 투표 진행중(오후 7시 20분까지~)
![]() ![]() |
2025.06.28 | 15 |
380557 | 💜SNS |
호비 엠카 1위🎉
![]() ![]() |
2025.06.28 | 21 |
380556 | 잡담 |
호비)방구석 앵콜🩷 아미 사랑해여🩷
![]() ![]() |
2025.06.28 | 17 |
380555 | 잡담 |
슈가 선행 보도한 오늘자 MBC 뉴스데스크, SBS 뉴스
![]() ![]() |
2025.06.28 | 19 |
380554 | 잡담 |
우중런석진콘(28일) 준비중인 아미에게~
![]() ![]() |
2025.06.28 | 12 |
380553 | 💜SNS |
지민 인스타
![]() |
2025.06.28 | 19 |
380552 | 잡담 |
진 'Don't Say You Love Me' 스포티파이 2억 돌파(올해 아시아 가수 곡 중 최단)
![]() ![]() |
2025.06.28 | 17 |
380551 | 📷 영상사진인텁 |
지민 'who' 스포티파이 18억 돌파(아시아 곡 중 최단, 전체 곡 중 6번째)
1 ![]() ![]() |
2025.06.28 | 20 |
380550 | 잡담 |
헐, 우비랑 수건 나눠주나 봐요. 석진이 센스💜
![]() ![]() |
2025.06.28 | 21 |
380549 | 일반 |
샤오미 BE6500 라우터 실사용 후기 (Wi-Fi 7 + 2.5G 스위치 기능까지 ㄷㄷ)
4 ![]() |
2025.06.28 | 40 |
380548 |
오겜3 본 사람?
3 ![]() |
2025.06.28 | 49 | |
380547 | 생활용품 |
바스 베이직플러스 350G 4개 세트
![]() ![]() |
2025.06.28 | 983 |
380546 |
너무 피곤해
1 ![]() |
2025.06.28 | 50 | |
380545 | 생활용품 |
루체스터 뿌리볼륨 모발강화 샴푸&트리트먼트 4900원 핫딜
![]() ![]() |
2025.06.28 | 820 |