dbExpressのパフォーマンスチューニング

解決


ラスカル  2011-11-04 11:59:25  No: 41166  IP: 192.*.*.*

現在BDEで作られたシステムをdbExpressにて再構築をしています。

再構築自体は完了したのですが、お客様にレビューしたところ、すこしレスポンスがおそい(0.5秒→2,3秒)との指摘を受けてしまいました。

BDEで構築したときとそん色ないレスポンスにしたいのですが、dbExpressにて留意する設定等ありますでしょうか?
どなたかご存知の方、ご教授ください。

編集 削除
igy  2011-11-04 16:17:59  No: 41167  IP: 192.*.*.*

具体的には、遅い部分がソースコードのどの箇所になるか特定されてますか?

編集 削除
ラスカル  2011-11-04 17:29:57  No: 41168  IP: 192.*.*.*

CommitとPostで0.3秒程度かかっているのが最大の負荷かと思います。
漠然とした質問で申し訳ありません。

編集 削除
igy  2011-11-04 18:54:38  No: 41169  IP: 192.*.*.*

2,3秒 とのことなので、

>CommitとPostで0.3秒程度

でしたら、残りの1.7〜2.7秒はどこで時間がかかってますか?

あと、使用しているデータベース、Delphiのバージョン、OSなどは?

具体的に、時間がかかっている処理のコードなどをここに挙げれば、他の方からも
アドバイスなどあるかもしれません。

編集 削除
HOta  2011-11-05 12:35:48  No: 41170  IP: 192.*.*.*

BDEの場合のデーターベースは何を使っていたのでしょうか?ローカルデーターベースとクライアントサーバーのRDBMSとでは、同じSQLを発行しても時間がかかる場合があります。

編集 削除
かず  2011-11-06 09:01:34  No: 41171  IP: 192.*.*.*

BDEでParadox共有ファイルという前提で
クライアントの性能が上がっているので、Paradox共有ファイルでも処理が遅くならない傾向にあるようです。

2年ほど前にBDE(Paradox共有)からMySQLに移行しました。
データ件数(10,000件以下)、表数10、接続ユーザ数5人以下であれば、BDE(Paradox共有)が早く動作します。ただこれ以上になるとだんだん遅くなってきます。
大規模であれば、MySQLなどのRDBが早いです。粘りがあるという感じ。
しかし、接続数が多いと2,3秒待たされることもあります。
3層構造にすると話が変わるかもしれません。。

編集 削除
佐藤  2011-11-06 16:54:43  No: 41172  IP: 192.*.*.*

現在のBDEのデータべースエンジン、dbExpressで再構築して使用しているデータベースがわからないと、回答が想像にしかなりません。
また、どのような処理をしていて時間がかかるのか、たとえば、SQLによる処理なのか、Edit⇒Postなのか、その辺のことも公開しないとラスカルさんの求めている回答が出ませんよ。
ということで、私も一般論でお話をしますが、ローカルのDBエンジンには軽いこと、資源を食わないこと、レスポンスの良さなどの利点があります。その一方で、大勢でいじめにかかると泣き出してしまうという弱さがあります。本格的なDBエンジンは、その逆の特性があります。
BDEで十分に間に合っていたのなら、大量によるいじめ処理は発生していないのだと思います。
であれば、本格的なDBエンジン+dbExpressではなく、AccessをADOで接続するなどの方が現実的なのかもしれません。
あくまで、一般論です。
自転車やバイクにはそれなりの良さがあり、いつもバスや大型車が正しい選択ではありません。

編集 削除
ラスカル  2011-11-07 10:25:19  No: 41173  IP: 192.*.*.*

たくさんのレスありがとうございます。

構成は、DelphiEX+Oracle11Gです。

負荷は以下のような感じです
  Commit処理            0.3秒
  ClientDatasetOpen(1)  0.2秒
  ClientDatasetOpen(2)  0.2秒
  ClientDatasetPost(1)  0.3秒
  ClientDatasetPost(2)  0.3秒
  次の画面展開          0.5秒

ちなみにClientDatasetのPacketRecordsを-1→1にすると、0.5秒ほど早くなるようですが、このような設定は他にもあるのでしょうか?

編集 削除
nobukoshi802  2011-11-07 20:14:53  No: 41174  IP: 192.*.*.*

Oracle11g側のチューニングもあります。
インデックスを別領域に作成する。
テーブルの分析(analyze)を行う。
接続台数が少ないならSGAを、最大限に使用する。
それと、Sort Areaを、4Mくらいにする、など。
適切なインデックスがあると、RDBMSでも、そんなに遅くないですよ。

編集 削除
ラスカル  2011-11-08 11:17:29  No: 41175  IP: 192.*.*.*

その後進展があったのでご報告します。

ClientDatasetのConstraintsを外すことで、2.5秒→0.6秒までチューニングに成功しました。・・・が。

なぜか、ランタイム環境にてテストしてみると異常に遅くなります。
開発環境で0.6秒くらいで遷移していた処理が、なぜかランタイム環境では4,5秒掛かってしまいます。

dbExpressとは話が変わってしまうのですが、こんなことってあるのでしょうか?(>_<)

編集 削除
Mr.XRAY  2011-11-08 19:01:53  No: 41176  IP: 192.*.*.*

こんにちは,Mr.XRAYです.

dbExpressを使ったアプリは作成したことはありませんが,
TComboBoxのOnDropDownイベントでリアルタイムで,SQL文を実行してリスト作成等を行うことがあります.
ストレスを感じたことはありません.SQL文によるかも知れませんが.

データベースは,インデックスなしでは実用的なパフォーマンスが得られませんが,その一方で
適切でないと,逆にパフォーマンスが落ちることもあるようです.
参考になるかどうかはわかりませんが.こんな記事を見つけました.

[インデックスの作り過ぎに注意]
http://itpro.nikkeibp.co.jp/article/COLUMN/20060111/227105/

編集 削除
ラスカル  2011-11-09 10:15:24  No: 41177  IP: 192.*.*.*

みなさまのご意見、参考になります。

ただし、今回のシステムは既存システムのDBアクセスの方法を変更(BDE→dbEXPRESS)するのみなので、既存システムでパフォーマンスが出ている以上、dbExpressの問題と考えております。

その後、トレースを進めましたが、受注明細系のClientDatasetを開く際、ランタイム環境のみで5秒程度の負荷がかかっていることが判明しました。データ数的には3行程度、処理もClientDatasetを単純に開いているところで遅くなっているため、現在長考中です・・・。

編集 削除
igy  2011-11-09 11:05:24  No: 41178  IP: 192.*.*.*

Oracle は 使ったことがないのですが、

・開発環境
・ランタイム環境のみ

いずれも Oracle クライアントライブラリ のバージョン は 同じバージョンですか?

編集 削除
ラスカル  2011-11-09 14:14:50  No: 41179  IP: 192.*.*.*

開発環境、ラインタイム環境ともに、11gの同じバージョンを仕様しております。

編集 削除
igy  2011-11-12 15:32:28  No: 41180  IP: 192.*.*.*

2011/11/09(水) 11:05:24 書込者ID:[ 
Commit処理            0.3秒
  ClientDatasetOpen(1)  0.2秒
  ClientDatasetOpen(2)  0.2秒
  ClientDatasetPost(1)  0.3秒
  ClientDatasetPost(2)  0.3秒
  次の画面展開          0.5秒

編集 削除