背景 - 我有一个网站& Windows预定作业,它是MSI的一部分并安装在同一服务器上。最终用户使用该网站创建一些规则,并且计划每天运行该作业,以便为最终用户创建的规则创建平面文件。实际情况比上面说明的要复杂得多。
问题(使用网站) - 网站大部分时间都运行正常,但有时它只是不会加载规则创建页面 - 并且记录它的异常'查询超时或SQL服务器没有响应'
问题(与作业有关) - 作业的行为与网站类似,但有时会出现异常 - “查询超时或SQL服务器无响应”
我尝试了什么 -
我寻求什么 - 还有其他可能导致这种情况的原因吗?有什么我可以找的吗?
技术 - SQL Server 2008 R2,ASP.Net,C#.Net
限制 - 由于客户机密性,代码详细信息无法显示,但我对问题持开放态度 - 我会尽量回答这些问题,并牢记客户的机密性。
注意 - 已经有查询超时(3600s)&连接超时 (30s)在应用程序配置文件中定义。
答案 0 :(得分:1)
昨天也遇到了同样的问题。有一个巨大的查询在SQL Server中花费了18秒,但是在200秒之后在C#中耗尽了。我重新启动计算机断开数据库连接甚至断开服务器......没有任何改变。
阅读完一些帖子后,我注意到有关索引的常见提要。所以我删除了我的数据库中的一些索引,放了一些回来,瞧!恢复正常。
也许我认为可能发生了。当我运行一些测试时,我可能仍然留下了一些僵尸连接,我的同事在DB中同时创建了一些表,并将它们链接到我的存储过程中使用的表。即使新创建的表与存储过程无关,将它们与其他表链接也似乎搞乱了索引。为什么只有C#无法正常工作?我的猜测是,当连接SQL Server以外的其他地方时,SQL Server中的内存缓存无法访问。
N.B。就我而言,改变存储过程根本没有任何影响,即使它是某些线程中的常见“解决方案”。
希望如果有人遇到同样的问题,这会有所帮助。如果有人能找到更好的解决方案/解释,请分享!!!
干杯,
答案 1 :(得分:0)
我遇到了与mssql类似的问题,并没有找到任何特殊原因造成这种不稳定的行为。我的解决方案是让db重新编入索引
每小时一次。sp_updatestats
答案 2 :(得分:0)
您可以在存储过程定义中使用WITH RECOMPILE
以避免“查询超时或SQL服务器无响应”错误
这是微软的文章:
http://technet.microsoft.com/en-us/library/ms190439.aspx
另见以供参考:
SQL Server: Effects of using 'WITH RECOMPILE' in proc definition?
示例代码:
CREATE PROCEDURE [dbo].[sp_mystoredproc] (@param1 varchar(20) ,@param2 int)
WITH RECOMPILE
AS
... proc code ...
答案 3 :(得分:0)
所以,我在这里和那里尝试了一些东西,并且能够找出根本原因 -
SQL存储过程正在连接来自2个不同数据库的2个表 - 其中一个具有不同数量的记录 - 这些记录由不同的(第三方)作业更新/插入。由于第三方作业的时间和我的工作不一样 - 由于表锁没有出现问题,但是当我的超时时间不足时,大量的记录导致我的作业超时。
但是,正如我所说,我已经给出了3600秒的业务标准命令超时 - 不知何故,Enterprise Library用自己的默认命令超时30秒覆盖了我的自定义超时 - 因此C#代码部分甚至会抛出异常在存储过程完成执行之前。
我做了什么 - 这可能对我们中的一些人有帮助 -
现在它似乎即使有不同数量的记录也能正常工作。