Zabbix DB가 느릴 때: MySQL 파티션으로 해결하는 실무 구축법 (5편) — Housekeeper 비활성화와 캐시·프로세스 튜닝으로 최종 성능 완성

개요

이 시리즈의 마지막 편에서는 파티션 구조 적용 이후 Zabbix 서버의 내부 캐시 및 프로세스 튜닝을 통해
DB와 서버 프로세스 간의 I/O 밸런스를 맞추는 과정을 다룬다.

특히 Zabbix의 Housekeeper 기능을 완전히 비활성화하고,
CacheSize, HistoryCacheSize, TrendCacheSize, StartDBSyncers 등 주요 항목을 조정해
대규모 환경에서도 안정적인 동작을 유지하도록 구성한다.


1) Housekeeper 비활성화

Housekeeper는 오래된 데이터를 주기적으로 삭제하는 프로세스다.
하지만 이미 파티션 기반 자동 삭제 스크립트를 운영 중이라면,
이 기능은 중복되고 불필요한 부하만 유발한다.

Zabbix 7.4 기준으로 웹 UI에서 직접 비활성화해야 한다.

경로:
Administration → Housekeeping

항목설정값설명
Events and alerts☐ (끄기)이벤트 로그 자동 삭제 중단
Services☐ (끄기)SLA 관련 서비스 이력 유지 안 함
User sessions☑ (유지)사용자 세션만 유지
History☐ (끄기)DB 파티션 스크립트가 처리함
Trends☐ (끄기)DB 파티션 스크립트가 처리함

⚙️ Housekeeper가 남아 있으면, 대량 삭제 시 MySQL I/O를 잠시 정지시킬 수 있다.
파티션 구조 기반 환경에서는 반드시 비활성화해야 한다.


2) Zabbix 서버 캐시 및 프로세스 튜닝

설정 파일: /etc/zabbix/zabbix_server.conf

아래 항목들을 찾아 주석을 제거하고, 환경에 맞게 수정한다.

항목설명권장값 (RAM 128G 기준)
CacheSize설정 캐시(호스트/템플릿 구조 저장)256M ~ 512M
HistoryCacheSize실시간 메트릭 캐시512M ~ 1G
TrendCacheSizeTrend 집계 캐시256M 이상
ValueCacheSize최근 값 캐시 (트리거 판단용)512M 이상
StartDBSyncersDB write 병렬 sync 프로세스8~16
StartPollersPoller 프로세스 수 (호스트 수 / 50) 정도환경별 조정
vi /etc/zabbix/zabbix_server.conf

예시:

CacheSize=512M
HistoryCacheSize=1G
TrendCacheSize=512M
ValueCacheSize=512M
StartDBSyncers=12
StartPollers=20

변경 후 적용:

systemctl restart zabbix-server

3) MySQL InnoDB 튜닝

설정 파일: /etc/mysql/mysql.conf.d/mysqld.cnf

서버 메모리 128G 기준의 안정적인 값 예시는 다음과 같다.

innodb_buffer_pool_size = 72G
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_doublewrite = 1
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_buffer_pool_instances = 4
항목설정값평가
innodb_buffer_pool_size = 72GRAM의 56~60% 수준, 적정
innodb_log_file_size = 1G안정성 중심, I/O 폭주 방지⚙️ (쓰기량 많으면 4G 추천)
innodb_flush_log_at_trx_commit = 2성능 중심(안정성 유지)
innodb_doublewrite = 1innodb_doublewrite=0 은 NVMe의 높은 IOPS와 병렬 쓰기 성능 덕분에
성능상 궁합은 좋지만,
전원 장애나 커널 패닉 시 페이지 찢김(torn page) 이 발생할 수 있다.
따라서 운영 DB에서는
안정성을 위해 innodb_doublewrite=1 유지가 정석이다.
innodb_flush_method = O_DIRECTOS 캐시 중복 방지
innodb_io_capacity = 2000NVMe 기준 적정, 여유 시 3000~4000도 가능
innodb_read/write_io_threads = 8충분
innodb_buffer_pool_instances = 472G 환경에서 권장 범위

적용 후:

systemctl restart mysql

4) 점검 및 검증

  1. Housekeeper 중지 확인
    • Zabbix UI → Administration → Housekeeping
    • 관련 항목이 비활성화 상태인지 확인
  2. 서버 캐시 상태 확인
    • zabbix_server.log 내 “Value cache size” 문구가 정상인지 체크
    • 부족 시 “Cache size cannot be increased” 경고 발생 여부 확인
  3. DB I/O 상태 확인iostat -x 2 | grep mysql
    • 파티션·크론 구조 정상 작동 시 I/O 사용률이 일정하게 분산돼야 함
  4. Zabbix 대시보드 반응 속도 테스트
    • 그래프/이벤트 탭 로딩 속도가 체감상 빨라지면 효과 정상

5) 결과 및 정리

단계주요 효과
Housekeeper 비활성화중복 삭제 제거, DB 부하 감소
캐시 확장메모리 기반 데이터 접근 증가, I/O 감소
DB 파라미터 튜닝InnoDB 처리율 향상, Commit 효율 개선
전체 효과파티션 기반 I/O 최적화 + Zabbix 프로세스 밸런스 완성

💡 이제 Zabbix는 수집·보존·삭제의 전체 주기가 자동화된 완전한 구조로 동작한다.
일별·월별 파티션 분리, 자동 크론 관리, 캐시 튜닝이 모두 결합되면
Zabbix DB의 병목은 사실상 제거된다.

ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. 본문 및 이미지를 무단 복제·배포할 수 없습니다. 공유 시 반드시 원문 링크를 명시해 주세요.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.

🛠 마지막 수정일: 2025.10.28