sql - 为什么有些连接需要很长时间,而其他连接很快?

标签 sql sql-server-2008 ado.net timeout

我有一个连接到 SQL Server 2008 实例的网页,试图按顺序执行两个存储过程。第一个成功完成,然后第一个的值传递给第二个。此查询在大约 110 秒后超时。

如果我使用 SQLDbx 打开到 sql 实例的连接,并执行存储过程,它会完成,但需要 108 秒(可疑地接近 ADO 版本的 110)。

但是,如果我打开与 SQL Server 管理控制台 (2008) 的连接并执行存储过程,查询将在大约 4 秒内返回 2 行数据。

我怀疑某种驱动程序问题,但我完全不确定去哪里查看。我希望某种配置修改(在服务器或 ADO 客户端上)可以解决这个问题,但到目前为止,我通过谷歌搜索答案没有找到任何有用的提示。

所以我转向你。

有什么想法吗?

最佳答案

ADO 在 stored procedures 上有问题:

Query Analyser works with ARITHABORT set to ON and ADO.Net runs with ARITHABORT set to OFF. This causes 2 query plans in the procedure cache. Depending on the parameters in the query these plans can be different, and therefore giving very different query performance.
...
So when you get this problem its best to use the WITH RECOMPILE hint to compile the execution plan every time you run the procedure.

试试这样的:
EXEC sp_MyTable1 'Parameter1', 'Parameter2' WITH RECOMPILE
并查看查询在 ADO 中是​​否运行得更好。

关于sql - 为什么有些连接需要很长时间,而其他连接很快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098776/

相关文章:

.net - 有没有办法在参数替换后从 SqlCommand 获取完整的 sql 文本?

c# - 如何给 ADO.NET 参数

sql - 存储过程对比意见

mysql - 插入重复键更新当前时间戳

java - 如何使用java中的语句删除sql表?

sql-server - Sql Server 性能和字段顺序

sql - 如何将来自不同列的多个列组合到一个表或 View 中?

sql - 在批量数据上执行时,使用ALTER提高列的精度是否会影响数据库性能?

c# - 如何使用ADO.NET/C#进行涉及多个表的参数化查询?

php - 安全地减少用户余额列。我应该使用乐观锁定吗?