[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 メーリングリストの案内