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

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

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

No.74669 の関連記事表示

<< 0 >>
■74669  CommitTransactionの使い方
□投稿者/ シャープ -(2015/01/22(Thu) 10:37:46)

    分類:[データベース全般] 

    2015/01/22(Thu) 10:57:29 編集(投稿者)

    DB更新時の質問です。
    VisualStudio環境からSqlConnectionのBeginTransaction()を行い、後続処理のある条件の場合は"DB変更処理なし"(SELECT処理は実施)と
    するならば、その条件でもCommitTransaction()を使用すべきですか?
    なるべく高速処理をしたいです。

    DBはSQL Server2010です。


    よろしくお願いします。
親記事 /過去ログ125より / 関連記事表示
削除チェック/

■74670  Re[1]: CommitTransactionの使い方
□投稿者/ shu -(2015/01/22(Thu) 10:47:54)
    No74669 (シャープ さん) に返信

    言っている意味がよくわからないのですが
    トランザクションを開始したのなら終了させるべきです。
記事No.74669 のレス /過去ログ125より / 関連記事表示
削除チェック/

■74672  Re[2]: CommitTransactionの使い方
□投稿者/ シャープ -(2015/01/22(Thu) 10:56:53)
    No74670 (shu さん) に返信
    > ■No74669 (シャープ さん) に返信
    >
    > 言っている意味がよくわからないのですが
    > トランザクションを開始したのなら終了させるべきです。

    説明不足でした。

    終了のさせ方として、RollbackTransaction()を使用した場合と処理速度に違いがあるのかを気にしていました。

    "DB変更処理なし"の場合も、SELECT処理程度のDBアクセスはする前提でお願いします。

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

■74673  Re[3]: CommitTransactionの使い方
□投稿者/ ぽぴ王子 -(2015/01/22(Thu) 11:23:04)
>
    No74672 (シャープ さん) に返信
    > ■No74670 (shu さん) に返信
    >>■No74669 (シャープ さん) に返信
    >>
    >>言っている意味がよくわからないのですが
    >>トランザクションを開始したのなら終了させるべきです。

    私もshuさんと同じ解釈をしていました :-)

    > 終了のさせ方として、RollbackTransaction()を使用した場合と処理速度に違いがあるのかを気にしていました。
    >
    > "DB変更処理なし"の場合も、SELECT処理程度のDBアクセスはする前提でお願いします。

    SqlConnection ということは SQL Server ということでいいのですよね。
    SQL Server の中身まではわからないですが(他もわからないけれど)単純に考えた場合、コミットする内容がないとして
    CommitTransaction も RollbackTransaction も速度に関してはさほど違いがあるようには思えないです。
    や、厳密にいえば多少の違いはあるかもしれないですが、他の処理の方が問題になることが多いので、気にするほどではない
    というレベルで、違いはないような気がします。
記事No.74669 のレス /過去ログ125より / 関連記事表示
削除チェック/

■74674  Re[3]: CommitTransactionの使い方
□投稿者/ shu -(2015/01/22(Thu) 11:34:29)
    No74672 (シャープ さん) に返信

    Selectするだけなら
    コネクションを開いたまま複数selectして閉じれば
    トランザクションは特にいらないかと思います。

    処理速度を上げたければストアド、ユーザー定義関数を
    用意するのがよいかと。
記事No.74669 のレス /過去ログ125より / 関連記事表示
削除チェック/

■74675  Re[3]: CommitTransactionの使い方
□投稿者/ WebSurfer -(2015/01/22(Thu) 12:09:25)
    No74672 (シャープ さん) に返信

    やりたいことがよく分かりません。

    具体的なコード例を書いて(もしくは、Web にあるサンプルコードを引用して)「X 行目
    の Commit は必要か?」と言うような感じで聞いていただくと理解しやすいのですが、可
    能でしょうか?

    > 終了のさせ方として、RollbackTransaction()を使用した場合と処理速度に違いがあるのかを気にしていました。

    上記について、今の時点で一つだけ言えるのは、未コミットのトランザクションは接続が
    Close される時にロールバックされます。

    コネクションリーク防止のため、例外等何が起こっても必ず Close されるようにコーデ
    ィングするはずですよね。

    なので、一旦トランザクションを開始したら、コミットまたはロールバックのいずれかが
    行われるはずです。
記事No.74669 のレス /過去ログ125より / 関連記事表示
削除チェック/

■74677  Re[4]: CommitTransactionの使い方
□投稿者/ なちゃ -(2015/01/22(Thu) 13:35:54)
    単に、処理の最初でトランザクションは開始しているが、条件によっては結局何も更新処理を行わない場合があるが、そのときにどうするのがパフォーマンス上有利か?という疑問と言うことだと思います。
    出ふつうに考えれば多分実質的な差はないと思いますが、当然DBの実装に依存はするので、結論は出せないです。
    でまあ、変なことやるような価値はないと思いますので、何も考えずコミットで問題ないというのがふつうだと思います。

    余談ですが、例えば更新データがある状況なら、コミットよりロールバックの方が時間がかかるということもあります、が応答時間では一概に言えない可能性もありますね、結局実装や状況依存ですね。
記事No.74669 のレス /過去ログ125より / 関連記事表示
削除チェック/

■74680  Re[5]: CommitTransactionの使い方
□投稿者/ シャープ -(2015/01/22(Thu) 16:29:13)
    No74677 (なちゃ さん) に返信

    なちゃさん、返信ありがとうございます。

    投稿して頂いた通りの内容で間違いございません。
    代弁して頂いたような形になり、助かりました。


    パフォーマンスに関しては、一概に何とも言えないということで了解しました。

    DB更新処理をしない場合のトランザクション終了時に、最適化する定石があれば知りたいと思ったので、
    お聞きした次第です。

    極端に処理時間が遅くならないうちは、コミットで統一しようと思います。

    ありがとうございました。
記事No.74669 のレス / END /過去ログ125より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -