[MySQL] 이노디비(InnoDB) 메모리 사용 환경설정
이노디비 사용할 때 설정하면 성능이 향상 되는 메모리 설정관련된 부분입니다. 그리고 메모리는 연결할때 소요되는것과 연결과 무관하게 공통으로 사용되는 메모리가 있는데 이를 세션메모리, 글로벌 메모리라 부르는데 아래 부분에 나와 있는 부분 참고하면 됩니다.
이노디비(InnODB) 성능관련 주요 옵션
inodb_buffer_pool_size
InnoDB만을 사용하는 경우, key_buffer_size=10M( 작아도 되고, 0이 아닌 값), inodb_buffer_pool_size=RAM의 70% 으로 설정
전체 InnoDB 데이터를 메모리에로드하도록 설정 하면 디스크에서 읽는 것을 방지 할 수 있습니다.
innodb_log_file_size 보통 128M ~ 2G로 설정합니다.
너무 높게 만들지 마십시오 . 더 빠른 디스크를 사용하면 종종 플러시가 나쁘지 않으며 서버에서 충돌하는 동안 복구 시간이 단축됩니다.
innodb_flush_log_at_trx_commit
안전성을 위해서라면 1을 사용하고, 성능을 위해서라면 2를 사용합니다.
2로 설정하면 commit할 때마다 디스크에 기록하나 싱크는 1초에 한번만 한다.
0으로 설정할 경우 여러 트랜잭션을 1초마다 한번씩 모아서 디스크에 기록 하기에 인서트 성능을 대폭 향상 서버가 갑자기 다운될 경우 1초간의 트랜잭션은 상실된다. 초기 대용량의 덤프 받은것을 올릴때 임시적으로 사용하면 좋다.
innodb_additional_mem_pool_size
보통 2M정도가 적당하지만 아주 많은 테이블을 사용한다면 늘려주어야 합니다.
innodb_log_buffer_size
커다란 트랜잭션을 처리할 경우 크게 잡아주는 것이 좋지만 트랜잭션이작거나 거의 없다면 크게 잡는 것은 낭비입니다.
Innodb_log_file_size
Write 성능에 영향을 미친다. 크기에 따라 InnoDB의 복구 시간이 증가한다.
my.cnf 에서 빠르게 하는 방법중 skip-host-cache skip-name-resolve
영역에 대한 참고
https://dung-beetle.tistory.com/54
https://yunhyeonglee.tistory.com/29
1. Global 메모리 영역
- Innodb_buffer_pool_size
- Key_buffer_size
- innodb_log_buffer_size
- tmp_table_size
→ Global 메모리 = Innodb_buffer_pool_size + Key_buffer_size + innodb_log_buffer_size + tmp_table_size
2. Session 메모리 영역
- sort_buffer_size
- read_buffer_size
- read_rnd_buffer_size
- join_buffer_size
- thread_stack
- binlog_cache_size
- Max connection
→ Session 메모리 = (sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size) x Max connection
메모리 사용 예
• 글로벌 메모리
커넥션 여부와 관계 없이 기본적으로 이정도는 먹고 들어간다
Innodb buffer pool size: 2048 MB + Key buffer size: 16MB + innodb log buffer: 10MB + tmp table size: 64MB
= 약 2.1 GB
• 세션 메모리
커넥션 되어 사용되는 수치 만큼 늘어 나는것이라 생각하면 됨
( sort_buffer_size: 2MB + read_buffer_size: 1MB + read_rnd_buffer_size: 1MB + join_buffer_size: 0.128 MB + thread_stack: 0.128 MB + binlog_cache_size: 1MB) x Max connection 300
= 약 1.6 GB
따라서 global 메모리 영역 (2.1GB) + Session 메모리 영역(1.6GB) 에 추가로 Mariadb 기본 기동(350MB) + performance_schema data(150MB) + OS / 파일 버퍼링 공간(전체 메모리의 약 10%) 을 고려
my.cnf 메모리 설정의 예
https://www.linux.co.kr/bbs/board.php?bo_table=lecture&wr_id=2292
* 참고할것
- AWS 라이트세일 서버리스 DBMS - MySQL8 > AWS.클라우드 - PHP 프로그램으로 확인
- MySQL 이노디비 튜닝 포인트 관련된것 > 리눅스서버