sql修改字段 服务器未响应,IIS_Timeout_SQL

一。错误信息

Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。(单机非镜像数据库)

Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。 尝试连接到

Principle 服务器时发生了此故障。

Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。 尝试连接到 Failover

服务器时发生了此故障。

二。普及下关于Timeout之前和之后的那些事

连接数据库镜像出现超时(timeout)的可能原因(引用微软的权威解释,便于大家理解我有补充)

1.客户端程序连接镜像数据库和非镜像数据库的方式是有差别的。

2.当数据库是镜像数据库的时候,你在connection

string里面指定的timeout值和非镜像数据库的timeout值尽管大小一样,但实际上效果是不一样的。对于镜像数据库,客户端数据库接口(通常是SqlClient

或者SQL native

client)有连接重试算法。非镜像数据库是没有的。

3.那么镜像数据库的连接算法怎样呢

假定你指定connection timeout 15

秒:

第一轮:连接主机,超时时间为总timeout的8% 即:15*8%=1.2秒

这时候如果连接没有成功,就试图连接备机,超时时间也是1.2秒(镜像数据库连接串中是双地址)

第二轮:如果连接备机失败,这时候,客户端数据库接口再试图连接主机,超时时间设为

总timeout的16% 即:15*16%=2.4秒。 如果没有成功,就连接备机,超时时间也是2.4秒。

第三轮,超时时间是总timeout时间的24%。在后续的每轮中,连接尝试的重试时间会逐渐变大。前八次连接尝试的重试时间如下:

8%, 8%, 16%, 16%, 24%, 24%, 32%,

32%

(此过程,数据库状况一直是健康的)

重试时间使用以下公式进行计算:

RetryTime = PreviousRetryTime + ( 0.08 * TotalLoginTimeout )

1.2+1.2+2.4+2.4+3.6+3.6=14.4(秒)

也就是说,对于15秒的timeout值,实际连接主机的最大timeout值是3.6秒! 如果前面3次连接(1.2秒,2.4秒,3.6秒)都不成功,那么15秒超时时间就到了,你程序就会报超时错误。

附图:

a4c26d1e5885305701be709a3d33442f.png

三。解决方案

要增加连接主机的真实timeout值,你只能增加总的connection

timeout值。比如如果超时设为120秒,那么第一轮的重试时间是

120*8%=9.6秒。

即便如此,第一轮的尝试连接时间还是比非镜像数据库的缺省15秒timeout时间要短。

所以我个人建议

1.修改Web.config配置文件,设置ConnectTimeout的值

300~500之间比较合适

2.改command对象的CommandTimeout属性,cmd.CommandTimeout = 30~180

具体依据客户的体验结果为准;

3.关于数据库镜像字符串我再强调几个参数,

max pool size=800;

min pool size=300;

Network=dbmssocn;

Failover Partner=10.100.X.X;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值