网站偶尔失去与数据库的连接
本文关键字:连接 数据库 偶尔 失去 网站 | 更新日期: 2023-09-27 18:31:23
我已经为这个错误苦苦挣扎了一个多月,无法弄清楚。
背景/架构:
- MVC 4 应用程序
- 冬眠
- 流利的NHibernate。
- SQL Server 2008 R2
- 蔚蓝网站
一整天,我的视图偶尔都会抛出错误,因为当它们尝试读取/显示对象的属性时,它会说:
NHibernate.Exceptions.GenericADOException: 无法初始化 collection: [WrestleStat.BL.School.Schedule#54][SQL: SELECT ...(删除以保持简短)....]---> System.Data.SqlClient.SqlException:超时已过期。超时 在操作完成之前经过的时间段或服务器 没有回应。尝试连接到时发生此故障 路由目标。尝试执行 连接到原始服务器是 - [登录前] 初始化=3; 握手=23;[登录] 初始化=0;身份验证 = 0;[登录后] 完成=1;---> System.ComponentModel.Win32Exception: 等待 操作超时 --- 内部异常堆栈跟踪结束 --- 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync() at System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() at System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer() at System.Data.SqlClient.TdsParserStateObject.TryReadByteArray(Byte[] buff, Int32 offset, Int32 len, Int32& totalRead) at System.Data.SqlClient.TdsParserStateObjec
2 周前,我在 AppHarbor 上运行我的网站,我认为这是因为我在他们的"基本"(免费)计划中。如果我将工作线程从 1 增加到 2,问题似乎就消失了。正因为如此,我决定切换到 Azure(无论如何我都会这样做,但不是这么早)。自从切换到 Azure 以来,问题并没有消失。
我每天在网站上收到大约十几个这样的错误。似乎当 razor 视图尝试访问它尝试读取/显示的对象的属性时,总是会发生错误,而不是在尝试检索数据的控制器中抛出错误。也许这与延迟加载有关???但是为什么这很重要,为什么在检索数据然后在页面上显示数据的极短时间内连接会丢失?
我不知道如何调试这个问题,因为它显然永远不会在我的开发环境中发生。我最终会切换到 Dapper,但我至少再过 3 个月才能做到这一点/开始。
这里有什么想法吗?
编辑:这是网站 http://www.wrestlestats.com
这些是云环境中常见的暂时性错误。 您需要实现重试逻辑/策略。
检查此答案:如何在 NHibernate 中添加重试逻辑来处理 SQL Azure 中的暂时性故障?