LearnRun

Synology DSM 7 Docker 內 MariaDB 성능개선(Tuning) 본문

Synology(NAS)

Synology DSM 7 Docker 內 MariaDB 성능개선(Tuning)

PROMPT_ 2023. 1. 22. 10:15

◈  Contents

     

    DB 튜닝을 검색하면 많은 자료가 나오는데,

    DB 버전 등 환경에 따라 너무 달라서, 공식 문서를 보며 일부 정리하였습니다.

     

    주요 파라미터

    사용

    INNODB_BUFFER_POOL_SIZE

    참조 : https://mariadb.com/kb/en/innodb-system-variables/#innodb_buffer_pool_size

    - 데이터 파일과 로그 파일이 기록되는 순서를 관리하거나, 디스크 액세스를 줄이는 캐시 역할을 합니다.

    - 실제로, 저는 쿼리/인덱스 튜닝을 충분히 진행했음에도 속도 개선이 미미하면 해당 파라미터를 의심합니다. 

    - 총 메모리의 80%까지 지정할 수 있습니다만, 컨테이너를 여럿 가동하는 만큼 적당한 조정이 필요하겠습니다.

     

     

    MAX_CONNECTIONS

    참조 : https://mariadb.com/kb/en/server-system-variables/#max_connections

    - 튜닝과 조금 거리가 있지만 사용할 필요가 있기에 항목을 만들었습니다.

    - 대개 NAS에서 사용할 때는 건드릴 일 없으나, connection 초과가 발생할 때 해당 항목을 조정하여 문제를 해결합니다.

    - 너무 높이면 메모리가 해당 파라미터 값만큼 분할되어 할당됩니다. 많을수록 메모리 부하가 커지게 됩니다.

    - 즉슨, 해당 값을 조정하면 메모리 변수들도 조정이 이루어져야 한다는 뜻입니다.

     

     

    MAX_ALLOWED_PACKET

    참조 : https://mariadb.com/kb/en/server-system-variables/#max_allowed_packet

    - 일반적으로 client에서 넘길 수 있는 최대 패킷을 감안해서 설정합니다.

    - 지나치게 큰 패킷을 차단하는 데 사용하지만, 잘 송신한 데이터도 조건에 따라 연결을 끊을 수 있어 확인이 필요합니다.

    - django loaddata를 사용, 데이터를 Write하면서 해당 문제가 발생했었고, 해당 파라미터 수정을 통해 해결했습니다.

     

     

    미사용

    INNODB_BUFFER_POOL_CHUNK_SIZE

    참조 : https://mariadb.com/kb/en/innodb-system-variables/#innodb_buffer_pool_chunk_size

    - MariaDB 10.8 부터는 BUFFUER_POOL_SIZE에 따라 자동으로 조정되므로, 설정할 필요가 없습니다.

    - 일반적으로 튜닝 설정에서 자주 언급되어, 기재하였습니다.

     

     

    INNODB_BUFFER_POOL_INSTANCES

    참조 : https://mariadb.com/kb/en/innodb-system-variables/#innodb_buffer_pool_instances

    - 버퍼 풀을 몇 개로 분할할지 지정하는 변수입니다. 경합 동시성(contention cuncurrency)를 줄이기 위해 사용합니다.

    - 단일 풀로 본 문제를 잘 해결한 것으로 보입니다. 10.5.1부터는 사용되지 않고, 10.6 버전부터는 삭제되었습니다.

     

     

    KEY_BUFFER_SIZE

    참조 : https://mariadb.com/kb/en/myisam-system-variables/#key_buffer_size

    - MyISAM은 MySQL RDBMS의 5.5 버전 이전에서 기본 스토리지 엔진으로 사용했습니다.

    - django에서 MyISAM은 거의 쓰이지 않으며, InnoDB가 쓰이므로 본 포스팅에서는 제외했습니다.

     

     

    MariaDB Container에서

    적용 방법

    파일 수정에 관해서는 이전 글을 참조해주세요.

    [mysqld] 항목 아래에 다음과 같은 항목을 추가합니다.

    변수값은 임의로 지정한 것이니, 환경에 맞게 설정하시면 되겠습니다.

    # 호스트 이름 캐시 비활성화
    skip-host-cache
    # 네임서버 조회, resolving 과정 생략
    skip-name-resolve
    max_connections = 200
    innodb_buffer_pool_size = 2048M
    max_allowed_packet = 32M

    이후, 저장한 뒤 Mariadb 컨테이너를 재부팅해줍니다.

     

    확인

    터미널에서 확인이 가능합니다.

    innodb_buffer_pool_size 적용 이전
    innodb_buffer_pool_size 적용 이후

    상기 명령어를 통해 확인이 가능합니다.

    2G = 2048M 으로 변경된 모습입니다.

     

    타 파라미터 또한 이러한 방식으로 조회할 수 있습니다.

    ‌ ‌ ‌
    Comments