[pgsql-jp: 29301] Re: パフォーマンス向上策
Tsukasa Koizumi
tsukasa @ koiz.com
2003年 3月 8日 (土) 16:12:45 JST
小泉@コイズコムデジタルワークスです。
<20030308.142100.71086923.sugita @ sra.co.jp> の、
"[pgsql-jp: 29300] Re: パフォーマンス向上策" において、
"sugita @ sra.co.jp"さんは書きました:
> # 4 万のテーブルがすべて異なるのでなく同じ定義内容だとしたら、継承ですっきり
> # できる可能性があるような気もしました。
同じ定義内容のテーブルがほとんどです。
具体的には、オンラインの決済システムでして、ユーザ毎に決済履歴テーブル
があるのです。
同じ定義内容のテーブルUNIONで、継承が有効…というのはちょっと思い当た
らないのですが、よろしければもう少し突っ込んでお教えいただけると嬉しい
です。
ユーザ情報のテーブルは、個人情報やプロフィールなど、情報の種類によって
5つくらいのテーブルに別れていますが、これは継承でかなりすっきりします
ね。…なるほど。
> ;;; ○テーブル数か、JOINか
> ;;; そもそも、パフォーマンスが著しく低下している原因が、いまひとつ掴めずに
> ;;; います。
> ;;;
> ;;; テーブル数が多くなれば、大量テーブルのUNION処理が遅くなるのはわかりま
> ;;; す。が、上記のBの処理では5つ程度のテーブルをJOINしているに過ぎないのに、
> ;;; 著しく遅くなっています。
> ;;;
> ;;; 一方、JOINをしていない、あるいは2つのテーブルしかJOINしていない別の処
> ;;; 理では、たいへん快適に動作していてパフォーマンスの問題は見られません。
> ;;;
> ;;; それでも、テーブル数が増えるにしたがって遅くなっているのも確かなので、
> ;;; テーブル数の多さが問題なのであろうと予測しています。
>
> 組み合わせるテーブルが増えるということは、組み合わせるテーブルの種類が増え
て
> 行くので、単純に数が増えたためのみと考えることはできないのではないでしょうか?
前述のような代物なので、ユーザが一人増えると、決済履歴テーブルもひとつ
増えます。
大量テーブルのUNION処理というのは、複数のユーザの決済履歴を一度に見た
い場合の処理です。対象ユーザの多少に関わらず、テーブルが増えるにしたが
って検索、ソートにやたらと時間がかかってきます。
一方ユーザの検索や一覧では、5つ程度のユーザ情報テーブルJOINしているだ
けですが、これも決済履歴テーブルが増えるにしたがって、検索、ソート時間
が著しく長くなっています。
> 例えば、たまたま、増えたテーブルが更新によるゴミの影響で遅くなるということも
あ
> ります。PostgreSQL のバージョンが不明ですし、検索系か更新系、更新系ならば、
> VACUUM、ANALYZE、インデックス再作成をどのようにしているかも分からないと何と
も
> 言えません。
バージョンは 7.2.3 です。
VACUUM ANALYZEは3時間おきに実行していますが、インデックスの再生成直後
でも検索時間は変わりません。
> ;;; テーブル数が多くなると、3つ以上のテーブルJOIN処理速度に、大きな影響を
> ;;; 与える…ということはあるのでしょうか?
> ;;;
> ;;; それとも、そもそも3つ以上のJOIN処理が遅いのでしょうか?
>
> まずは、EXPLAIN をしてみてはどうでしょう?
やってみたのですが、どうもよくわかりません。
結局、テーブル数が多い→ユーザが多い→データも多い…ということなので、
データが多くなったからJOINが遅くなったのか、テーブルが多くなったから遅
くなったのかの切り分けができなくて…。
#pg_dumpがコケるという弊害も発生中です。
#テーブルの一覧を取得する際のLOCKで、共有メモリが足らなくなる(?)みた
#いです。
うーむ。。。。
/*------------------------------------------------------------------*/
/* 小泉 司@コイズコムデジタルワークス(東京都文京区) */
/* 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 メーリングリストの案内