none
T-SQLのTransaction timeoutについて RRS feed

  • 質問

  • 現在、C#(.net Framework3.5)で開発したアプリでADO.NETのトランザクション処理(BeginTransaction、Commit、Rollback)でタイムアウトエラーが発生しています。※内部的にはConnection Timeoutエラーが発生していると推測しています。

    同プロジェクトではSQL Server2008でT-SQL(ストアドプロシージャ)の開発も行っており、T-SQL(ストアドプロシージャ)のトランザクション処理でもタイムアウトが発生する場合、対応が必要と考えていますが、T-SQL(ストアドプロシージャ)のトランザクション、コネクションのタイムアウトに関する文献が見つけられていません。

    T-SQL(ストアドプロシージャ)のトランザクション、コネクションのタイムアウトは発生するのでしょうか、また、発生する場合、対応方法がありましたらご教授下さい。

    2010年7月1日 4:05

回答

  • SQL Server2008上で動作するT-SQL(ストアドプロシージャ)について、ADO.NETのタイムアウトのようなものは存在するのでしょうか?
    存在しません。タイムアウトはあくまでクライアントサイドで発生するものです。コネクションとコマンド(クエリー発行)に関する2つのタイムアウトがあります。
    (ただし、サーバーではロック待ちのタイムアウトがあります。既定ではタイムアウトの設定は-1で、永遠に待ち続けます)

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク 木村太郎 2010年7月8日 10:48
    2010年7月5日 3:21

すべての返信

  • 以下が参考になりませんか?

    SqlCommand.CommandTimeout プロパティ
    http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.commandtimeout(VS.80).aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年7月1日 7:03
  • いくつかタイムアウトするポイントがあると思います。どのぐらいの時間、どのような処理ででタイムアウトするのでしょうか。少々古い記述もありますが参考までに。

    60秒
    http://msdn.microsoft.com/ja-jp/library/ms973865.aspx#introsystemtran_topic12

    30秒
    http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx

    15秒
    http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

    2010年7月4日 12:21
    モデレータ
  • trapemiya 様

    ご回答ありがとうございます。

    返信が遅くなりまして申し訳ございません。

    > 以下が参考になりませんか?

    > SqlCommand.CommandTimeout プロパティ
    > http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.commandtimeout(VS.80).aspx

    ⇒C#(.net Framework3.5)で開発したアプリのADO.NETのタイムアウトについてはSqlCommand.CommandTimeout プロパティとSqlConnection.ConnectionTimeout プロパティ (※接続文字列で指定)で対応しております。

    SQL Server2008上で動作するT-SQL(ストアドプロシージャ)について、ADO.NETのタイムアウトのようなものは存在するのでしょうか?T-SQL(ストアドプロシージャ)のプログラムでは、今までタイムアウトが発生したことはなく、開発中もコネクションやタイムアウトについて意識したことがなかった為、タイムアウトが発生するかも分かっていない状況です。

    2010年7月4日 16:43
  • ElanLilac

    ご回答ありがとうございます。

    > いくつかタイムアウトするポイントがあると思います。どのぐらいの時間、どのような処理ででタイムアウトするのでしょうか。少々古い記述もありますが参考までに。

    ⇒C#(.net Framework3.5)で開発したアプリでは、トランザクション処理(BeginTransaction、Commit、Rollback)でタイムアウトが発生しております。

    実測はしていない為、どのぐらいの時間でタイムアウトをしているかは分かっておりませんが、コネクションのタイムアウトは15秒(規定値)で設定しており、コマンドタイムアウトは10分に設定しています。

    トランザクション処理(BeginTransaction、Commit、Rollback)のタイムアウトはコネクションタイムアウトに起因すると記述したサイトがあった為、コネクションタイムアウトを30秒に変更して対応しておりますが、未だトランザクション処理でタイムアウトが発生することがあります。教えていただいたサイトのTransactionScopeのタイムアウト値は変更していないため確認及び設定の必要性を検討します。

    SQL Server2008上で動作するT-SQL(ストアドプロシージャ)について、ADO.NETのタイムアウトのようなものは存在するのでしょうか?

    2010年7月4日 17:07
  • SQL Server2008上で動作するT-SQL(ストアドプロシージャ)について、ADO.NETのタイムアウトのようなものは存在するのでしょうか?
    存在しません。タイムアウトはあくまでクライアントサイドで発生するものです。コネクションとコマンド(クエリー発行)に関する2つのタイムアウトがあります。
    (ただし、サーバーではロック待ちのタイムアウトがあります。既定ではタイムアウトの設定は-1で、永遠に待ち続けます)

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク 木村太郎 2010年7月8日 10:48
    2010年7月5日 3:21