1
1
我也见过类似的东西。我认为我们的问题与重新使用失败的会话有关(一旦会话对象发生故障,它将进入不良状态,无法恢复)。我们通过增加会话池的内存和增加Web应用程序回收的频率来解决问题。 它也是由一个新版本“引起”的,起初脸红似乎没有任何变化造成这种效果。然而,最终它变得清晰起来,程序的逻辑打开和关闭的连接比以前多了很多(可能多20%)。这一微小的变化推动了我们先前配置的限制。 |
2
4
因为我们遇到了同样的问题,也许我们的解决方案可以让我们更深入地了解是什么导致了这个问题。 本质上,此问题发生在Windows服务的生产环境中,该环境的负载非常重,Windows服务使用多个线程同时处理多个作业(100个用户通过ASP.NET Web应用程序使用相同的数据库,在使用SQL Server 2000的较旧硬件上,每秒约有60个事务)。 不共享变量,即重新打开连接、启动事务、执行操作、提交事务和关闭连接。 在重载情况下,有时会出现以下例外情况之一:
或
或
或
池中的连接似乎已损坏,并与以前使用的事务保持关联。此外,如果从池中检索到这样的连接,则sqladapter.fill(dataset)将生成一个空的数据集,从而导致“找不到表0”。因为我们的服务将在失败时重试该操作(读取作业列表),并且它总是从池中获取相同的损坏连接,所以在重新启动之前,它将失败并出现此错误。 我们通过使用sqlconnection.clearpool(connection)on exception来消除这个问题,以确保从池中丢弃这个连接并重新构造应用程序,从而减少线程同时访问相同资源的次数。 我不知道是谁造成了这个问题,所以我不确定我们是否真的解决了这个问题,也许只是使它如此罕见,还没有再次发生。 |
3
2
我以前就曾和这个错误信息作过斗争。关键是基础数据方法是 吞咽超时异常。 你可能会这样做:
GetEmployeeDataSet正在接受一个异常,可能是一个超时异常,这就是为什么它只偶尔发生的原因——它在加载时发生。您需要执行以下操作来修复它:
|
4
0
您可以检查SQL Server日志中的错误。或者,Web服务器事件日志。听起来您的连接池可能没有打开的连接,或者您的数据库可能没有。 |
5
0
哪些数据库调用在版本之间发生了更改? 很明显,错误是告诉您某个数据库调用有时不会返回任何数据;我想不出任何代码/程序集问题会导致此错误的情况。 |
6
0
我在用非线程安全方式处理NHibernate会话时看到了类似的情况。这就解释了为什么你只能在负载下看到它。但需要看到您的代码来猜测什么不是线程安全的。 |
Bilal Sedef · 如何快速组合特定列上的多个csv文件? 2 年前 |
user191762 · 同时使用两个不同的数据帧 2 年前 |
Ron Inbar · 如何在WinForms中绑定多对多关系? 6 年前 |
yihang hwang · 如何使用c将参数传递到数据集进行查询# 6 年前 |
Abhishek Agnihotri · R中的svm文件处理 6 年前 |