sql >> データベース >  >> RDS >> Sqlserver

SQLServerの宛先とOLEDBの宛先

    この回答では、SSISの公式ドキュメントから情報を提供しようとします。また、SQLServerの宛先に関する個人的な経験についても触れます。

    1。 SQLServerの宛先

    公式のSQLServerDestinationドキュメントによると:

    SQL Serverの宛先は、ローカルのSQL Serverデータベースに接続し、SQLServerのテーブルとビューにデータを一括ロードします。リモートサーバー上のSQLServerデータベースにアクセスするパッケージでSQLServerの宛先を使用することはできません。代わりに、パッケージはOLEDB宛先を使用する必要があります。

    SQL Serverの宛先は、一括挿入タスクが提供するのと同じSQLServerへのデータの高速挿入を提供します。ただし、SQL Serverの宛先を使用することにより、パッケージは、データがSQLServerに読み込まれる前に列データに変換を適用できます。

    SQL Serverにデータを読み込むには、OLEDBの宛先ではなくSQLServerの宛先を使用することを検討する必要があります

    2。 OLEDB宛先

    OLEDB Destinationの公式ドキュメントによると:

    OLEDB宛先-高速読み込みオプション:データをOL​​E DB宛先のテーブルまたはビューに読み込み、一括挿入用に最適化された高速読み込みオプションを使用します

    3。 OLEDB宛先とSQLServer宛先

    SQLServerの宛先とOLEDBの宛先によると-MSDNトピック:

    IntegrationServicesの元グループプログラムマネージャーであるDonaldFarmerは、SQL Server Destinationを使用するとパフォーマンスを5〜10%向上できると述べています。 。

    さらに、Microsoftのデータ統合スペシャリストであるMatt Massonの次の投稿を参照して、次の質問に答えました。

    SQL Serverの宛先を使用する必要がありますか?

    答えは

    でした

    いいえ

    ...

    あらゆるパフォーマンスが必要な場合(10時間の負荷でパフォーマンスが10%向上する可能性があります)、SQLServerの宛先を試してどのように機能するかを確認することをお勧めします。ただし、SQLServerの宛先には次の制限があることに注意してください。

    • 宛先データベースと同じマシンでSSISを実行する必要があります
    • パッケージは管理者として実行する必要があります
    • 問題が発生したときにデバッグするのは非常に困難です

    これらの制限があるため、OLEDB変換先を使用することをお勧めします SQLServerの宛先でパフォーマンスが向上している場合でも。

    3.1。データ読み込みパフォーマンスガイド

    (更新@ 2019-03-25)

    SSISのベストプラクティスを検索しているときに、参照として使用できる非常に役立つMicrosoftアーティクルを見つけました:

    • データ読み込みパフォーマンスガイド

    この記事では、SQL Serverの宛先とOLEDBの宛先を含むすべてのデータ読み込み方法を比較し、次のように述べています。

    SQLServerの宛先 SQL Serverの宛先は、IntegrationServicesのデータフローからSQLServerにデータを一括ロードするための最速の方法です。この宛先は、ROWS_PER_BATCHを除くSQLServerのすべての一括読み込みオプションをサポートします。

    この宛先には、SQLServerへの共有メモリ接続が必要であることに注意してください。つまり、IntegrationServicesがSQLServerと同じ物理コンピューターで実行されている場合にのみ使用できます。

    OLE DB宛先: OLE DB変換先は、SQLServerのすべての一括読み込みオプションをサポートしています。ただし、順序付けられたバルクロードをサポートするには、いくつかの追加構成が必要です。詳細については、「ソートされた入力データ」を参照してください。バルクAPIを使用するには、この宛先を「高速ロード」用に構成する必要があります。

    OLE DB変換先は、SQLServerへのTCP/IP接続と名前付きパイプ接続の両方を使用できます。これは、SQL Serverの宛先とは異なり、OLEDBの宛先をバルクロードターゲット以外のコンピューターで実行できることを意味します。 OLEDB変換先を使用するIntegrationServicesパッケージは、SQL Serverコンピューター自体で実行する必要がないため、主力サーバーを使用してETLフローをスケールアウトできます。

    3.2。個人的な経験

    (更新@ 2019-03-25)

    この質問は多くの人が参照として使用しているため、このドメインでの経験を積んだ後、このセクションを追加して、SQLServerの宛先を使用した個人的な経験について説明しました。

    公式ドキュメントにはSQLServerの宛先によってパフォーマンスが向上すると記載されていますが、多くの理由から、このコンポーネントの使用はまったくお勧めしません。

    1. 宛先サーバーとETLサーバーが同じである必要があります(ローカルSQLサーバーでのみ機能します)
    2. 意味のない例外を常にスローします
    3. 大量のデータでテストした後、OLEDB宛先とのパフォーマンスの違いはごくわずかです(チャンクで読み込まれた約500 GBのデータでテストされ、時間差は1分未満です)

    次の投稿を参照することもできます(@ billinkcから) このトピックに関する詳細情報を入手するには:

    • SSISパッケージとSQLデータベースは同じサーバー上にある必要がありますか?

    4。結論

    Microsoftの記事に基づくと、SQL Server Destinationと言えます。 データ挿入のパフォーマンスを向上させる(BULK挿入を使用) 、ただし、ローカルSQLサーバーである特定のケース向けに設計されています。 OLEDB Destination より一般的で、他の場合やFast Loadを使用することをお勧めします データアクセスモード(BULK挿入も使用) OLEDB Destination データロードのパフォーマンスが向上します。

    一方、私の経験とSSISの専門家によって書かれた多くの記事に基づくと、SQLServerの宛先を使用することはまったくお勧めしません 安定しておらず、例外が発生することが多く、パフォーマンスはごくわずかであると見なすことができるためです。

    追加情報

    最近、このトピックに関する詳細な記事を公開しました。次のURLで確認できます:

    • SSISOLEDBの宛先とSQLServerの宛先


    1. MySQLとMariaDBでテーブルを一覧表示する方法

    2. MySQLのIFEXISTSの使用

    3. ダイレクトNFSでのORA-4031エラー

    4. 更新されたAzureSQLデータベース層オプション