Zabbixアップグレード後に特定条件化で、イベント表示できない

お世話になっております。
何度か、アップグレードについての投稿をさせていただきました。

今回、Zabbixアップグレード後に、イベント画面を確認すると、
MySQLのCPU使用率が上昇し、イベント画面が表示されない現象が起こりました。

ある特定条件とは、DBのパッチを当てた後、
[監視データ]⇒[イベント]をクリック⇒グループ[すべて]⇒ホスト[すべて]⇒ズーム[すべて]
とすべてのイベントを検索したときに発生します。

以下、環境と、バージョンアップ方法です。

【環境】
□ZabbixServer
 OS:CentOS5.10
 DB:MySQL5.5
 ZBXVer:zabbix-1.8.19-1.el5 ⇒ zabbix-2.0.15-1.el5

【バージョンアップ方法】
①DBのバックアップ
②Zabbix停止
③rpm -Uvhにてパッケージアップデート
④/usr/share/doc/zabbix-xxxx-mysql-2.0.15/upgrades/dbpatches/2.0/mysql 配下で
 ./upgrade -uxxxx zabbix を実行

イベントは全部で180万件あるのですが、Zabbix1.8では本現象は発生しません。
また、イベント画面から他の画面に遷移してもCPUの負荷は下がらず、
MySQLのプロセスを再起動するまで下がりません。
※HTTP、zabbix_serverプロセスの再起動でもなおらず。

なにかお心当たりある方はいないでしょうか?

以上、よろしくお願いいたします。

コメント表示オプション

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

イベント系の保存用テーブル、イベントから起動されたアクションのテーブル
events / actions が大きくなっているのだと思います

詳細なソースコードまで比較していないので、あくまで推測ですが‥
1.8 系の WebUI と 2.0 系の WebUI で、DB検索のために使われているSQLが異なり
検索結果を得るのに時間が掛かってしまっているのだと思います
(実行中・完了などのステータスをWebUIに表示するためにJOINされていたり‥という部分で異なる部分があるのでは?)

詳細はMySQL側でスロークエリ等を確認しないといけないかと思いますが
・DB側でテーブルの最適化 ( alter table xxxx engine=innodb; ) 等をやってみる
・DB側で、SQL実行に効果がでるようなインデックスを追加でカスタマイズ
・過去データ等で不要なものが特定できるならば、過去のイベント・アクション実行履歴等を削除
あたりが対応になるかと推察します

#RHEL5/CentOS5用のリポジトリですと、MySQLは5.1系かと思いますが
#別途5.5系を導入されたのでしょうか?

ユーザー hajime の写真

To:fripper様

いつもお世話になっております。

返信ありがとうございます。

・DB側でテーブルの最適化 ( alter table xxxx engine=innodb; ) 等をやってみる
 ⇒まずこちらで試してみます。

・DB側で、SQL実行に効果がでるようなインデックスを追加でカスタマイズ
 ⇒こちらは、インデックスをどうはると効果がでるか考えて見ます。

#RHEL5/CentOS5用のリポジトリですと、MySQLは5.1系かと思いますが
#別途5.5系を導入されたのでしょうか?
 ⇒こちらは、別途5.5系を導入し、Zabbixをインストールしております。

もともとCent5.6から使用しており標準が5.0系でした。
しかし、MySQLの
#28404: Optimizer does not consider index that can be used for ORDER BY
というバグに該当するバージョンで、性能劣化が激しかったので、
5.5系にバージョンアップした経緯が有ります。

また、Cent5.6からCent5.10にOSのバージョンアップをするときに、
標準のMySQL5.1系にと思いましたが、その試験に費やす時間を考えて、
MySQL5.5系のバージョンのまま、バージョンアップしました。
※バージョンアップは実際、OSのバージョンアップではなく、
 新規構築したCent5.10への移行という方法をとりました。
※ちなみに移行はMySQLのレプリケーション機能を使用して
 DBだけは既存から持ってきてます。

以上、よろしくお願いいたします。

ユーザー hajime の写真

To:fripper様

いつもお世話になっております。

alter table をやった結果ですが、変わらずでした。
またslowqueryを取得したところ、

eventsテーブルの
# Time: 151202 3:32:11
# User@Host: zabbix[zabbix] @ localhost []
# Query_time: 3.118580 Lock_time: 0.000086 Rows_sent: 1001 Rows_examined: 1697988
SET timestamp=1448994731;
SELECT e.eventid,e.objectid FROM events e WHERE e.object='0' AND e.source='0' AND e.clock>='1405705852' AND e.clock<='1448992210' AND e.eventid<='14449137' ORDER BY e.clock DESC,e.eventid DESC LIMIT 1001 OFFSET 0;

と、Rows_sent/Rows_examinedが異なる複数のログが確認できました。

あと、気になるところは、
# Time: 151202 10:28:55
# User@Host: zabbix[zabbix] @ localhost []
# Query_time: 24.654716 Lock_time: 0.000072 Rows_sent: 1 Rows_examined: 57258997
SET timestamp=1449019735;
select count(*) from history_uint;
# Time: 151202 10:29:21
# User@Host: zabbix[zabbix] @ localhost []
# Query_time: 24.590049 Lock_time: 0.000067 Rows_sent: 1 Rows_examined: 55119828
SET timestamp=1449019761;
select count(*) from history;

と、history、history_uintテーブルのすべてのレコードを検索するようなクエリも複数発行している
ことも確認できました。

そもそもイベント画面を表示するために、history、history_uinitをすべて検索するような
仕組みなのでしょうか??

以上、よろしくお願いいたします。

ユーザー TNK の写真

そもそもイベント画面を表示するために、history、history_uinitをすべて検索するような
仕組みなのでしょうか??

hajimeさんが、

[監視データ]⇒[イベント]をクリック⇒グループ[すべて]⇒ホスト[すべて]⇒ズーム[すべて]
とすべてのイベントを検索したときに発生します。

とすべてのイベントを表示させようとされたからでしょう。

症状からして、MySQLのバッファを利用しきってしまって、ハード
ディスクのI/Oが発生してしまっているのではないでしょうか?

どのくらいのスペックのサーバを利用されているのでしょうか?
特にメモリの搭載量やmy.cnfで設定された各種メモリ関連のチュー
ニングはどの程度行われていますか?

ユーザー hajime の写真

To:TNK様

いつもお世話になっております。
返信ありがとうございます。

>とすべてのイベントを表示させようとされたからでしょう。
イベント画面でも、history/history_uint等、ヒストリの情報も
取得しにいく仕様となっているのですね。。。

サーバのスペックは、4CPU(Xeon 2.0GHz)、12GBのメモリで
my.cnfは以下の通りです。

character-set-server=utf8
skip-character-set-client-handshake
innodb_additional_mem_pool_size=128M
innodb_buffer_pool_size=5120M
innodb_log_buffer_size = 128M
innodb_log_file_size=512M
innodb_log_files_in_group=2
innodb_flush_method=O_DIRECT
innodb_file_per_table
max_allowed_packet=64M
max_connections=2048
max_connect_errors=1000
max_heap_table_size=256M
sort_buffer_size=24M
join_buffer_size=24M
read_rnd_buffer_size=48M
table_open_cache=1600
wait_timeout=28800
connect_timeout=60
tmp_table_size=512M
innodb_use_native_aio

以上、よろしくお願いいたします。