現在、2つのインデックスと2億5000万のアクティブな行、およびほぼ同じ数(またはそれ以上)のデッド行を持つテーブルをクリーンアップしています。クライアントコンピューター(ラップトップ)からサーバーにコマンドVACCUMFULLANALYZEを発行しました。過去3〜4日ほどビジネスを続けています。やらなければいけないことがたくさんあるので、もうすぐ終わるのではないかと思います!
サーバーには、クアッドコードXeon 2.66 GHzプロセッサ、12 GBまたはRAM、およびRAID1構成の2x 10K rpm 146 GBSASHDに接続されたRAIDコントローラーがあります。SuseLinuxを実行しています。不思議なんだけど...
さて、まず、VACUUMポストマスタープロセスは1つのコアのみを使用しているようです。第二に、I/Oアイドル時間の比率に対するI/O書き込みが非常に高くないことです。第三に、呼び出しからprocinfo
、VACUUMプロセスがほとんどの時間(88%)をI/0の待機に費やしていると推定できます。
では、RAIDコントローラーを過負荷にする(アイドル率に対するI / O書き込みを高くする)ために、スレッドを介してより多くのコアを利用しないのはなぜですか?I / O負荷が高くないのに、なぜI / Oを待機しているのですか?このすべてのパワー/リソースをすぐに利用できるのに、なぜ速くならないのでしょうか。VACUUMはマルチスレッド化できるし、マルチスレッド化する必要があるように思えます。特に、巨大なテーブルで動作していて、それが唯一動作している場合はそうです。
また、postgresql.confを構成してそのようなVACUUMをマルチスレッド化する方法はありますか?それを殺しても、部分的なクリーンアップの恩恵を受けることはできますか?そのテーブルで作業する必要があります。
[PostgreSQL8.1を使用しています]
再びThx