我需要调用一个存储过程,对于SQL Server 2008数据库上的每个调用最多可能需要15分钟。
是否会对访问同一数据库/数据库服务器的其他系统造成性能影响?如果是这样,我怎样才能最大限度地降低对性能的影响呢?
更新:存储过程比较审计历史记录,它需要根据记录的类型调用另一个存储过程,因此必须逐行完成。我可以将光标更改为while循环,但是可以处理超过300万行(取决于过滤条件)。
答案 0 :(得分:2)
我通常可以通过使用带有需要处理的ID列表的连接来避免使用游标。您的游标查询通常可以用作WITH子句或内部联接,以选择要在进行处理的语句中处理的行。
但请先检查索引。这是查询速度慢的最不利原因。至少应该为where子句中的每一列和连接中的所有ON列编制索引。
答案 1 :(得分:0)
当proc处于活动状态时,查看服务器上的CPU活动。如果您知道如何使用PerfMon,您也可以查看一些SQL Server计数器。
我想说15分钟的查询可能是优化的候选者。确保您拥有所有必要的索引并避免使用游标。
答案 2 :(得分:0)
选项1.按原样运行,但这很可能会导致性能问题。
选项2.如果可能,返工查询以提高性能。当然,除非您的SQL写得不好或者您只是处理大量数据,否则它不能花费15分钟。 也许发布SQL ??
选项3.正如您所提到的,您可以在.NET中完成工作。
答案 3 :(得分:0)
我们的服务器存在类似问题。我的经验是SQL服务器是资源密集型应用程序,如果你有这样的sp,它将对服务器的性能产生巨大影响。
您可以检查以下几项以提高sp性能或减少使用资源的事项:
1,运行查询分析器检查是否缺少索引,如果有则添加它们。
2,如果你使用临时表,尽量不要使用它。 SQL Server用于每个数据库的Tempdb,如果你在sp中大量使用它,当它运行时,它将阻止其他使用临时表的查询。或者,您可以使用cte。
3,重做你的sp做小,也许你可以把它分成几个较小的可以并行运行。
4,这是有线的。如果将参数传递给sp,则在sp中将这些参数分配给局部变量,并在sp中使用这些变量,而不是参数。 SQL Server使用局部变量生成更好的执行计划。你会看到巨大的速度提升和。你不会相信它。
如果您可以发布sp,我很乐意帮助您加快速度