存储过程的并发执行

时间:2017-05-24 01:43:01

标签: sql-server performance stored-procedures

我必须通过一些处理从一个数据库加载30亿行到另一个数据库。我有一个存储过程来处理并将数据加载到目标中。

为了加快进程,我在源表中使用主键列值作为存储过程的参数。

在diff会话中运行存储过程时,它没有按预期执行。

请告诉我如何通过不同会话中的并发执行来提高性能。

EX:如果我是来自1 to 300000的ID,我将parameters作为1 to 1000,1000传递给2000,2000 to 3000 .....到存储过程。< / p>

exec sp1 1,1000----session1
exec sp1 1000,2000----session2
exec sp1 2000,3000---session3
......
...

如果我只运行一个流程,它就会快速完成。但是,如果我运行多个进程,则会耗费更多时间。

1 个答案:

答案 0 :(得分:0)

这不是解决方案,而是一些建议:

  1. 使用批处理将数据从一个表移动到另一个表是正确的。许多小批量交易都比大笔交易更好
  2. 不要并行执行。我确定,您的代码会阻止源表或目标表。我的经验表明不要同时做到这一点。编写一个循环,逐个获取批次,然后移动数据
  3. 测试批量大小。通常,100万行中的批次优于1000行中的1000批次。
  4. 是的,可能需要很长时间。也许,您需要添加一些代码,允许用户在转移过程中工作。隐藏视图后面的数据,例如