【问题标题】:ASP.NET NHibernate C# Timeout Issue SQL ServerASP.NET NHibernate C# 超时问题 SQL Server
【发布时间】:2011-12-22 22:18:26
【问题描述】:

我正在使用 ASP.NET 和 NHibernate 运行一个网站。最近,该网站遇到了一个导致 SQL Server 超时问题的问题。我发现该问题与锁定数据库中的表的 NHibernate 查询有关。该网站将在 20 分钟后恢复,或者如果我手动强制终止数据库上的所有连接。

基本上,我一直在尝试查找导致此问题的查询,但不幸的是,在尝试使用 NHibernate 分析器查找查询数月后,我没有成功。该问题很少发生,通常每周仅 1 到 2 次,这使得找出导致锁定表的查询的原因变得更加困难。我有 .net 设置以在发生错误日志时向我发送错误日志,这有助于我避免在运行查询时站点被锁定,因为我能够强制所有 SQL 连接断开,然后站点恢复。

长话短说,我需要的是一种临时解决方案,它可以在我继续尝试查找错误查询时暂时适用于网站。我想要做的是将超时时间从 20 分钟更改为 2 - 5 分钟。这样,它会限制运行此错误查询时站点关闭的时间。考虑到错误查询每周只发生 1 到 2 次,我认为这将是有限的停机时间。

唯一的问题是我不知道这是 SQL Server 强加的,还是 .net 或 NHibernate 强加的。基本上我指的是在运行错误查询后连接最终断开的 20 分钟。有谁知道这 20 分钟是什么,可以在哪里设置?我倾向于这可能是某种 NHibernate 超时,但我不知道如何设置它。

【问题讨论】:

    标签: c# .net sql-server nhibernate timeout


    【解决方案1】:

    唯一 20 分钟是运行站点的应用程序池上的空闲超时设置。因此,在 20 分钟不活动后,IIS 将回收整个工作进程,一切都会再次运行。因此,您可以将应用程序池上的此设置更改为 2-5 分钟。

    现在,从您所说的来看,您似乎没有正确处理事务,并且它一直运行到超时。因此,您需要做些什么来确定使用调试器将哪些代码附加到 IIS 网站并查看线程以了解它们卡在哪里。

    This 有点高级,但如果您继续进行操作,您将能够看到是什么锁定了您的数据库。如果你在 IIS 服务器上有 Visual Studio,调试环境会更熟悉,所以会更容易。

    【讨论】:

    • 如果我正在缓存映射到数据库中表的域对象,会发生这种情况吗?我正在考虑它,当这第一次发生时我所做的一个重大更改是将站点对象存储在缓存中,这样它就不必返回表来检索它。但这会以某种方式阻止它处理交易吗?
    • 首先,您在使用 NHibernate 的事务吗?如果是,请确保它们在 using 语句中,或者您正在正确处理它们。每个 Session.BeginTransaction() 都必须有一个对应的 Dispose()。我想如果你发布一些代码会很有用。你在哪里打开你的会话?是 BeginRequest 事件背后的代码还是其中的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多