并行执行 SP(可能使用游标)

Pau*_*gle 5 parallelism sql-server-2008-r2 cursors

我们有一个在 SQL Server 2008 R2 上运行的第三方会计系统。要将发票插入这个会计系统,我们必须使用它附带的 API(它只是一组加密的 SP)。

我们的一些批处理需要插入大量(1,000 张)发票。所以,通常在 SQL 中你会写一个 INSERT 语句,它们会很快被插入。

但是,因为我们必须使用 SP 来插入行,所以我们目前有一个 C# 应用程序,它运行一个 PARALLEL FOR 循环并在每次迭代中调用一次 SP。

性能不是很好,虽然这很大程度上取决于 API SP 内部发生的事情,但我想知道 SQL Server 是否可以为我做些什么来提高性能。我知道我可以摆脱 C# 应用程序并在 T-SQL 中使用 CURSOR,但据我所知,这不会并行运行 - 对吗?

同样,我可以动态生成数千条 SQL 语句来调用具有不同参数的 SP,我想优化器可以看到加密的 SP 在做什么(当然比 C# 应用程序更好)并提出一个计划将尽可能多地并行运行它们。

Aar*_*and 4

你应该考虑表值参数和一个新的存储过程,它可以获取数千张发票并将它们作为一个集合进行处理,而不是您现在拥有的单例插入。要了解如何编写将所有发票作为一个集合进行处理的过程,需要掌握该过程现在对一张发票执行的操作的第一手知识。

我在这里写了一篇关于 TVP 的快速文章:

http://www.sqlperformance.com/2012/08/t-sql-queries/splitting-strings-now-with-less-t-sql

Erland 的文章也很有用:

http://sommarskog.se/arrays-in-sql-2008.html

  • 我同意这种方法,亚伦 - 但这是一个带有加密过程的供应商应用程序/数据库。如果保罗可以访问该应用程序,我会说这是理所当然的,但由于它是一个会计软件包,这是真正应该通过供应商进行的事情之一。 (2认同)
  • @Mike我错过了加密部分。不过,OP 可以将此建议返回给供应商。 (2认同)