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

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

C# と VB.NET の入門サイト

Re[5]: CommitTransactionの使い方


(過去ログ 125 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■74669 / inTopicNo.1)  CommitTransactionの使い方
  
□投稿者/ シャープ (7回)-(2015/01/22(Thu) 10:37:46)

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

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

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

DBはSQL Server2010です。


よろしくお願いします。
引用返信 編集キー/
■74670 / inTopicNo.2)  Re[1]: CommitTransactionの使い方
□投稿者/ shu (669回)-(2015/01/22(Thu) 10:47:54)
No74669 (シャープ さん) に返信

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

説明不足でした。

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

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


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

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

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

SqlConnection ということは SQL Server ということでいいのですよね。
SQL Server の中身まではわからないですが(他もわからないけれど)単純に考えた場合、コミットする内容がないとして
CommitTransaction も RollbackTransaction も速度に関してはさほど違いがあるようには思えないです。
や、厳密にいえば多少の違いはあるかもしれないですが、他の処理の方が問題になることが多いので、気にするほどではない
というレベルで、違いはないような気がします。

引用返信 編集キー/
■74674 / inTopicNo.5)  Re[3]: CommitTransactionの使い方
□投稿者/ shu (670回)-(2015/01/22(Thu) 11:34:29)
No74672 (シャープ さん) に返信

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

処理速度を上げたければストアド、ユーザー定義関数を
用意するのがよいかと。

引用返信 編集キー/
■74675 / inTopicNo.6)  Re[3]: CommitTransactionの使い方
□投稿者/ WebSurfer (476回)-(2015/01/22(Thu) 12:09:25)
No74672 (シャープ さん) に返信

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

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

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

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

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

なので、一旦トランザクションを開始したら、コミットまたはロールバックのいずれかが
行われるはずです。

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

余談ですが、例えば更新データがある状況なら、コミットよりロールバックの方が時間がかかるということもあります、が応答時間では一概に言えない可能性もありますね、結局実装や状況依存ですね。
引用返信 編集キー/
■74680 / inTopicNo.8)  Re[5]: CommitTransactionの使い方
□投稿者/ シャープ (9回)-(2015/01/22(Thu) 16:29:13)
No74677 (なちゃ さん) に返信

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

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


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

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

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

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -