SQL我第一次服务器存储过程超时运行

SQL Server stored procedure timeout the first time I run it

我正在 SQL Server 2008 R2 Express 上测试存储过程。最终它将 运行 在 SQL Server 2008 R2 的完整版本上投入生产。

在 Management Studio 中测试存储过程 我注意到我第一次 运行 它是在恢复数据库或重新启动 SQL 服务器服务后,该过程大约需要 35 秒才能完成运行。第二次以后一眨眼就完成了。

由此我假设查询计划需要一段时间才能创建。这些症状似乎与导致重新创建查询计划的原因相符。

我的问题是,当我从我的 C# 应用程序执行此存储过程时,如果它超过 30 秒就会超时。我想我已经找到了增加超时时间的方法,但从我读过的所有帖子中,人们都说在除特殊情况外的所有情况下,30 秒应该是一大堆时间。 "Fix the problem not increase the timeout"。

由于此存储过程每月只会 运行 一次,因此很有可能每次使用时都会创建一个新的查询计划。

None 我的其他存储过程有这个问题。

关于诊断真正问题的最佳方法有什么想法吗?

该过程并不十分复杂,它从几个连接的 table 中读取并根据一些条件将大约 4000 行插入到另一个 table 中。 我不是世界上最好的 SQLer,所以也许我做了一些愚蠢的事情。

我真的无法向数据库或任何其他内容添加索引,因为它属于外部公司编写的业务应用程序。所以我非常谨慎地进行任何更改,因为它可能会导致其他不可预见的问题。

如果您认为值得在这里发布我的 sql 代码,请告诉我。

谢谢 大卫

看来我回答了我自己的问题。 我单击了 Management Studio 中的 "Display Estimated Query Plan" 小按钮,查看了查询计划。用漂亮的大写字母建议我将索引添加到 table 并为我提供创建它所需的索引名称的确切代码。我看了一下 table,它有超过 300 万行。用今天的术语来说不是很多,但如果您在尝试创建查询计划时必须从头到尾地阅读它,这显然是一个问题。

无论如何,我再次创建了索引和 运行 我的应用程序,但我无法重现问题。每次都运行像一颗子弹。

我想我只需要考虑我添加索引的后果。 首先是给它起一个外部公司永远不可能复制的名字。 :)

感谢所有花时间阅读我的 post 的人,我希望这个答案对其他人有所帮助。

大卫