在过去的几个月里,我们的网站遇到了一个奇怪的问题。偶尔使用ADO.NET DataSets对数据库进行各种查询会抛出错误...其中最常见的是“无法启用约束。一行或多行包含违反非null,唯一或外来的值-key约束。“
数据实际上是有效的,因为没有改变任何东西,错误将是间歇性的。此外,它的“修复”是回收两个Web服务器上的应用程序池...所以问题不能是返回错误的数据。一旦完成,它可以一次运行数周,或在一天内完成3次。它没有一致性......
它似乎似乎像新的数据访问手段,如Linq 2 SQL,工作得很好......虽然现在很难分辨,因为该网站目前正在使用这两种方式。 (努力将所有内容都交给L2S,但遗憾的是没有很多时间重写旧组件......)
以前有人有这样的事吗?这是负载平衡的东西吗?也许服务器有问题? (我强制所有连接到每个服务器的连接,并且都遇到了错误。)在VM中运行可能有问题吗?
呃...好吧,所以整体问题是:是什么造成了这个问题以及如何解决?
哦,网站是在.NET 3.5 ......
答案 0 :(得分:0)
根据您所说的内容,我猜这与错误发生时服务器上的负载有关。
如果可以,请设置一个与生产服务器类似的负载均衡的暂存环境。然后开始加载测试应用程序。
此外,请确保在生产服务器上应用了所有最新的Service Pack /更新。 MS倾向于不告诉我们他们正在修理的一切。最后,查看MS connect以查看修补程序是否纠正了您正在讨论的问题。
<强>更新强>
负载测试可以像您所能承受的那样简单或复杂。它应该做的是运行一系列页面,以可重复的方式在您的站点上执行标准操作。您通常希望模拟每个页面加载/操作之间的“思考”时间,这与预期的用户行为一致。
然后,您将测试作为一定数量的同时用户执行。测试正在执行时,您需要记录任何错误和服务器性能计数器,以了解应用程序的真正执行情况。
Some links to load testing tools are here。 Another list is here
作为旁注,我看到应用程序在仅有5个并发用户的负载下开始表现出奇怪的行为。这实际上取决于网站的构建方式。