我有一个执行长时间运行过程的程序。循环遍历数千条记录,一次一个,并在每次迭代时调用存储过程。运行这样的程序的两个实例,其中一个处理一半记录而另一个处理另一半加速处理?
以下是方案:
方案2或3的运行速度是1的两倍吗? 2和3之间会有区别吗?主要的瓶颈是存储过程调用大约需要半秒钟。
谢谢!
答案 0 :(得分:4)
这取决于很多因素。另请注意,线程可能比进程更合适。或者可能不是。再说一遍:这取决于。但是:这是CPU工作的吗?网络绑定?或者受数据库服务器的限制?添加并发性有助于CPU绑定,以及与多个独立资源进行通信时。在相同的网络连接或相同的数据库服务器上进行战斗不太可能改善事情 - 并且可能会使事情变得更糟。
坦率地说,从它的声音来看,你最好的选择可能是重新开始分组工作(而不是个人记录)。
要正确回答这个问题,您需要知道当前我们的数据库服务器的资源利用率:是否需要额外负载?或者更简单 - 只需尝试并查看。
答案 1 :(得分:1)
这实际上取决于存储过程正在做什么。如果存储过程将要更新记录,并且您有一个数据库实例,则在写回数据时会发生争用。
这里的值是:
一个解决方案(这绝不是一个完美的解决方案,不知道确切的要求),是: