我定期收到以下异常。
System.Data.SqlClient.SqlException:超时已过期。超时 在完成操作或服务器之前经过的时间段 没有回应。
我已将以下内容添加到我的条件中以增加超时时间。
.SetTimeout(180)
1)有没有办法将它添加到我的nhibernate配置中,以便180是默认时间?
2)增加超时的后果是什么?这会增加或减少死锁的可能性吗?
答案 0 :(得分:6)
command_timeout
- 指定NHibernate生成的IDbCommands的默认超时
取自表3.1。 NHibernate ADO.NET属性中 http://www.nhforge.org/doc/nh/en/index.html#configuration-hibernatejdbc
答案 1 :(得分:0)
广告2.连接超时不会帮助您解决死锁问题。超时是客户端等待数据库响应的时间,如果时间不足,DB只会发送错误状态。
另一方面,死锁是可解析的,因为一个事务具有锁定并等待其他事务所拥有的其他锁定,同时它正在等待第一个事务锁定的资源。请注意,当DB检测到此问题时,它会立即释放错误 - 而不是在任何超时之后。
请参阅:
当你增加超时时,你会允许的唯一事情就是等待任何事务持有你正在等待的锁的时间。
E.g。当您有一个客户端将更大的数据部署到您的系统并且它基于表执行锁定时。部署操作可能需要60秒。假设另一个客户端从表中读取数据,该客户端被阻塞60 seconds
,直到它能够读取数据。假设timeout = 30 seconds
- 总是失败,另一方面,90 seconds timeout
的相同情况也会有效。
取决于具体情况,但您应提供尽可能小的交易,以实施更好的延迟和吞吐量。