PostgreSQLとC++ Builder5でDBアプリケーションを作成しています。

データを取得する際に非常に動作が重くなっており、高速化が求められております。
しかし、サーバ、クライアントともにスペックの変更は不可能です。
サーバ側で共用メモリの割当てを増やし、DBに於いてもindexを作成するなどの手を打ったのですが、体感で改善は有りませんでした。
現在の構成で高速化する手段がありましたら教えてください。なおキャッシュサーバ等増設も不可能という前提でお願い致します。

■サーバ
CPU : 3.20DGHz
RAM : 1GB
HDD : 36.3GB*2(RAID1)
OS : Red Hat Enterprise Linux ES release 3
DB : PostgreSQL 7.3.10-RH

■クライアント
CPU : Celeron 2.66GHz
RAM : 1GB
OS : Windows XP Home SP2

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/14 16:59:01
  • 終了:2007/03/21 17:00:04

回答(5件)

id:Baku7770 No.1

Baku7770回答回数2832ベストアンサー獲得回数1812007/03/14 17:48:29

ポイント20pt

 チューニングとして他に何を行ったのでしょう?データの件数は?レスポンスはどの位で、クライアントの同時接続台数は?

 

 重いという話しですが、どこで時間を食っているかお調べになりましたか?

 

 私の知っている例だと、サーバからクライアントへの転送時間だと言うことが判って、転送する件数を制限したという例もありますし、回線の種別を変更したといった例もあります。

id:tecra

チューニングに関しては上記に書いてあるだけで、基本的にはvacuumしたあとindex作成してanalyzeしただけです。

データの件数は大きなテーブルで10~30万件です。

一番ネックになっていると思われるテーブルで全件検索を行うと(explain select * from TABLE)コストが8000~9000程となります。

転送時間の計測はどのように行ったのでしょうか?

2007/03/14 18:49:01
id:Yota No.2

Yota回答回数453ベストアンサー獲得回数282007/03/14 17:59:08

ポイント20pt

>重くなっており

の解釈が難しいですね。

1.同時にアクセスするクライアントが増えたからレスポンスが遅いのか。

2.データの量が増えたから遅くなったのか。

3.最初から遅い。

>データを取得する際に

その返りの遅いSELECT文をDBサーバのpsqlで実行しても遅いのか。

>サーバ側で共用メモリの割当てを増やし

クライアントがSELECTを送ったとき、topコマンドでメモリやCPUの使用量を見てみるとどうか。

>DBに於いてもindexを作成するなどの手を打った

EXPLAINとかでINDEXが使用されていることは確認済みであるか。

そもそもデータ数がどれくらいのテーブルにどのようなクエリを発行しているか。

以上のようなところを、まず調べたほうがいいと思います。

参考

http://www.postgresql.jp/blog/68

id:llusall No.3

llusall回答回数505ベストアンサー獲得回数612007/03/14 18:15:32

ポイント20pt

PostgreSQLは、

SQL Link

に対応していないようですね。


ストアドプロシージャを検討してみてはいかがでしょうか?

C++Builder Q&A

プログラミング:VCL

ストアドプロシージャを実行時に設定するには?


ストアドプロシージャ

http://www.techscore.com/tech/sql/13_01.html

id:tecra

残念ながらリンク先のPDFは破損しているようです。検討してみます。

2007/03/18 14:07:51
id:kurukuru-neko No.4

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/14 21:54:16

ポイント20pt

>データの件数は大きなテーブルで

>10~30万件です。

テーブルの件数はそれほど多くないので

利用するデータベースの容量に考慮して

値は設定していますか?

shared_buffers,sort_mem

(Linuxの共有メモリー設定)

以下URLが詳しい

http://www.asahi-net.or.jp/~aa4t-nngk/pgsql5.html

http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050402/158372/

http://www.stackasterisk.jp/tech/dataBase/postgresTuning01_04.js...

http://www.postgresql.jp/document/pg734doc/admin/kernel-resource...

http://kantamemo.spaces.live.com/

効果の測定はあくまでPostGreSQL

上で行う。

C++ BuilderはGUIの表示で遅く

なっている可能性もあり。

id:b-wind No.5

b-wind回答回数3344ベストアンサー獲得回数4402007/03/15 00:04:47

ポイント20pt

まずはチューニング。

PostgreSQL�p�t�H�[�}���X�`���[�j���O<��1���F�ݒ���

PostgreSQL:チューニング勘所 - Y-110's Wiki

勘違いしやすいけど、共有バッファは多すぎると逆に遅くなるから。とくに PostgreSQL 7.X 系は。


チューニングはとても難しいから細かい設計とSQLが分からないとアドバイスしにくいかな。

SQL の変更だけでも数倍以上のスループットは出ますよ。


あとは PostgreSQL のバージョンを上げるとか。

7.3→7.4→8.0→8.1 でそれぞれかなり早くなってるから。

id:tecra

なるほど。共有バッファのところは見直してみます。

バージョンを上げることは諸事情によりできないので、SQLを見直してみます。

2007/03/18 13:21:38
  • id:llusall
    あまり有益でなかったかもしれませんが、
    破損しているとのことですので、
    一応、キャッシュを・・・

    Borland - Q&A:C++Builder
    http://72.14.235.104/search?q=cache:KuGjCUSVDWwJ:support.borland.com/servlet/KbServlet/download/4320-102-353/BCB_QA_ja.pdf+BCB_QA_ja.pdf&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja

    ストアドプロシージャを実行時に設定するには?
    http://72.14.235.104/search?q=cache:KuGjCUSVDWwJ:support.borland.com/servlet/KbServlet/download/4320-102-353/BCB_QA_ja.pdf+BCB_QA_ja.pdf&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja#132

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません