PostgresのVacuumを実行するタイミングがわからない…

最近Postgresの性能や信頼性を確認するために大量データの投入~ランダムSelect、Updateなどを行おうとしているのですが、その最初の大量データの投入で躓いています。

具体的には、単純にInsert文を1000万回発行してデータを登録するだけのプログラムを作成しました。テーブルにはSQL99で定義されているデータ型が列として定義されています。これらにデータを投入するだけです。

最初はVacuumを行わず単純に実行したところ、約100万件でエラーになりました。エラー内容は、"No space left on device postgres"です。ただ、このエラーが出た段階でディスク領域は100GB以上残っていました。

いろいろ調べたのですが、このエラーが出るときにはVacuum analizeを実行しなければPostgresが起動しなくなる可能性があるという記事を読み、早速実行。その結果、Postgresは二度と起動しなくなりました。

仕方がないので、もう一度環境を構築し、今度はデータの登録の合間にVacuumを行うようにしました。ところが、だいたい10万件に1回Vacuumを実行すると、次のInsert文発行時にTimeoutが発生してしまいます。

さてさて、データが多くなると教科書通りにはいかなくなるものですが、ちょっと楽しくなってきました。今週の休みは土曜日が仕事になりそうなので、あまり時間がとれそうにないですがいろいろと試してみたいと思います。

Postgresのおすすめはこちらの書籍です。Ver.9以降に対応した書籍がほとんど発売されていないことが残念でなりません。