|
|
1
3
这是参数嗅探的足迹。是的,第一步是尝试重新编译,尽管它并不总是按照您在2005年希望的方式工作。 更新: 无论如何,我都会在INSERT上尝试语句级重新编译,因为这可能是一个统计问题(哦,是的,请检查是否启用了自动统计更新)。 如果这似乎不适合参数嗅探,那么比较实际的查询计划,从它正常工作到永远运行(如果无法获得实际的查询计划,请使用估计的计划,尽管实际的更好)。您正在查看计划是否更改。 |
|
|
2
3
我完全同意参数嗅探诊断。如果SP的输入参数在变化(或者即使没有变化),请确保使用局部变量将其屏蔽,并在SP中使用局部变量。
您也可以使用
在SQL Server 2008中,您可以使用
另外,如果您的流程涉及填充一个表,然后在另一个操作中使用该表,我建议将该流程拆分为单独的SP并分别调用它们
|
|
|
3
1
正如其他人所说,数据或源表统计信息的变化方式导致缓存的查询计划过时。
如果这仍然不是一个可接受的解决方案,那么最好的选择可能是尝试重构insert语句。
你不说你是否在使用
我见过所有这些方法在类似场景中解决性能问题;测试将揭示你所拥有的数据中哪一个能给出最好的结果。 |
|
|
4
0
|
|
|
5
0
我同意上面在评论中给出的答案,这听起来像是一个未关闭的事务,特别是当您仍然能够从查询分析器运行select语句时。 听起来很像是有一个打开的事务,表_y有一个挂起的删除,此时无法插入。 SP锁定时,是否可以执行表y的插入? |
|
6
0
你有索引维护工作吗? 你的统计数据是最新的吗?一种方法是检查估计的和实际的查询计划是否存在较大的差异。 |
|
|
7
0
正如其他人所说,这听起来很可能是一个未提交的交易。 我最好的猜测是:
如果有其他存储过程或外部代码段在此表上保存事务,您可能会一直等待。(他们可能会出错,永远不会结束交易) 另一个注意事项:如果可能,尝试使用truncate。它使用的资源少于不带where子句的delete:
第一个错误将为您提供有关实际错误的信息。看到它挂在您自己的后续测试中只是一个次要影响。 |
|
8
0
如果您正在执行以下步骤:
你可能想试试这个
|
|
|
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 2 年前 |
|
|
Nick Fleetwood · 调度语法的LINQ查询 3 年前 |
|
|
Mateen Bagheri · 选择表的计数并选择其自身 3 年前 |
|
Java · 使用交叉应用同时显示两列 4 年前 |