人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: tecra
●カテゴリ:コンピュータ インターネット
✍キーワード:C++ Celeron CPU dB ES
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● Baku7770
●20ポイント

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

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

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

◎質問者からの返答

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

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

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

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


2 ● Yota
●20ポイント

>重くなっており

の解釈が難しいですね。

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

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

3.最初から遅い。

>データを取得する際に

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

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

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

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

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

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

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

参考

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


3 ● llusall
●20ポイント

PostgreSQLは、

SQL Link

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


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

C++Builder Q&A

プログラミング:VCL

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


ストアドプロシージャ

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

◎質問者からの返答

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


4 ● kurukuru-neko
●20ポイント

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

>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の表示で遅く

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


5 ● b-wind
●20ポイント

まずはチューニング。

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 でそれぞれかなり早くなってるから。

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ