3

ビューの結果を 1 つのサーバー上のデータベースから新しいサーバー上の別のデータベース (両方とも SQL Server 2008 を実行) にコピーする場合、次のどの方法が最も効率的ですか?

1. OLE DB ソース/宛先を使用した SSIS データフロー タスク

エラーを無視し、デモンストレーション目的で設定するだけです

2.カスタムスクリプト

例えば

using (SqlConnection connection = new SqlConnection(sourceConnectionString))
using (SqlCommand command = new SqlCommand(sourceQuery, connection))
{
    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnectionString))
        {
            bulkCopy.DestinationTableName = destinationTable;
            //Any Column mapping required
            bulkCopy.WriteToServer(reader);
        }
    }
}

3. SSIS 一括挿入

これがカスタム スクリプトを使用する場合とどのように異なるかはわかりませんが、ストアド プロシージャではなくテーブル/ビューでのみ機能するという追加の柔軟性がありません。


さまざまなオプションで追加のレベルのロギングやエラー処理などを利用できるため、これは同様の比較にはあまり似ていないことを理解していますが、競技場を可能な限り均等にするためにロギングをまったく必要としないと仮定しましょう.

4

2 に答える 2

3

この SO Postによると、BULK INSERT は SqlBulkCopy よりも優れたパフォーマンスを発揮します。ただし、この投稿によると、DataFlow タスクは一括挿入 SSIS タスクよりも優先されます。

于 2012-07-09T16:53:44.010 に答える
3

これはあなたの質問に直接答えているわけではありませんが...

あなたの質問に対する簡単な答えは、おそらく、代表的なデータ セットを使用してさまざまなアプローチを試し、自分の目で確かめることです。これにより、SO の誰もが提供できるよりも環境にとって意味のある答えが得られるだけでなく、各オプションに関連する労力と問題を理解するための良い方法となります。

より長い答えは、フラット ファイル データしかロードできないため、SSIS 一括挿入タスクが最も遅い可能性が高いということです。これを使用するには、データをソース サーバーのファイルにエクスポートしてから、ターゲット サーバーに再ロードする必要があります。これは、サーバー間の WAN 接続が非常に遅い場合に役立ちます。これは、コピーする前にファイルを圧縮してデータ量を最小限に抑えることができるためです。そうしないと、作業が増えるだけです。

SSIS とSqlBulkCopy私は個人的な経験がないSqlBulkCopyので、明確な「勝者」がいない場合は、実装を維持するのが最も簡単で最も簡単なものを最初に使用し、可能な限り最速のソリューションを見つけることを心配しないことをお勧めします。実際に必要です。コードは、可能な限り高速ではなく、十分に高速に実行する必要があるだけであり、実際にパフォーマンスの問題があることはあなたの質問からは明らかではありません。

于 2012-07-09T20:34:53.617 に答える