[Cloud Z DB] MariaDB의 메모리 설정을 어떻게 해야 하나요?

Print

Mariadb의 메모리는 크게 두 가지로 분류가 됩니다.

1. Global 메모리 영역

: DB가 최초 기동되었을 때에는 메모리를 최소한만 사용하다가 설정된 값 까지 증가하며 증가한 이후에는 "메모리를 반환하지 않고" 설정 된 값 이내에서 계속 사용됩니다.

(오라클의 경우 DB기동시 설정된 값 만큼 메모리를 할당 받고 올라가는 반면 Mariadb 는 기동시 설정된 메모리 값만큼 할당 받는것이 아닌 설정된 값 만큼 서서히 증가하게 됩니다)

  • 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  메모리 영역
Mariadb session 별로 사용되어지는 메모리 공간으로 Max connection 설정 값과 관련이 있습니다.

(커넥션을 맺고만 있을 경우에는 커넥션에 필요한 최소한의 메모리만 사용되어지며 조인, 정렬 등이 필요할 경우에는 아래 설정된 값만큼을 메모리에서 사용하게 됩니다.

때문에 정확한 예측값은 동시에 Active한 세션 수 이지만 기본적으로는 Max connection 수 만큼 동시 사용 세션이 수행될 수 있기에 아래 공식으로 계산되어 집니다.) 

  • 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


*예시

만약 Mariadb의 설정값이 다음과 같다면...

Global 메모리

  • Innodb buffer pool size: 2048 MB
    + Key buffer size: 16MB
    + innodb log buffer: 10MB
    + tmp table size: 64MB
    = 약 2.1 GB

Session 메모리

  • ( 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%) 을 고려하여 

위 설정된 값을 기준으로 전체 메모리의 적정 수치는 4,5GB ~ 5GB 정도가 적당해 보입니다.


위의 설명 및 예시를 참고하시어 MariaDB의 메모리를 설정해주시면 됩니다.

이 답변이 유용합니까? 아니오

Send feedback
도움이 되어드리지 못해 죄송합니다. 아티클 개선을 위해 의견을 제공해 주시기 바랍니다.