iowait対策としてzabbixで使用しているMySQLのDB領域を圧縮する
zabbixのこの赤いロゴ大好きです。
最近、zabbixのGUIが重くて状況を確認したところ、iowaitが20%を定常的に超えていたのでIOの負荷を下げるためにデータ圧縮をしてみます。
ディスク構成がチープですので、innodbのデータ領域に書き込む前にデータを圧縮してIO負荷を下げるということです。どれくらい効果が出るのか検証できないため、まずは実践です。
他に負荷に関して気になる点
CPU負荷はhousekeeperの処理で定期的に上がっている状況。
icmpのプロセスも負荷が高そうです。
何個か別のサービスが同居しているため、そちらの負荷の可能性もある。
この通り、問題は多々あり、これですべて解決するわけではないですが、まずは直接の原因であろうiowaitの解消のために実施してみます。zabbixはまだ運用を開始したばかりで、nvpsも200弱程度です。もちろんまだまだハード追加なしで対応できるレベルだと思ってます。
まずテーブル内のレコード数をカウントします。この数を圧縮にかかる時間の目安として事前に確認してメンテナンスの計画を立てます。データ量ではないので一概には言えませんが、hiroty, history_unit, trend_unitあたりが時間かかりそうです。
$ mysql -uroot -e "SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'zabbix';" +-----------------------+------------+ | table_name | table_rows | +-----------------------+------------+ | acknowledges | 0 | | actions | 12 | | alerts | 1084 | | application_template | 318 | | applications | 343 | | auditlog | 61893 | | auditlog_details | 2509 | | autoreg_host | 1 | | conditions | 25 | | config | 1 | | dbversion | 1 | | dchecks | 5 | | dhosts | 50 | | drules | 5 | | dservices | 49 | | escalations | 133 | | events | 180217 | | expressions | 4 | | functions | 27233 | | globalmacro | 2 | | globalvars | 1 | | graph_discovery | 10249 | | graph_theme | 4 | | graphs | 11164 | | graphs_items | 20372 | | group_discovery | 0 | | group_prototype | 0 | | groups | 19 | | history | 16882070 | | history_log | 17285 | | history_str | 14748 | | history_str_sync | 0 | | history_sync | 0 | | history_text | 404559 | | history_uint | 337073134 | | history_uint_sync | 0 | 〜 略 〜 | timeperiods | 0 | | trends | 2637085 | | trends_uint | 105099525 | | trigger_depends | 124 | | trigger_discovery | 25891 | | triggers | 26768 | | user_history | 4 | | users | 9 | | users_groups | 9 | | usrgrp | 8 | | valuemaps | 19 | +-----------------------+------------+
それでは実際にデータを圧縮します。my.cnfにinnodb_file_format=Barracudaと書いていれば圧縮されていると思っている人は多いのでは?圧縮されているかどうかは今回稼働後に対応です。初期構築に実施してください。
mysql> use zabbix Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> alter table history ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; Query OK, 16970384 rows affected, 5 warnings (1 hour 54 min 13.83 sec) Records: 16970384 Duplicates: 0 Warnings: 5 mysql> alter table history_log ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; Query OK, 17335 rows affected, 5 warnings (1 min 15.21 sec) Records: 17335 Duplicates: 0 Warnings: 5 mysql> alter table history_str ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; Query OK, 16660 rows affected, 5 warnings (29.43 sec) Records: 16660 Duplicates: 0 Warnings: 5 mysql> alter table history_text ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; Query OK, 454836 rows affected, 5 warnings (3 min 11.30 sec) Records: 454836 Duplicates: 0 Warnings: 5 mysql> alter table trends ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; Query OK, 2090389 rows affected, 5 warnings (5 min 52.37 sec) Records: 2090389 Duplicates: 0 Warnings: 5 mysql> alter table trends_uint ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; Query OK, 101156873 rows affected, 5 warnings (3 hours 18 min 10.14 sec) Records: 101156873 Duplicates: 0 Warnings: 5 mysql> alter table items ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; Query OK, 59090 rows affected, 5 warnings (3 min 42.17 sec) Records: 59090 Duplicates: 0 Warnings: 5 mysql> alter table history_uint ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; Query OK, 301915740 rows affected, 5 warnings (1 day 10 hours 31 min 56.64 sec) Records: 301915740 Duplicates: 0 Warnings: 5
かなりの時間がかかってしまいました。。圧縮処理をしている最中に見てみましたが、使用しているCPUが偏ってる気がしました。むしろ1つしか使ってないのでしょうか。
さて、気になる稼働後のiowaitですが、3%程度の低下が見られました。もう少し経過を観測してみますが、もしかすると先に記載した別のサービスがIO負荷をかけているのかもしれません。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 遠藤俊裕,坂井恵,館山聖司,鶴長鎮一,とみたまさひろ,班石悦夫,松信嘉範
- 出版社/メーカー: 翔泳社
- 発売日: 2011/08/26
- メディア: 大型本
- 購入: 9人 クリック: 82回
- この商品を含むブログ (9件) を見る
改訂版 Zabbix統合監視実践入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plus)
- 作者: 寺島広大
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/17
- メディア: 大型本
- この商品を含むブログ (1件) を見る