본문 바로가기

DB/Mysql(MariaDB)

MariaDB - Connection Memory Management와 주요 메모리 파라미터 튜닝

728x90

 

1. 튜닝이 왜 필요한가?

MariaDB의 메모리 튜닝은 서버의 성능 최적화와 안정성 보장을 위해 필수적입니다.

 

  • 성능 최적화 : 튜닝을 통해 적절하게 메모리를 사용하면 처리 속도가 빨라지고, 데이터베이스 응답 시간이 단축됩니다.
  • 안정성 향상 : 메모리 설정을 통해 메모리 누수나 과도한 사용으로 인한 서버 다운타임을 방지할 수 있습니다.
  • 자원 효율성 : 시스템 자원을 효율적으로 사용하여 서버 운영 효율성을 높일 수 있습니다.

 

2. 튜닝을 하면서 주의할 점

  • 메모리 한계점 확인 : 과도한 메모리 할당은 시스템 전체의 성능 저하를 발생시킬 수 있습니다.
  • 단계적 조정 : 한 번에 많은 설정을 변경하기보다는, 모니터링하면서 단계적으로 변경하는 게 중요합니다.
  • 테스트 환경 사용 : 설정 변경 전 테스트 환경에서 성능 테스트를 진행한 뒤 실서버에 적용하는 게 안전합니다.
  • 문서화 : 튜닝을 한 이유를 명확하게 문서화하면 추후 문제 발생 시 빠른 원인 파악에 도움이 됩니다.

 

3. 주요 메모리 관련 파라미터

파라미터 설명 기본값 권장 설정
innodb_buffer_pool_size InnoDB 스토리지 엔진에서 사용하는 버퍼 풀 크기 설정 128MB 서버 메모리 70~80%
key_buffer_size MyISAM 테이블에 사용되는 키 캐시의 크기 설정 8MB 서버 메모리 10~20%
max_connections MariaDB 서버가 허용하는 최대 동시 연결 수 설정 151 서버 리소스에 따라 조정
table_open_cache 테이블 캐시의 크기를 설정 2000 서버 리소스에 따라 조정
thread_cache_size 재사용할 스레드 수 설정 8 서버 리소스에 따라 조정
query_cache_size 쿼리 캐시의 크기를 설정 0 비활성화 권장
query_cache_limit 쿼리 캐시할 최대 결과 크기 설정 1MB 비활성화 권장
tmp_table_size 메모리 내 임시 테이블의 최대 크기 설정 16MB 서버 리소스에 따라 조정
max_heap_table_size 메모리 내 heap 테이블의 최대 크기 설정 16MB 서버 리소스에 따라 조정
join_buffer_size 조인 작업에 사용되는 버퍼 크기 설정 256KB 기본값 유지 권장
sort_buffer_size 정렬 작업에 사용되는 버퍼 크기 설정 256KB 기본값 유지 권장
read_buffer_size 읽기 작업에 사용되는 버퍼 크기 설정 128KB 기본값 유지 권장
read_rnd_buffer_size 랜덤 읽기 작업에 사용되는 버퍼 크기 설정 256KB 기본값 유지 권장
innodb_log_buffer_size InnoDB 로그 버퍼 크기 설정 16MB 기본값 유지 권장
binlog_cache_size binary log의 메모리 버퍼 크기 설정 32KB 서버 리소스에 따라 조정
thread_stack 스레드 별 할당되는 스택 메모리 크기 설정 192KB 기본값 유지 권장

 

4. 설정된 값 확인

  • SHOW VARIABLES;  // 모든 설정 값 확인
  • SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
  • SHOW VARIABLES LIKE 'key_buffer_size';
  • SHOW VARIABLES LIKE 'max_connections';
  • SHOW VARIABLES LIKE 'thread_stack';

 

5. 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

728x90
반응형