【问题标题】:NHibernate database connections failing under loadNHibernate 数据库连接在负载下失败
【发布时间】:2019-02-09 01:18:09
【问题描述】:

我想知道这对于任何有经验的 NHibernate 开发人员来说是否熟悉,或者是否有人可以告诉我从哪里开始尝试解决这个问题:

我继承了一个用 ASP.NET 1.1 编写的 NHibernate 站点,使用 NHibernate 0.6 和 .NET 远程处理驻留在数据库服务器上的 DAL 层。我一直在尝试将其升级到 ASP.NET 3.5 和 NHibernate 1.2.1.4。

我用直接数据库连接替换了 .NET 远程处理设置,一切正常,直到站点承受一定负载,然后 NHibernate 调用开始间歇性失败并抛出异常:ADOException 无法执行查询,然后是 NHibernate 生成的 SQL 语句.

给出错误的堆栈跟踪是:

NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, Type optionalEntityName, Object optionalIdentifier, IEntityPersister persister)
   at NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId)
   at NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor session)
   at NHibernate.Impl.SessionImpl.DoLoad(Type theClass, Object id, Object optionalObject, LockMode lockMode, Boolean checkDeleted)
   at NHibernate.Impl.SessionImpl.DoLoadByClass(Type clazz, Object id, Boolean checkDeleted, Boolean allowProxyCreation)
   at NHibernate.Impl.SessionImpl.Load(Type clazz, Object id)

【问题讨论】:

    标签: asp.net nhibernate


    【解决方案1】:

    问题是非线程安全的休眠会话工厂。将项目更改为使用 http 模块,以便每个请求使用一个休眠会话(并确保不要为非 .as*x 文件上的 rquests 打开会话),一切都很好。

    【讨论】:

      【解决方案2】:
      • 验证您的连接设置。
      • 如果可以,请尽可能多地缓存对象以避免破坏服务器
      • 确保您的表格已编入索引...这是一个巨大的表格
      • 确保 log4net 的日志记录变为警告/错误,这样您就不会在日志中编写百科全书

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 2023-03-02
        • 2020-05-05
        相关资源
        最近更新 更多