【问题标题】:how to globally set timeout in nhibernate如何在nhibernate中全局设置超时
【发布时间】:2011-08-10 11:31:29
【问题描述】:

我定期收到以下异常。

System.Data.SqlClient.SqlException:超时已过期。超时 在操作完成之前经过的时间段或服务器处于 没有反应。

我已将以下内容添加到我的标准中以增加超时时间。

 .SetTimeout(180)

1) 有没有办法将此添加到我的休眠配置中,以便 180 成为默认时间?

2) 增加超时有什么后果?这会增加还是减少死锁的可能性?

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    command_timeout - 指定 NHibernate 生成的 IDbCommands 的默认超时时间

    取自表 3.1。
    http://www.nhforge.org/doc/nh/en/index.html#configuration-hibernatejdbc

    中的 NHibernate ADO.NET 属性

    【讨论】:

    • 值得一提的是,值为 0 表示没有超时,并且会(可能)永远等待。
    【解决方案2】:

    广告 2. 连接超时无助于解决死锁。超时是客户端等待数据库响应的时间,如果超时,数据库只会发送错误状态。

    另一方面,死锁是可解决的,因为一个事务有一个锁并等待另一个事务拥有的另一个锁,同时它正在等待第一个事务锁定的资源。请注意,当 DB 检测到此问题时,它会立即释放错误 - 而不是在任何超时之后。

    见:

    当您增加超时时,您唯一允许的就是当任何事务持有您正在等待的锁时等待更长的时间。

    例如当您有一个客户端将较大的数据部署到您的系统中并在表的基础上执行锁定时。部署操作可能需要 60 秒。假设另一个客户端从表中读取数据,该客户端被阻止60 seconds,直到它能够读取数据。假设timeout = 30 seconds - 这总是失败,另一方面,与90 seconds timeout 相同的情况将起作用。

    视情况而定,但您应提供尽可能小的事务以强制实现更好的延迟和吞吐量。

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 2018-04-04
      • 2016-04-16
      • 1970-01-01
      相关资源
      最近更新 更多