アイテムのヒストリ保存期間を縮めたときに、housekeeperが古いデータを削除してくれない

Zabbix 2.0.5を、CentOS6の環境にインストールし、MySQLと共に使用しています。
データベースのデータサイズが増えてきたため、アイテムのヒストリデータを削減しようと考え、ヒストリの保存期間を以前設定していた45日から30日に減らしました。
#このとき、対象となるアイテムの数が多かったため、DB内のitemsテーブルのhistoryカラムを直接書き換えました。

その後、housekeeperの処理により、40日分ほど溜まっていたデータが30日分に切り詰められることを期待したのですが、実際には数時間分のデータしか削除されませんでした。
デバッグレベルのログ出力を有効にして、housekeeperのログを出してみると、どうも期待しているより古い時間以前のデータしか消してくれないような動作をしています。
-----
21153:20130516:155337.944 In delete_history() table:'history' itemid:34740 keep_history:30 now:1368686877
21153:20130516:155337.944 query [txnlev:0] [select min(clock) from history where itemid=34740]
21153:20130516:155337.944 query [txnlev:0] [delete from history where itemid=34740 and clock<1365144240] ← 30日前(1368686877-2592000で1366094877)より古いデータを削除して欲しいのに、もっと古いデータしか削除していない?
21153:20130516:155337.946 In delete_history() table:'history_uint' itemid:34740 keep_history:30 now:1368686877
21153:20130516:155337.946 query [txnlev:0] [select min(clock) from history_uint where itemid=34740]
21153:20130516:155337.963 In delete_history() table:'history_str' itemid:34740 keep_history:30 now:1368686877
21153:20130516:155337.963 query [txnlev:0] [select min(clock) from history_str where itemid=34740]
21153:20130516:155337.964 In delete_history() table:'history_text' itemid:34740 keep_history:30 now:1368686877
21153:20130516:155337.964 query [txnlev:0] [select min(clock) from history_text where itemid=34740]
21153:20130516:155337.964 In delete_history() table:'history_log' itemid:34740 keep_history:30 now:1368686877
21153:20130516:155337.964 query [txnlev:0] [select min(clock) from history_log where itemid=34740]
21153:20130516:155337.964 In delete_history() table:'trends' itemid:34740 keep_history:365 now:1368686877
21153:20130516:155337.964 query [txnlev:0] [select min(clock) from trends where itemid=34740]
21153:20130516:155337.964 query [txnlev:0] [delete from trends where itemid=34740 and clock<1337150877]
21153:20130516:155337.965 In delete_history() table:'trends_uint' itemid:34740 keep_history:365 now:1368686877
21153:20130516:155337.965 query [txnlev:0] [select min(clock) from trends_uint where itemid=34740]
-----

そこで質問なのですが、
1. この動作は仕様通りの動作なのでしょうか? それともバグなのでしょうか?
2. 仕様通りの動作である場合、きっちり30日分にヒストリデータを切り詰めるには、手動で削除するしか方法はないのでしょうか?

ソースを読むと、housekeeper.cのdelete_history関数の処理がどうもおかしい気がするのですが、自信がないので、詳しい方にご意見をいただけるとありがたいです。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

Webから値を変更した時は、期間が反映されていたと思うのですが、
DB上の値を変更された後で、zabbix_serverの再起動は行ってみられ
ましたでしょうか?

ソースの確認まではできていないので、違うかもしれませんが、
設定情報はキャッシュされていたりするので、zabbix_serverにDBが
変更されたことをプロセスの再起動によって明示的に反映させること
ができるのではないかと予想しています。

もし、zabbix_serverの再起動を試されていないのであれば、試して
みていただけませんでしょうか。

ユーザー kodai の写真

housekeeper.cのdelete_history関数では、

(1) アイテムのヒストリの保存期間を超えた期間
(2) zabbix_server.confのHousekeepingFrequency * 4の時間

の小さい方を利用して過去のデータを削除するようになっています。いちどに大量のデータを消してしまうとDBへの負荷になってしまうためにこういった作りになっています。(2)の場合でもデフォルトでは1時間に1回、4時間分のデータを消していくので徐々に不要なデータがなくなっていくことになります。

ですので少し待っていれば徐々に不要なデータは削除されていくはずです。

>TNKさん
何度か再起動してみたのですが、状況は変わりませんでした。
DB上の値とWebコンソールでの値は一致していたので、キャッシュされていたのではないと思います。

>kodaiさん
あの部分はそういう読み方でやはり正しかったのですね、そしてこれは仕様なのですね…、教えていただきありがとうございます。
10日分なので3日強あれば消えるとは思うのですが、データ量が多いアイテムについては面倒ですが手動で消すことも検討しようと思います。

ユーザー TNK の写真

Web画面上のデータはデータベースから取得して表示していますの
で、zabbix_serverプロセスがキャッシュしている値との一致の確
認にはならないと思います。

再起動されたとのことですが、再起動後にどれだけ経過後に確認さ
れたのでしょうか。
kodaiさんが書かれている通り、自動的に削除されるまでには時間
がかかりますので、しばらく待って再確認してみてください。