web-dev-qa-db-ja.com

SPの並列実行(おそらくカーソルを使用)

SQL Server 2008 R2で実行されるサードパーティの会計システムがあります。この会計システムに請求書を挿入するには、付属のAPI(これは暗号化されたSPのセットにすぎません)を使用する必要があります。

一部のバッチプロセスでは、大量(1,000)の請求書を挿入する必要があります。したがって、通常はSQLでINSERTステートメントを作成すると、非常にすばやく挿入されます。

ただし、SPを使用して行を挿入する必要があるため、現在PARALLEL FORループを実行してSPを呼び出すC#アプリケーションがあります。反復ごとに1回。

パフォーマンスは素晴らしいものではありませんが、その多くはAPI SP内で何が起こるかにかかっていますが、パフォーマンスを向上させるためにSQL Serverで何かできることはあるのでしょうか。 C#アプリを削除してT-SQLでCURSORを使用できることはわかっていますが、私の知る限り、これは並列実行されません-正しいですか?

同様に、数千のSQLステートメントを動的に生成してSPを異なるパラメーターで呼び出すことができます。また、オプティマイザが暗号化されたものを見ることができると考えたいですSP =は実行中で(確かにC#アプリよりも優れています)、できるだけ多くの並列処理でそれらをすべて実行する計画を考え出します。

5
Paul Spangle

Table-Valued Parameters と、数千の請求書を取得して、現在のシングルトンインサートではなくセットとして処理できる新しいストアドプロシージャを検討する必要があります。すべての請求書を1つのセットとして処理する手順の記述方法を理解するには、手順が単一の請求書で今どのように行われるかを直接知る必要があります。

TVPに関する簡単な記事をここに書きました:

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

そしてアーランドの記事も役に立ちます:

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

4
Aaron Bertrand