长时间运行存储过程对性能的影响



我需要调用一个存储过程,每次调用SQL Server 2008数据库可能需要15分钟。

是否会对访问同一数据库/数据库服务器的其他系统造成性能影响?如果是,我怎样才能把对性能的影响降到最低?

Update:存储过程比较审计历史记录,它需要根据记录的类型调用另一个存储过程,因此必须逐行执行。我可以将游标更改为while循环,但是可能有超过300万行需要处理(取决于过滤条件)。

我通常可以通过使用需要处理的id列表的连接来避免使用游标。游标查询通常可以用作WITH子句或内部连接,以在执行处理的语句中选择要处理的行。

但是一定要先检查索引。这是导致查询缓慢的最有害的原因。至少where子句中的每一列和join中的所有ON列都应该被索引

查看进程处于活动状态时服务器上的CPU活动情况。如果你知道如何使用PerfMon,你也可以看看一些SQL Server计数器。

我想说一个15分钟的查询可能是一个优化的候选。确保您有所有必要的索引,并避免使用光标。

选项1。按原样运行,但这很可能导致性能问题。

选项2。如果可能的话,返工查询以提高性能。当然,它不可能花15分钟,除非你的SQL写得很糟糕,或者你只是在处理大量的数据。也许发布SQL??

3

选项。正如你所提到的,你可以在。net中完成这项工作。

我们的服务器也有类似的问题。我的经验是SQL server是一个相当资源密集型的应用程序,如果你有这样一个sp,它将对服务器的性能产生巨大的影响。

您可以检查以下几点来提高sp的性能,或者使用更少的资源:

1、运行查询分析器检查是否缺少索引,如果有则添加。

2,如果您使用临时表,尽量不要使用它。Tempdb被SQL server用于每个数据库,如果你在sp中使用它很多,当它运行时,它会阻塞其他使用temp表的查询。或者,您可以使用cte.

3,重做sp,使其更小,也许你可以把它分成几个更小的,可以并行运行

4,这是一个有线的。如果将参数传递给sp,在sp中,将这些参数赋值给局部变量,并在sp中使用这些变量,而不是参数。SQL server使用本地变量生成更好的执行计划。你会看到巨大的速度提高和。你不会相信的。

如果你可以张贴sp,我很乐意帮助你做得更快

最新更新