--- zabbix-1.8.12/src/zabbix_server/housekeeper/housekeeper.c 2012-04-24 18:33:09.000000000 +1000 +++ zabbix-1.8.12-mach/src/zabbix_server/housekeeper/housekeeper.c 2012-11-22 22:12:19.771216784 +1000 @@ -266,7 +266,7 @@ const char *__function_name = "delete_history"; DB_RESULT result; DB_ROW row; - int min_clock, deleted; + int min_clock, deleted, limited_delete = 1; zabbix_log(LOG_LEVEL_DEBUG, "In %s() table:'%s' itemid:" ZBX_FS_UI64 " keep_history:%d now:%d", __function_name, table, itemid, keep_history, now); @@ -283,7 +283,16 @@ min_clock = MIN(now - keep_history * SEC_PER_DAY, min_clock + 4 * CONFIG_HOUSEKEEPING_FREQUENCY * SEC_PER_HOUR); DBfree_result(result); - deleted = DBexecute("delete from %s where itemid=" ZBX_FS_UI64 " and clock<%d", table, itemid, min_clock); + if (0 == CONFIG_MAX_HOUSEKEEPER_DELETE) { + deleted = DBexecute("delete from %s where itemid=" ZBX_FS_UI64 " and clock<%d", table, itemid, min_clock); + } else { + do { + limited_delete = DBexecute("delete from %s" + " where itemid=" ZBX_FS_UI64 " and clock<%d limit %d", + table, itemid, min_clock, CONFIG_MAX_HOUSEKEEPER_DELETE); + deleted += limited_delete; + } while (limited_delete > 0); + } zabbix_log(LOG_LEVEL_DEBUG, "End of %s():%d", __function_name, deleted);