ASP.NET页面上出现MS SQL超时错误,但在SSMS中没有。

4

当我们在ASP.NET页面上执行一个存储过程时,它会在SQL Server上超时并抛出异常Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.。但是当我在SSMS中执行同样的存储过程时,它返回得相对较快。SQL Server和IIS在同一台机器上。我在两个地方都使用相同的用户登录。其他页面都没有问题。

3个回答

2
可能是参数嗅探问题。 我的回答提供了一些查询,您可以使用这些查询来检索执行计划(SSMS和ASP.NET),以进行比较和对比。 编辑 实际上,这可能是一个更有用的查询。
Use YourDatabase;

SELECT *
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) 
cross APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
where sys.dm_exec_sql_text.OBJECTID=object_id('YourProcName') 
         and attribute='set_options'

我在执行计划中没有看到明显的差异。然而,现在我的存储过程在ASP.NET页面上可以工作了... 有什么想法吗? - Daniel A. White
@Daniel - 可能存储过程被重新编译了(这可能是由于各种原因引起的,例如如果对其定义运行ALTER或它所依赖的任何统计信息被更新)。如果没有,则可能根本不是参数嗅探问题。我想除非再次发生,否则您将无法确定。 - Martin Smith
感谢马丁让我知道这个奇怪的事情。 - Daniel A. White

1

1) ADO.Net 命令到 SQL Server 的默认超时时间为 30 秒。您可以在 SqlCommand 对象上将其更改为更高的值(或 0 禁用超时)。当运行查询时,SSMS 没有超时。

2) 但可能是查询超时,因为其他事情阻止它运行。在等待 asp.net 页面的响应时,您能否在 SQL Server 上运行 sp_who2 并检查 Blk 列 - 如果在同一行中具有与 SPID 不同的值的条目,则发生了某些阻塞。


-2

尝试增加CommandTimeout属性,看看是否解决了问题:

SqlCommand myCommand = new SqlCommand();
myCommand.CommandTimeout = 150;
myCommand.CommandType = CommandType.Text;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接