C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.51431 の関連記事表示

<< 0 >>
■51431  Set CreateDynaset でレスポンス遅延が発生
□投稿者/ VB533151 -(2010/07/05(Mon) 18:44:11)

    分類:[VB6 以前] 

    お世話になります。

    VB6のプログラムで、以下の通り CreateDynaset を実行しているのですが
    DBに対して更新処理を実行した後の検索処理で、レスポンス遅延が発生しています。
    更新をしなければ、遅延は発生しません。

    現状は、Set CreateDynasetで遅延が発生している事しか判明しておりません。
    何か良い原因調査方法はありませんでしょうか?
    ******************************************************
    Private oORADB As OraDatabase
    Set CreateDynaset = oORADB.CreateDynaset(SQL, &H4&)
    ******************************************************
親記事 /過去ログ86より / 関連記事表示
削除チェック/

■51432  Re[1]: Set CreateDynaset でレスポンス遅延が発生
□投稿者/ すなふきぬ -(2010/07/05(Mon) 18:58:11)
    No51431 (VB533151 さん) に返信
    > VB6のプログラムで、以下の通り CreateDynaset を実行しているのですが
    > DBに対して更新処理を実行した後の検索処理で、レスポンス遅延が発生しています。

    もう少し環境を書くのが良いかと。

    DBの種類(OraだからOracleだろうけど8とか9iとか)、どのくらい遅延しているのか、データ量、トランザクションの有無、他のテーブルでも同様に遅延するor特定のテーブルのみか等。

    レスポンスの調整は、ボトルネックの切り分けが重要なので、まずは問題を限定してきましょ。

記事No.51431 のレス /過去ログ86より / 関連記事表示
削除チェック/

■51433  Re[2]: Set CreateDynaset でレスポンス遅延が発生
□投稿者/ VB533151 -(2010/07/05(Mon) 19:25:10)
    No51432 (すなふきぬ さん) に返信

    申し訳ありません。

    DBは、Oracle 10gです。
    画面プログラムで、2テーブルを検索、もしくは更新しています。

    遅延なしのパターンは、更新をしないパターンです。
    例)検索→検索→検索

    遅延するパターンは、更新を含むパターンです。
    例)検索→更新→検索 検索→検索→更新→検索

    どのくらい遅延しているのかというと、三倍近く遅延しています。
    また当現象は、この画面でのみ発生している現象です。
記事No.51431 のレス /過去ログ86より / 関連記事表示
削除チェック/

■51438  Re[3]: Set CreateDynaset でレスポンス遅延が発生
□投稿者/ すなふきぬ -(2010/07/05(Mon) 23:07:00)
    No51433 (VB533151 さん) に返信
    > ■No51432 (すなふきぬ さん) に返信
    > 遅延なしのパターンは、更新をしないパターンです。
    > 例)検索→検索→検索
    >
    > 遅延するパターンは、更新を含むパターンです。
    > 例)検索→更新→検索 検索→検索→更新→検索

    すっかり見落としてました。

    > Set CreateDynaset = oORADB.CreateDynaset(SQL, &H4&)

    &H4&は、ORADYN_READONLYなので、更新を含む場合は別の定数に変更した方がいいかも。
記事No.51431 のレス /過去ログ86より / 関連記事表示
削除チェック/

■51448  Re[4]: Set CreateDynaset でレスポンス遅延が発生
□投稿者/ VB533151 -(2010/07/06(Tue) 14:29:51)
    No51438 (すなふきぬ さん) に返信

    更新と参照が混じっていますので、
    現状は、前処理として定数を入れ替えています。

    If IsMissing(LValue) Then
    LOption = ORADYN_READONLY
    Else
    LOption = LValue
    End If

    Set CreateDynaset = oORADB.CreateDynaset(SQL, LOption)
記事No.51431 のレス /過去ログ86より / 関連記事表示
削除チェック/

■51450  Re[5]: Set CreateDynaset でレスポンス遅延が発生
□投稿者/ すなふきぬ -(2010/07/06(Tue) 18:00:04)
    No51448 (VB533151 さん) に返信
    > ■No51438 (すなふきぬ さん) に返信
    >
    > 更新と参照が混じっていますので、
    > 現状は、前処理として定数を入れ替えています。
    >
    > If IsMissing(LValue) Then

    関数定義がないのでなんとも言えませんが、LValueはVariant型ですよね?
    プレフィックスがLなのでちょっと気になってます。
    (たしかVB6のIsMissing()はVariant型でないと判断できなかったような記憶があるので)

    更新が遅い場合は、インデックス等を疑ってみるのも良いと思います。
    データ数がわからないのでなんとも言えませんが、単純にsqlplus等でデータを挿入した場合も遅いでしょうか?

    > どのくらい遅延しているのかというと、三倍近く遅延しています。
    > また当現象は、この画面でのみ発生している現象です。

    この画面のみと言うことですが、同じような画面があるのであれば、その画面と差分を調べるのが早いかもしれません。
    更新と参照を交互にされているみたいですが、OraDynasetの解放(set CreateDynaset = Nothing)とかはされていますか?
記事No.51431 のレス /過去ログ86より / 関連記事表示
削除チェック/

■51453  Re[6]: Set CreateDynaset でレスポンス遅延が発生
□投稿者/ VB533151 -(2010/07/06(Tue) 21:26:48)
    No51450 (すなふきぬ さん) に返信
    > 関数定義がないのでなんとも言えませんが、LValueはVariant型ですよね?
    > プレフィックスがLなのでちょっと気になってます。
    > (たしかVB6のIsMissing()はVariant型でないと判断できなかったような記憶があるので)

    申し訳ありません、転記に誤りがありました。

    Public Function CreateDynaset(Optional ByVal vSQLString As Variant, Optional LOptionValue As Long) As OraDynaset

    Dim LOption As Long

    RetCount = -1
    SQLErrMsg = ""

    Set CreateDynaset = Nothing

    If IsMissing(vSQLString) Then
    If SQL = "" Then
    MsgBox "設定されていません", _
    vbSystemModal + vbCritical, "CDBHandle Class Error"
    Exit Function
    End If
    Else
    SQL = vSQLString
    End If

    If IsMissing(LOptionValue) Then
    LOption = ORADYN_READONLY
    Else
    LOption = LOptionValue
    End If

    On Error GoTo ErrorHandler
    Set CreateDynaset = oORADB.CreateDynaset(SQL, LOption)
    RetCount = CreateDynaset.RecordCount

    Exit Function

    ErrorHandler:
    SQLErrCode = oORADB.LastServerErr
    Err.Raise SQLErrCode, "clsDbHandler::CreateDynaset", SQLErrMsg
    End Function

    > 更新が遅い場合は、インデックス等を疑ってみるのも良いと思います。
    > データ数がわからないのでなんとも言えませんが、単純にsqlplus等でデータを挿入した場合も遅いでしょうか?

    更新前の検索と更新後の検索では同じsqlを実行しています。

    > この画面のみと言うことですが、同じような画面があるのであれば、その画面と差分を調べるのが早いかもしれません。
    > 更新と参照を交互にされているみたいですが、OraDynasetの解放(set CreateDynaset = Nothing)とかはされていますか?

    確かに解放されていないかも知れません。

    Set CreateDynaset = Nothing
    On Error GoTo ErrorHandler
    Set CreateDynaset = oORADB.CreateDynaset(SQL, LOption)
    RetCount = CreateDynaset.RecordCount

    としてみましたが、現象が変わりません。
記事No.51431 のレス /過去ログ86より / 関連記事表示
削除チェック/

■51458  Re[7]: Set CreateDynaset でレスポンス遅延が発生
□投稿者/ すなふきぬ -(2010/07/06(Tue) 22:35:21)
    No51453 (VB533151 さん) に返信
    > ■No51450 (すなふきぬ さん) に返信

    >> 更新が遅い場合は、インデックス等を疑ってみるのも良いと思います。
    >> データ数がわからないのでなんとも言えませんが、単純にsqlplus等でデータを挿入した場合も遅いでしょうか?
    > 更新前の検索と更新後の検索では同じsqlを実行しています。

    検索のSQLではなくて、更新系のSQLを疑うべきかも。


    > 確かに解放されていないかも知れません。

    > Public Function CreateDynaset(Optional ByVal vSQLString As Variant, Optional LOptionValue As Long) As OraDynaset
    > Set CreateDynaset = Nothing
    > On Error GoTo ErrorHandler
    > Set CreateDynaset = oORADB.CreateDynaset(SQL, LOption)
    > RetCount = CreateDynaset.RecordCount

    まず、関数名のCreateDynasetにSetしてるってことは戻り値としてOraDynasetを返却していますよね。
    呼び出し元の変数は解放できていますか?

    Set x = CreateDynaset("",0)
    のxの変数です。

    この関数内では、Open-Closeの処理がないですが、Err.Raiseをしているので呼び出し側で制御していると思いますが、トランザクション等はどうなっていますか?
記事No.51431 のレス /過去ログ86より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -