[pgsql-jp: 29299] パフォーマンス向上策

Tsukasa Koizumi tsukasa @ koiz.com
2003年 3月 8日 (土) 12:41:53 JST


小泉@コイズコムデジタルワークスです。
久しぶりの投稿です。

私が作ったシステムが、データが増えるにしたがって異常に遅くなってしまい、
客からクレームが来てしまいました(T_T)

…まぁ、テーブル数が数万にもなり、それを全部UNIONするなどという、私の
設計が悪いといえば悪いのですが、なんとかDB設計やスクリプトに手を入れず
に済ませたいと思ってます。

そこで、いくつかパフォーマンスの向上策を考え、試しているのですが、いま
ひとつ当たりがつかめず、ご教授願えればと思います。

速度を上げたい処理は…

A) 4万テーブルをUNIONしてソート、20件ずつ抽出
B) 5つのテーブルをJOINして検索、ソート、20件ずつ抽出

…この2点です。

○ハードウェアで吊る
まず、CPUをDual P3 1G から Dual Xeon 2.4G に変えてみました。確かに劇的
に速くはなったのですが、さすがに数万テーブルをUNIONするなどという処理
では、期待した効果はありませんでした。

たとえば、現在HDDがATA100なのですが、SCSIにすると劇的に改善される…な
んてことはありますでしょうか?

あるいは、メモリを1GB から 2GB にするとよいとか…?

数万円程度の予算で、ハードウェア的にパフォーマンスを向上させる方法があ
れば、ぜひお願いします。


○テーブル数か、JOINか
そもそも、パフォーマンスが著しく低下している原因が、いまひとつ掴めずに
います。

テーブル数が多くなれば、大量テーブルのUNION処理が遅くなるのはわかりま
す。が、上記のBの処理では5つ程度のテーブルをJOINしているに過ぎないのに、
著しく遅くなっています。

一方、JOINをしていない、あるいは2つのテーブルしかJOINしていない別の処
理では、たいへん快適に動作していてパフォーマンスの問題は見られません。

それでも、テーブル数が増えるにしたがって遅くなっているのも確かなので、
テーブル数の多さが問題なのであろうと予測しています。

テーブル数が多くなると、3つ以上のテーブルJOIN処理速度に、大きな影響を
与える…ということはあるのでしょうか?

それとも、そもそも3つ以上のJOIN処理が遅いのでしょうか?


○PostgreSQLのチューニング
テーブル数が数万、JOIN、UNIONを多用するシステムに合わせた、チューニン
グプランをご提案していただけると、非常に助かります。


毎度毎度お世話になりますが、よろしくお願いいたします。

/*------------------------------------------------------------------*/
/* 小泉 司@コイズコムデジタルワークス(東京都文京区)              */
/* Desk: mailto:tsukasa @ koiz.com / Mobile: mailto:pigtail @ pdx.ne.jp */
/* PGP Public Key: http://www.koiz.com/~tsukasa/PGP_KEY/tsukasa.asc */
/*------------------------------------------------------------------*/



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