mysqlのデータベースの肥大化について

お世話になります。

mysqlのデータベース肥大化しており悩んでおります。

2.0⇒2.2アップデートしたあと、
どうやら各housekeepingが無効になっていたようです。
(現在のバージョン;zabbixサーバ 2.2.1)

各housekeepingが無効の場合、
保存期間等関係なく蓄積され続けるのでしょうか?

そこで、フォーラムの投稿を検索すると
下記の投稿がありましたがご回答されている内容は
『ヒストリの削除』や『housekeeping』を紹介されています。

参考;http://www.zabbix.jp/node/387

『ヒストリの削除』や『housekeeping』では、
一度肥大化したDBファイルは小さくならないという認識です。

収集したデータが消えても構いませんので、
肥大化したデータベースの各テーブルファイルを作成しなおしできればと思います。
(設定情報は残したままで・・・)

現在肥大化しているのは
 history_uint
 history_str
 history
 history_log
 trends_uint
 trends
 events
のファイルです

肥大化しすぎているため
 mysql> alter table history_log;
などもできない状況です。

どのような方法があるのでしょうか?

ご存じの方がおられましたらご教授いただけないでしょうか?

コメント表示オプション

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

woodpeckerさん


『ヒストリの削除』や『housekeeping』では、
一度肥大化したDBファイルは小さくならないという認識です。

my.cnfの設定とdatadir配下のzabbixの使用しているディレクトリの情報見せて頂けますか?
知りたいのはinnodb_file_per_tableが正しく適用されているかです。


肥大化しすぎているため
 mysql> alter table history_log;
などもできない状況です。

おぅ…
困りましたね。

それではDBのエクスポートも無理ですかね?A(^^;
DBエクスポートして、drop database & create database してDBインポートすれば、スリムになると思いますが…

最後の手としては、Zabbix設定等をXMLエクスポートして、ZabbixのDB再作成してXMLインポートですかね…
https://www.zabbix.com/documentation/jp/2.0/manual/xml_export_import

ユーザー TNK の写真

Housekeeping処理に関して補足させて頂きます。

Zabbix 2.2になってもHousekeepingの機能は利用できますし、自動
で無効にはなっていません。

ただ、設定方法が変更になっていて、2.0まではzabbix_server.conf
の設定にDisableHousekeepingという設定があって、デフォルトで
はHousekeepingの処理をzabbix_serverで行うようになっているの
を、設定を変更してzabbix_serverに処理させるのではなく、例え
ば、データベースのパーティショニングの機能などを利用して、不
要な期間のデータの削除処理の負荷を軽減させようとすることに利
用できるようになっていました。

2.2では、zabbix_server.confでのDisableHousekeepingの設定はな
くなり、すべてWebフロントエンドから設定するようになっていま
す。
「管理」->「一般設定」->プルダウンから「データの保存期間」
で設定画面に行けます。

各データに関して保存期間を細かく設定できます。
以前のようにzabbix_serverからは実行させないように設定するこ
とも可能です。

肥大してしまったテーブルファイルの縮小に関しては、KAZさんが
書かれている通りです。

ユーザー fripper の写真

残したいデータ以外を delete する
>> delete from 「テーブル」 where clock < xxxx;
そのうえで、テーブルを最適化
>> alter table 「テーブル」
というのも厳しいですか‥?これが空き容量的・時間的理由で厳しいとなると、
難しそうです‥。

mysql のデータ圧縮機能を用いるというのはいかがでしょうか
my.cnf に
>innodb_file_per_table
>innodb_file_format=Barracuda
の設定が入っていれば、
>>alter table 「テーブル」 ROW_FORMAT=Compressed;
とすることで、DBファイル内のデータを圧縮できるようになるので、
テーブルファイルサイズは小さくなるのですが‥

空き容量的に厳しいならば、小さめのテーブルから順次、以下の手順で縮めていって
空き容量を確保していくことで、徐々に大きなテーブルを対象に作業すれば‥
なんとかなったりしないでしょうか?

小さめのテーブルについては、一気に
>>alter table 「テーブル」 ROW_FORMAT=Compressed;
で良いと思いますし

大きめのテーブル (history 系)で、容量を見つつ、保存したい範囲を決めるならば

1.desc xxx や show create table xxx、もしくは、source パッケージ内の schema.sql で
  スキーマを確認したうえで、同じスキーマ内容で別名の移行用テーブルを作って。。
CREATE TABLE `xx_history_str` (
`itemid` bigint unsigned NOT NULL,
`clock` integer DEFAULT '0' NOT NULL,
`value` varchar(255) DEFAULT '' NOT NULL,
`ns` integer DEFAULT '0' NOT NULL
) ENGINE=InnoDB;

2.データが空のうちに移行用テーブルには圧縮を指定しておいて‥
alter table xx_history_str ROW_FORMAT=Compressed;

3.select - insert で、単位期間レベルでデータをコピー。
  最新から順次1週間ぶんずつ‥などで処理‥
>>INSERT INTO xx_history_str (SELECT * from history_str where clock between 「開始時刻」 and 「終了時刻」);

4.納得いく容量までデータが移行できた時点で、オリジナルテーブルをTRUNCATE
>>TRUNCATE TABLE history_str

5.データが空のうちに本テーブルにも圧縮を指定しておいて‥
alter table xx_history_str ROW_FORMAT=Compressed;

6.select - insert で、全データをコピーで戻す。
>>INSERT INTO history_str (SELECT * from xx_history_str);

ユーザー KAZ の写真

woodpeckerさん

書き漏れました。

『ヒストリの削除』や『housekeeping』では、
一度肥大化したDBファイルは小さくならないという認識です。

その通りです。
alter table [テーブル名];で小さくなります。

『ヒストリの削除』や『housekeeping』はDBを肥大化させない様にする機能じゃないかなと…

KAZさん
TNKさん
fripperさん

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

まとめてのお返事となることをお許し下さい。

Housekeeping処理に関して設定した記憶もないのですが・・・
今後はバージョンアップの際に設定がどうなっているか気をつけるようにします。

現在サーバのzabbix_server.logを見ると、
Housekeeping処理が有効に機能しておりデータが削除できているようです。

現時点ではまだalterができませんが、
時間経過とともにデータ数が減ってくると思っています。

 mysql> show table status from zabbix;

で状態を確認して、十分減りきったあとであればalterが実行できそうです。

認識はあっていますか?

ユーザー KAZ の写真

woodpeckerさん

alter tableが効くのは正しくinnodb_file_per_tableが有効になっている場合のみです。
my.cnfにinnodb_file_per_tableとあるだけではダメな場合もあるんです。
なので、↓書いたんですが…


my.cnfの設定とdatadir配下のzabbixの使用しているディレクトリの情報見せて頂けますか?
知りたいのはinnodb_file_per_tableが正しく適用されているかです。

という訳で、詳細が不明なのでなんとも…A(^^;

KAZさん

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

申し訳ございません、添付し忘れていました。
添付いたします。

お手数ですが、見ていただけますでしょうか?

よろしくお願いします。

ユーザー KAZ の写真

woodpeckerさん

確認しました。
これならalter tableすれば小さくなります。

なので、TNKさんが指摘しているデータの保存期間を小さく指定して、暫くおき
その後、DBのエクスポート・インポートが多分一番楽だと思います。

その後はZabbix DBのDISK使用量が上がってきたらalter tableを実行するようにすれば、肥大化は防げるかと思います。

KAZさん

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

それではこのまま暫くおいたあと、alter tableで対応したいと思います。

ありがとうございました。