OSDL DBT-1によるPostgreSQLのVACUUMに関する考察

【1.概要】

 PostgreSQLを運用する上で,バキュームは欠かすことができない。しかし、業務サービスを停止する時間が 限られてしまう場合や、データベースのデータサイズが大きい場合、バキュームを効率的に実行することが 求められる。ここでは、DBT1を長時間運転させることによるBT値の劣化の度合いや、BT値を維持させるために 効率的なバキュームの運用方法を検討する。

【2.測定結果】

 PostgreSQL8.0,PostgreSQL8.1のそれぞれを表2-1の条件(ケース)で,DBT1を実行させたBT値を図2-1に示す。

表2-1 DBT1を長時間実行させる条件
測定ケース名 DBT1のrun_duration指定値 VACUUMの実行の有無
CASE14100(1.14Hr)
CASE212600(3.5Hr)
CASE325200(7.0Hr)
CASE436000(10.0Hr)



図2-1.DBT1を長時間運転させることによるBT値の劣化


 DBT1の実行に比例してBT値が劣化していることがわかる。
 次に、表2-2に、一旦DBT1を終了させ、VACUUMを実行した時の時間の関係を示す。


表2-2 DBT1を実行し停止後のVACUUMの実行時間
VACCUM実行条件 VACUUMの対象テーブル 実行時間(秒)
v.8.0.6 v.8.1.2
CASE2の終了後に実行itemテーブルのみ38.8012.445
同上全テーブル861.791382.127

【3.考察】

3.1 効率的なVACUUM運用案

 測定結果から,VACUUMコマンドの実行時間は,全テーブル対象の場合でPostgreSQL 8.0.6で861秒, PostgreSQL 8.1.2で382秒を要することが分った。DBT1を特定業務に見立てると,24時間の連続運転の必要が なければ,計画停止後にVACUUMを行えばよいことになる。しかし,24時間連続運転が必要だったり,停止時間が 限られる場合,表3-1に示すように,業務実行中にVACUUMを実行する方法もその対応策と考え,実現性をDBT-1を 用いて検証した。全テーブルをVACUUMするケース,無効領域の発生しているテーブルの中で最もアクセス頻度の 高いitemテーブルのみをVACUUMするケース,無効領域が最も大きいcustomerテーブルのみをVACUUMするケースを 追加測定し,BT値を比較した。


表3-1 DBT1の高可用性を考慮したVACUUM運用の対策案
測定ケース名 run_duration VACUUMの運用方法
CASE536000(10.0Hr)参照頻度の高いitemテーブルのみを3.5Hr経過後,7Hr経過後にVACUUMを実行
CASE636000(10.0Hr)全テーブルを3.5Hr経過後,7Hr経過後にVACUUMを実行
CASE736000(10.0Hr)無効領域の成長度が大きいcustomerテーブルのみを3.5Hr経過後,7Hr経過後にVACUUMを実行


 表3-1の対策案を,いままでの長時間DBT1を実行させたケースと比較を図3-1に示す。


図3-1.DBT1実行中にVACUUMを実行したケースとVACUUMしないままDBT1を実行したケースとの比較



 VACUUMの実行時間は,DBT-1実行中に実行したケースとDBT-1終了後に実行したケースを比べると,3〜4倍の差 がある。全テーブルのVACUUMは,PostgreSQL 8.0.6で約60分,PostgreSQL 8.1.2で約20分要しているが,item テーブル単独のVACUUMは,PostgreSQL 8.0.6で40秒,PostgreSQL 8.1.2では10秒以内に終了しており,システムに 掛かる負荷,ユーザ応答時間に対する影響は比較的小さいと判断する。
 以上のことから,対象テーブルを絞り業務中にVACUUMすることで,BT値の劣化防止に効果を上げることがで きると考える。


このデータの性能データ

  • 関連する性能データは登録されていません。

関連する考察データ

コメント表示 コメント登録