タイムアウトへの対応について

4,075 views
Skip to first unread message

sadanori.ogawa

unread,
Jan 8, 2020, 1:05:14 AM1/8/20
to OpenTouryoProject
お世話になっております。
本年もよろしくお願いいたします。

現在2層C/S(C#)にて構築を行っておりますが、DB接続のタイムアウトに悩まされております。
解決につきご協力いただければと存じます。

当初は思いSQLを実施時にタイムアウトが発生し、app.configの値を変更しました。
========================
    <!-- D層のコマンド タイムアウト値を指定(秒) -->
    <add key="FxSqlCommandTimeout" value="3600"/>
======================
ベースはサンプルプロジェクトのものを使用しており、値は思い切って1時間。

一旦は落ち着いたものの、次は月次の処理として過去のデータを大量に削除するような処理にてタイムアウトが発生しています。
以下、スタックトレースの一部となります。※今のところ、削除実施後にエラーが発生しロールバックを行っている部分で発生している模様。
========================
実行タイムアウトの期限が切れました。操作完了前にタイムアウト期間が過ぎたか、サーバーが応答していません。
   場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   場所 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
   場所 System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync()
   場所 System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket()
   場所 System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer()
   場所 System.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte& value)
   場所 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   場所 System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
   場所 System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
   場所 System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
   場所 System.Data.SqlClient.SqlInternalTransaction.Rollback()
   場所 System.Data.SqlClient.SqlTransaction.Rollback()
   場所 Touryo.Infrastructure.Public.Db.DamSqlSvr.RollbackTransaction()
========================

発生している時間帯が、B層開始後凡そ60秒程度であるためトランザクションのタイムアウトが発生しているのではないかとも思っています。
※そのほか、コネクションのタイムアウトもあったりしますでしょうか?

今までに、類似の御経験はございませんでしょうか?
ある場合、解決方法等ご提示いただければと存じます。

sadanori.ogawa

unread,
Jan 8, 2020, 2:44:02 AM1/8/20
to OpenTouryoProject
続報となります。

上のものに加えて、わかったのはロールバック発行後から20秒ちょうどでタイムアウトが発生します。

もはや、フレームワーク関連とは思えなくなってきました・・・

何か情報ありましたらご連絡いただけると助かります。

2020年1月8日水曜日 15時05分14秒 UTC+9 sadanori.ogawa:

sadanori.ogawa

unread,
Jan 8, 2020, 5:12:10 AM1/8/20
to OpenTouryoProject
お騒がせしました。自己解決しました。

app.configに記載の接続文字列にて
connect timeoutを大きな数字にするとエラーが消えました。

以下のページを基に半信半疑で設定してみましたが、結果的に解消しています。

nishi.74322014

unread,
Jan 18, 2020, 8:43:06 AM1/18/20
to OpenTouryoProject
小川さん

すいません、

通知メールに気付きませんで遅れてしまいました。
通知メールの設定を見直したほうが良さそうです。

本件は、解決済ということでしょうか?
余談ですが、別件で以下のような修正を加えています。

The common timeout value cannot be set to “0”.
 · Issue #351 · OpenTouryoProject/OpenTouryo

FxSqlCommandTimeoutにO(∞)が指定可能になる。
Reply all
Reply to author
Forward
0 new messages