過去の桐井戸端BBS (桐ver.9)
19596 外部DB接続の性能についてどのようにすれば改善されるのでしょうか たぬきっち 2003/03/24-14:51
桐の外部DBを使用されている方教えてください。

桐で基幹システムを構築を考えており、性能検証を行っています。
MSDEを使用した場合、結合文で亀が走り遅くなります。
桐は共有した場合の索引を使用しないとか、共有すると極端に遅くなる
ため、MSDEを使ってみたのですが、もっと遅くなりました。
外部DBを使用する目的として性能改善があるとおもいますが
どのように使用されているのでしょうか?


<検証内容>
1.サーバ(Win2000Server)の表の検索が何秒か(参照モード、索引あり)
2.外部DB(MSDE:同上サーバ)の表の検索が何秒か(参照モード、索引あり)


<検証条件>
表:約11000件 レコード長=700バイト
CLスペック:P4
他のMSDE使用者はいない

<検証結果>


桐表 1.892秒
MSDE 95.668秒

  
<一括処理>
印字開始 #一括パス名 + "検証結果.TXT",追加,終了状態=&FOK
&MSG = "桐 XXXX.TBL "
&開始日時 = #日時値
印字 &一括処理名,&MSG,"START",&開始日時
表 #一括パス名 + "XXXX.TBL",モード=参照,索引名="日付",終了状態=&FOK
検索 [日付]{D"1919/11/19"}
終了 表 *
&終了日時 = #日時値
印字 &一括処理名,&MSG,"END ",&終了日時
印字 &一括処理名,&MSG,"実行時間 ",#時間数値(#日時時刻(&終了日時),3) - #時間数値(#日時時刻(&開始日時),3),"秒"

&MSG = "MSDE 日報2002.xvw "
&開始日時 = #日時値
印字 &一括処理名,&MSG,"START",&開始日時
結合 #一括パス名 + "XXXX.xvw"
検索 [日報.日付]{D"1919/11/19"}
終了 表 *
&終了日時 = #日時値
印字 &一括処理名,&MSG,"END ",&終了日時
印字 &一括処理名,&MSG,"実行時間 ",#時間数値(#日時時刻(&終了日時),3) - #時間数値(#日時時刻(&開始日時),3),"秒"
印字 " "
印字終了 改ページ=しない


19598 Re:外部DB接続の性能について うにん 2003/03/24-15:21
記事番号19597へのコメント
>MSDEを使用した場合、結合文で亀が走り遅くなります。
>桐は共有した場合の索引を使用しないとか、共有すると極端に遅くなる
>ため、MSDEを使ってみたのですが、もっと遅くなりました。
>外部DBを使用する目的として性能改善があるとおもいますが
>どのように使用されているのでしょうか?

結合表の定義が不明ですが、絞込条件を指定しないと桐の表より
速くなる可能性はゼロだと思います。

>>結合 #一括パス名 + "XXXX.xvw"
>>検索 [日報.日付]{D"1919/11/19"}

結合してから検索するのでなく、パラメータ変数を使って検索条件を
絞り込み条件に含めて、結合結果の行数が極力少なくなるようにします。

19599 Re:外部DB接続の性能について hidetake 2003/03/24-15:56
記事番号19596へのコメント
>桐で基幹システムを構築を考えており

スピードの問題とは少しずれますが,桐の外部DB を使う場合
参照だけだったら特に問題は無いと思いますが,
更新まで必要な場合は相当工夫が必要だと思います。

基幹システムだとか共有時の事を考えて,外部DB を検討されておられるようですが,
桐の外部DB で実表を更新する場合,
桐に取り込んだデータを where句無しに(要は更新前の値を条件として付加せずに) update をかけています。
だから,別のユーザがいて先に更新がかけられていても,
更新の発生の有無を問わず,自分のデータで上書きしてしてしまいます。

と言う事で,複数のユーザでデータの更新が発生する場合は
よほど工夫してシステムを作る必要がある(桐内部だけの処理では済ませられない)と思います。

19601 Re:外部DB接続の性能について hidetake 2003/03/24-17:01
記事番号19599へのコメント
桐の外部DB で気をつけた方が良い事など
http://www.icity.or.jp/usr/ogou/cgi-bin/Kiri.cgi
の過去のコメントを見れば,少しは参考に
なる事もあるかも知れません?


蛇足
桐は「長さ 0 の文字列」を扱えないので
Null値は禁止してあっても,「長さ 0 の文字列」は許容している場合,
この「長さ0 の文字列」を自分では入れ直す事は出来ません。

要は "" と #u (#未定義)を区別してくれないわけですが,こんな項目に対して ""
あるいは #u で置換をかけた場合,桐Ver8ではエラーが出ていたのに,
桐ver9 は1度目は何もエラーは発生せずに通ってしまう!
通ると言ってもデータに変化は無いのだが,
エラーも発生せずにカーソルが終端行に移動する。
同じ事を2度繰り返すと今度はエラーが発生するのだが,
どうも挙動が変だ? :-)

19602 Re:外部DB接続の性能について たぬきっち 2003/03/24-17:04
記事番号19598へのコメント
うにんさん、こんにちは
>結合してから検索するのでなく、パラメータ変数を使って検索条件を
>絞り込み条件に含めて、結合結果の行数が極力少なくなるようにします。
>
結合に絞り込み条件を使用していませんでしたの
絞り込み条件に変数を設定し実行した結果
7.05秒になりました。
(それでもちょっと遅いですね、実際、ユーザ間で共有したときのパフォーマンスがよいのかもしれませんね)
結合文を単なるテープルのOPENかと勘違いしておりました。
うにんさん、どうもありがとうございました。
19605 Re:外部DB接続の性能について たぬきっち 2003/03/24-17:26
記事番号19599へのコメント
hidetakeさん、こんにちは
>だから,別のユーザがいて先に更新がかけられていても,更新
>の発生の有無を問わず,自分のデータで上書きしてしてしまい
>ます。

まだ、そこまで調べてはないですけど、レコード排他がかからないということですね、
いわれてみれば桐はモードの設定とトラン開始くらいしか制御はありませんね、
MSDE側の設定でレコード排他が可能なのか
MSDEも今回使用するは初めてなのでもうちょっとしらべてみます。

>
>と言う事で,複数のユーザでデータの更新が発生する場合は
>よほど工夫してシステムを作る必要がある(桐内部だけの処理
>では済ませられない)と思います。
>

そうですね、テーブル構造などを工夫してUPDATE、DELETE
の発生しないシステムが理想ですね。
アドバイス、ありがとうございます。

戻る