gpt4 book ai didi

asp.net - 偶发的 ASP.NET 数据错误 : "Cannot find table 0"

转载 作者:行者123 更新时间:2023-12-02 20:32:31 29 4
gpt4 key购买 nike

在生产环境中部署了新版本的 ASP.NET 站点后,我每秒都会记录数十个数据错误,几乎总是出现错误“找不到表 0”。我们使用数据集并经常引用 Table[0],虽然我了解在访问 Table[0] 之前检查数据集是否有表的防御性编码实践,但从来没有这样做过。过去的一个问题。某个页面前一秒加载得很好,然后下一秒就丢失了其中一个数据驱动组件。只是看看这是否对任何人来说都敲响了警钟。

更多细节:这次我使用了不同的构建服务器,虽然我想象两者的编译器设置是相同的,但我很难想象有一个开关可以使 50%我的数据库调用返回时没有表。我还将项目切换到 VS 2008,但当我切换回 VS 2005 时,恢复了所有这些更改。我注意到构建的程序集有一个新的MyLibrary.XmlSerializers.dll,它不习惯的地方,但我也无法想象这是造成所有麻烦的原因。 (它也不会在调用 MyLibrary 时失败,或者至少不会比任何其他时间都失败。)

更新添加:我发现麻烦的构建是“发布”构建,其中工作构建被编译为“调试”。这可以解释一下吗?

回滚到这些更改修复之前的版本。 (重新启动 SQL Server,我们之前尝试过的步骤,没有成功。)

问题似乎也是基于负载的 - 这在我们的集成和 QA 环境中顺利运行,甚至我们的冒烟测试环境 - 指向生产数据的环境 - 在轻负载下也很好。

这是否具有您过去可能见过的任何东西的显着特征?

最佳答案

提出这个老问题是因为我们遇到了同样的问题,也许我们的解决方案可以更深入地了解导致此问题的原因。

本质上,这个问题发生在生产环境中,Windows 服务负载非常重,该服务使用多个线程同时处理多个作业(100 个用户通过 ASP.NET Web 应用程序使用同一个数据库,大约有 60 个事务/在使用 SQL Server 2000 的旧硬件上排名第二)。

没有共享变量,即重新打开连接、启动事务、执行操作、提交事务并关闭连接。

在重负载下有时会出现以下异常之一:

NullReferenceException: Object reference not set to an instance of an
object.
at System.Data.SqlClient.SqlInternalConnectionTds.get_IsLockedForBulkCopy()

System.Data.SqlClient.SqlException:
The server failed to resume the transaction. Desc:3400000178

New request is not allowed to start because it should come with valid  transaction descriptor  

This SqlTransaction has completed; it is no longer usable

不知何故,池内的连接似乎已损坏,并仍然与以前使用的事务相关联。此外,如果从池中检索此类连接,则 sqlAdapter.Fill(dataset) 会导致空数据集,从而导致“找不到表 0”。因为我们的服务会在失败时重试操作(读取作业列表),并且它总是会从池中获取相同的损坏连接,因此在重新启动之前,它会因此错误而失败。

我们通过在异常时使用 SqlConnection.ClearPool(connection) 来解决该问题,以确保从池中丢弃该连接并重组应用程序,以便更少的线程同时访问相同的资源。

我不知道到底是谁造成了这个问题,所以我不确定我们是否真的解决了这个问题,也许只是让它变得如此罕见,以至于还没有再次发生。

关于asp.net - 偶发的 ASP.NET 数据错误 : "Cannot find table 0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2276740/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com