태그 Archives: trends_uint

Zabbix 서버의 데이터베이스 테이블 파티셔닝

Zabbix 를 구축하고 일정 기간 운영을 할 경우 “Zabbix housekeeper processes more than 75% busy” 장애를 만나게 된다.
Zabbix 는 housekeeper 가 history 및 trends 테이블에 불필요한 쿼리를 삭제하는 기능을 가지고 있다.
감시 대상이 많을 수록 크겠지만 history_uint 테이블의 크기는 GB 단위를 사용하게 된다.

이때 DELETE 를 이용하게 되는 수백만 단위에서 시간 값을 가지고 삭제 하기 때문에 문제가 된다.
cpu 과점 문제가 발생할 수 밖에 없다. (innodb buffer pool 설정을 키우고 큰 메모리를 장착했다면 문제가 발생하지 않겠지만..)

때문에 housekeeper 대신 테이블을 일자별로 파티셔닝을 하고 DB프로시저를 이용해서 DROP을 하도록 하면 자원 사용을 줄일 수 있다.

아래 프로시저 생성 방법은 미리 일정한 시간 마다 사용할 파티션을 미리 생성(24 시간 / 3개의 포인트) 하고 맞는 시간에 Insert 가 발생 한다면
그에 맞는 파티션에 적재 되도록 하고, 보유 기간(7일)이 만료된 파티션을 DROP을 하는 기능을 가지고 있다.

 


 

1. 압축파일을 다운 받아 프로시저를 DB에 생성한다.

프로시저는 history 는 7일 trends 는 365일 으로 지정되어 있다.

 

2. Mysql 으로 접속해서 스케쥴러가 켜져 있는지 확인한다.

 

3. 생성한 프로시저의 스케쥴링을 12시간 마다로 설정 하고 확인 한다.

이 명령어를 실행할때 이미 쌓여있는 데이터가 크다면 최초 프로시저 실행 시간에 많은 시간이 걸릴 수 있다.

 

4. housekeeper 사용을 끈다.

2025-02-18_164446

 

zbx_db_partitiong.sql 파일로 복구한 프로시저에서 history 는 7일 trends 는 365일로 지정 되어 있다. (보유 날자는 필요할 경우 수정하라 @_@a)

 

파티셔닝이 된 정보는 다음과 같이 확인이 가능하다.

 

출처 : https://bestmonitoringtools.com/zabbix-partitioning-tables-on-mysql-database/