[pgsql-jp: 36295] Re: VACUUMの性能を向上させたい

SAKATA Testuo sakata.tetsuo @ lab.ntt.co.jp
2005年 11月 1日 (火) 10:36:57 JST


おはようございます。坂田@横須賀は快晴です。

Yumiko Izumi wrote:
> お世話になっております。Izumiです。
> 
> VACUUMの性能向上について追加質問です。
> 
> 取り急ぎ、postgresql.confを以下の通りチューニングして
> みました。

報告ありがとうございます。
効果が出ていないのは、残念ですね。

他の方からのコメントが複数出ていますよね。
少し整理してみると;

(1) そもそもディスクI/Oの性能が十分出ていないのではないか?
  (koyama-7さんほか)
  hdparmコマンドで確認
(2) ext3のジャーナリングがオーバヘッドになっているので、
  ext2に替えてはどうか?
  (加藤さん)
  ext2に替えてテストしてみる
(3) テーブル構成とSQLの出し方を変えてはどうか?
  (行川さん)

と言ったところですね。
ぼくが、この問題に取り組むのであれば、

(a) まず、所要I/Oの量を概算で割り出す
  5GBのDBを(fullでないにせよ)vacuumするのであれば、
  5GB分のファイルの読み+書きが(最悪の場合)発生する。
  仮に、ディスクI/Oが10MB/sだとすると、(読み+書きで)
  最悪の場合に1000秒かかるはず。
  ⇒これで条件を満足しないなら、ハードウェアの増強が必要(eへ)
(b) マシンの性能(特にディスクI/Oの性能を確認する)
  ATAディスクの裸の状態での性能は、シーケンシャルアクセスの
  場合であれば、10MB/s以上はある。
  hdparm -t がどういう条件で測定しているかにも依存するが、
  仮にシーケンシャルアクセスに近い条件で測定しているなら、
  3MB/sという数値は悪すぎる
  ⇒OS周りの改善(バージョンアップ含む)を考える。(1)・(2)を参照。
(c) DMBS以外のI/O量を確認する
  今回の前提条件では、DBMS以外に他のAPのI/Oも考慮する必要が
  あるはずなので、それを上乗せする。
  もし、DBMSとの並行アクセスが必須で、かつ、他のAPでも
  性能条件が厳しいのであれば、ディスクドライブを分けるなどの
  対処も考える。
(d) 現在の設定値の適否の確認
  現在、かなりのディスクI/Oが出ているとのことですが、
  仮想記憶のスワップなどは発生していないでしょうか?
  発生している場合は、PostgreSQLの設定値を見直して、
  メモリの所要量を削減する工夫が必要だと思います。
  ぱっと見ですが、気になる点としては;
  ・shard_buffer の値はもう少し大きくのでは?
   (現時点でスワップが出ていれば、他の数値との兼ね合いになりますが)
  ・max_fsm_pages は約10GB分になりますが、これでOK?
   (ちょっと自信がありません)
(e) それでもダメなら、ハードウェアの増強
  ・ディスク台数を増やす(RAID0など)
  ・WALの格納先はファイルシステムを分ける
(f) アプリケーションの作りを見直す
  ・行川さんの記事(3)を参照。
  ・table 内の全ての行を削除するのであれば、truncate コマンド使うのが
   性能上は有利(本コマンドは、8.0以降で性能改善が図られているようです)

といったところでしょうか。


> <チューニング内容>
> # デフォルトから変更した個所だけ書きます。
> # なお、shared_buffersの値は現在のカーネルの設定の限界です。
> shared_buffers = 3072
> max_fsm_relations = 4000
> max_fsm_pages = 1310720
> max_locks_per_transaction = 512
> vacuum_mem = 524288
> checkpoint_segments = 32
> 
> 
> 結果としては、ほとんど効果が得らませんでした。
> 
> <現状>
> ・前述のDBはサイズが5GBを超えている
> ・VACUUM ANALYZEが90分以上かかる
>  (VACUUM FULL ANALYZEではありません)
> ・VACUUM ANALYZE中にvmstatを見ていると、wa(ディスクI/O待ち)
>  がずっと90%を超えていて、PostgreSQLでの処理は勿論、他の
>  ディスク書き込みもほとんど出来なくなっている
> 
> 
> そこで追加で伺いたいのですが、このような大容量かつデータを
> 頻繁に更新するDBでは、VACUUMはこのように時間がかかるもの
> なのでしょうか?
> また、大量のディスクI/O待ちが発生するのもこのようなDBでは
> やむをえないことなのでしょうか?
> 
> 7.4.xや8.0.xでVACUUMも改良されているようなので、こうした現象
> が画期的に解消されるならバージョンアップも検討したいと考えて
> います。このあたりをご存知の方、どうか教えてください。
> 
> よろしくお願いします。
> 
> 
> 
> 


-- 
坂田 哲夫@NTT サイバースペース研究所
sakata.tetsuo _at_ lab.ntt.co.jp
SAKATA, Tetsuo. Yokosuka JAPAN.



pgsql-jp メーリングリストの案内