2012-08-03 116 views
0

存在一个非常繁重的存储过程。它在迭代大约30个表的同时重新生成sql插入脚本,并在完成该过程后开始将这些脚本插入到名为X的表中。该过程大约需要20分钟,这是不可接受的。您必须知道的最后一件事是,通过在.NET上创建的webmethod调用该过程。使用不同的线程调用相同的存储过程?

PS:表具有索引。

这里是我的问题

  1. 我想使用多线程来解决这个问题。但不知道它是否会有所帮助?我将把sp分成5块,并同时从5个不同的线程中调用它。我想知道这会有助于减少处理开始和结束之间的时间间隔?
+0

是的,它会更快,如果它是可以做到实际工作的同时,将你为什么不尝试一下,看看自己或者显示的是与代码完成,你打算如何重构它在多线程环境中工作? – 2012-08-03 07:06:29

+0

我不太了解这个来回答你的问题,但也许有另一种方法来处理这个问题?为什么20分钟不可接受?哪部分过程对你至关重要?生成脚本(在20分钟内)并将它们存储在临时表中,然后在完成时使用现有表切换该表是否可行?也许还有其他类似的解决方法呢?如果你必须尽快完成这项工作,我想你只需要测试你提出的方法,并测量它的速度。 – Kjartan 2012-08-03 07:12:14

回答

2

这可能会起作用,因为将不会阻塞或等待存储过程的其他部分完成。显然,你仍然受到服务器物理资源的限制。说实话,你肯定会说的唯一方法就是去做并衡量表现。

我会确保您准确地分析存储过程的每个部分的依赖关系,然后再次执行以确保。

祝你好运。

0

您是否考虑过将大量插入到带索引的表中的性能问题。如果您还没有这样做,请尝试在没有索引的表上插入部分进程并测量任何收益。如果它证明是有益的,则编写索引并在插入后运行它。

线程可能会有帮助,但我的经验是,优化sql过程可能会带来更多好处。我会很乐意听到你的发现。

0

我也试图从多线程控制台应用程序调用相同的SP,我看不到我的SP并行运行。即使我使用线程多次调用它,它会在另一个之后执行1。我正在使用Sql server 2008(快速版),并且还配置了SQL Server 2008中的并行处理,但它并不是并行运行。任何想法或建议将不胜感激。

感谢 Venkat

相关问题