LearnRun
Synology DSM 7 Docker 內 MariaDB 성능개선(Tuning) 본문
◈ Contents
DB 튜닝을 검색하면 많은 자료가 나오는데,
DB 버전 등 환경에 따라 너무 달라서, 공식 문서를 보며 일부 정리하였습니다.
주요 파라미터
사용
INNODB_BUFFER_POOL_SIZE
- 데이터 파일과 로그 파일이 기록되는 순서를 관리하거나, 디스크 액세스를 줄이는 캐시 역할을 합니다.
- 실제로, 저는 쿼리/인덱스 튜닝을 충분히 진행했음에도 속도 개선이 미미하면 해당 파라미터를 의심합니다.
- 총 메모리의 80%까지 지정할 수 있습니다만, 컨테이너를 여럿 가동하는 만큼 적당한 조정이 필요하겠습니다.
MAX_CONNECTIONS
- 튜닝과 조금 거리가 있지만 사용할 필요가 있기에 항목을 만들었습니다.
- 대개 NAS에서 사용할 때는 건드릴 일 없으나, connection 초과가 발생할 때 해당 항목을 조정하여 문제를 해결합니다.
- 너무 높이면 메모리가 해당 파라미터 값만큼 분할되어 할당됩니다. 많을수록 메모리 부하가 커지게 됩니다.
- 즉슨, 해당 값을 조정하면 메모리 변수들도 조정이 이루어져야 한다는 뜻입니다.
MAX_ALLOWED_PACKET
- 일반적으로 client에서 넘길 수 있는 최대 패킷을 감안해서 설정합니다.
- 지나치게 큰 패킷을 차단하는 데 사용하지만, 잘 송신한 데이터도 조건에 따라 연결을 끊을 수 있어 확인이 필요합니다.
- django loaddata를 사용, 데이터를 Write하면서 해당 문제가 발생했었고, 해당 파라미터 수정을 통해 해결했습니다.
미사용
INNODB_BUFFER_POOL_CHUNK_SIZE
- MariaDB 10.8 부터는 BUFFUER_POOL_SIZE에 따라 자동으로 조정되므로, 설정할 필요가 없습니다.
- 일반적으로 튜닝 설정에서 자주 언급되어, 기재하였습니다.
INNODB_BUFFER_POOL_INSTANCES
- 버퍼 풀을 몇 개로 분할할지 지정하는 변수입니다. 경합 동시성(contention cuncurrency)를 줄이기 위해 사용합니다.
- 단일 풀로 본 문제를 잘 해결한 것으로 보입니다. 10.5.1부터는 사용되지 않고, 10.6 버전부터는 삭제되었습니다.
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 컨테이너를 재부팅해줍니다.
확인
터미널에서 확인이 가능합니다.
상기 명령어를 통해 확인이 가능합니다.
2G = 2048M 으로 변경된 모습입니다.
타 파라미터 또한 이러한 방식으로 조회할 수 있습니다.