「VACUUM FULL」と「pg_dumpでバックアップ、リストア」 

zabbix 3.4 を使用しています。

history_log が 22GBとなっており、DB領域のディスク使用率も80%超え、
history_log のディスク使用量が削減したいと考えています。

Forum 内の事例をいろいろ確認しましたところ、方法としては、
VACUUM FULLを実施するか、pg_dump でバックアップを取得後リストアする方法がありました。

この二つの方法はメリットとデメリットは何でしょうか?
どちらの方法を選べばいいかの判断方法などはありますでしょうか。
(ちなみに、検索した中で、VACUUM FULLを実施する方法が多く上げられました。)

コメント表示オプション

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

http://www.zabbix.jp/node/4548

で、ご返答させて頂いた通りですが、最大の違いはテーブルロックが掛かるかどうかです。
また、VACUUM FULLは削減出来てもINDEXは肥大化しますので、REINDEXが必要になる
場合もありますので、一長一短です

・ディスク容量を手っ取り早く開けたい場合
・頻繁に更新されていない参照オンリーに近いテーブル

などの場合、FULLは有効ですがそれ以外の場合は公式にも書かれている通り、FULL実行は
極力避けるのが無難というスタンスです。
公式は公式でしか無く、実運用ではケースバイケースなので最終的な判断はご自身でなされ
る以外の術は無いと思いますよ。

まぁ、あとはPostgreから離れますが、構築環境が仮想環境上+LVM使っているならディスク
をオンラインで拡張は出来ますから、それで凌ぐって手も使えます。
データは貯めれば肥大化するものなので、計画を持って構築する必要がそもそもあるのでその
辺も改めてお考え下さい。

ユーザー TNK の写真

少しだけ追加させて頂きます。

両方のメリット:
・テーブル上の不要なレコードの削除が済んでいて、データベース
 のファイル内の未使用の空き領域が大きくなっていれば作業後に
 ディスクの使用率を下げることが期待できる。

両方のデメリット:
・不要なレコードの削除が済んでいなければ、ディスクの使用率を
 下げることは期待できない。
・作業時間中はデータベースへのアクセスができない。

懸案事項:
・VACUUM FULLは元のデータベースと同じディスク上で処理が行わ
 れるので、ディスクの使用率が80%を超えてしまっているのであ
 れば、そのディスクを拡張しない限りVACUUM FULLは実行できな
 いはず。
・ダンプを取得する場合は、ダンプ用のディスクを一時的にでも用
 意してマウントしてダンプさせる必要がある。
・ダンプはネットワーク経由でもできるが処理速度に注意。

ユーザー hellozabbix の写真

wakaba 様、TNK 様

お二人のコメント、ありがとうございます。
大変参考になりました。

1点だけ、確認したいですが、

>・ダンプを取得する場合は、ダンプ用のディスクを一時的にでも用
> 意してマウントしてダンプさせる必要がある。

pg_dumpを使うなら、ディスクも用意しなければいけないでしょうか?

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

ユーザー TNK の写真

pg_dumpを使うならダンプするデータを置く場所の確保が必要です。
空きディスク領域がないのであれば、別途ディスクを用意する必要があります。

ユーザー hellozabbix の写真

TNK 様

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

別途ディスクを用意する必要がある点について、承知しました。

現状ではVACUUM FULLを実施しない方向に、pg_dump でバックアップを取得後リストアする方法を検討中です。

DB領域のディスク使用率は80%超えた(50GBのディスク容量のうち、42GBを使用)ため、
とりあえず100GBのディスクを追加&設定しましたところ、DB領域のディスク使用率が40%位まで減少(100GBの内、42GBを使用)

下記、不明点があるので、確認させてください。

1.zabbixのDB領域のディスク使用率推移を確認すると、偶にディスク使用率が減少しているように見えます。
(ディスク使用率が減少→しばらく増減なし→ディスク使用率が減少→ディスク使用率が徐々に増加)
保持期間などの変更は実施していない、housekeeperの動作でデータ量は減りますが、ディスク領域は
解放されず、空き容量が増えないと認識しているので、ディスク使用率が減少する原因は何でしょうか。

2.housekeeperの実施は、空き領域が残り何パーセントないとダメとか、そのような制約はありますか。
(「HousekeepingFrequency=1」、「MaxHousekeeperDelete=0」を設定しています。)

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

ユーザー TNK の写真

1.zabbixのDB領域のディスク使用率推移を確認すると、偶にディスク使用率が減少しているように見えます。

PostgreSQLのすべての動作を把握しているわけではないので推測で
すが、処理をするために一時的にテンポラリファイルを作成して処
理しているのかもしれません。

対象のディスク内のファイルの増減や、各ファイルのサイズの変化
を確認してみてください。

2.housekeeperの実施は、空き領域が残り何パーセントないとダメとか、そのような制約はありますか。

処理しなければならないサイズ次第でしょう。
どのサーバーでも何パーセントならOKなどという基準はありません。
あと、基本的にhousekeeperが処理するのは削除処理なので、空き
領域が少なくても処理は行えるはずです。

懸念されるのは、サーバーの性能が低くてhousekeeperの処理が1時
間以内に終了していないということです。
Zabbixサーバーのログを確認して、1時間毎に削除処理が終了して
いるかを確認してみてください。

ユーザー hellozabbix の写真

TNK 様

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

>PostgreSQLのすべての動作を把握しているわけではないので推測で
>すが、処理をするために一時的にテンポラリファイルを作成して処
>理しているのかもしれません。
>
>対象のディスク内のファイルの増減や、各ファイルのサイズの変化
>を確認してみてください。

なるほどですね。
別のテスト環境で、手動でhousekeeperを連続で実施した際、ディスク使用率
が増減していたのもこれが原因かもしれません。

>処理しなければならないサイズ次第でしょう。
>どのサーバーでも何パーセントならOKなどという基準はありません。
>あと、基本的にhousekeeperが処理するのは削除処理なので、空き
>領域が少なくても処理は行えるはずです。
>
>懸念されるのは、サーバーの性能が低くてhousekeeperの処理が1時
>間以内に終了していないということです。
>Zabbixサーバーのログを確認して、1時間毎に削除処理が終了して
>いるかを確認してみてください。

例えば、DB領域のディスク使用率は80%超えた(50GBのディスク容量のうち、42GBを使用)状態で、
処理しなければならないサイズは30GB位がある時、空き領域が少ない状況でもhousekeeperの処理
ができる、という認識であっていますか。
(1時間以内に処理できない可能性があることは承知です。)

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