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