SSISデータフローデータアクセスモード-「テーブルまたはビュー」と高速ロードのポイントは何ですか?


9

SQL Server Business Intelligence Development Studioを使用して、OLE DB宛先データフローへのフラットファイルを大量に実行して、SQL Serverテーブルにデータをインポートします。OLE DB宛先エディターの「データアクセスモード」では、デフォルトで「テーブルまたはビュー-高速ロード」ではなく「テーブルまたはビュー」になります。違いはなんですか; 認識できる唯一の違いは、高速のロードがデータをはるかに高速に転送することです。

回答:


13

OLE DB宛先コンポーネントのデータアクセスモードには、高速と非高速の2つの種類があります。

「テーブルまたはビュー-高速ロード」または「テーブルまたはビュー名変数-高速ロード」のいずれかが高速の場合、データはセットベースの方法でロードされます。

遅い-「テーブルまたはビュー」または「テーブルまたはビュー名変数」のいずれかにより、SSISがデータベースにシングルトン挿入ステートメントを発行します。10、100、場合によっては10000行をロードしている場合、2つのメソッド間でパフォーマンスの違いはほとんどありません。ただし、ある時点で、SQL Serverインスタンスをこれらの非常に小さな要求で飽和させることになります。さらに、トランザクションログの大部分を悪用します。

なぜ非高速なメソッドが必要なのですか?悪いデータ。10000行のデータを送信し、9999番目の行の日付が2015-02-29である場合、10,000個のアトミック挿入とコミット/ロールバックがあります。Fastメソッドを使用していた場合、1万行のバッチ全体がすべて保存されるか、どれも保存されません。エラーが発生した行を知りたい場合、最低レベルは10k行です。

現在、できるだけ多くのデータを可能な限り高速にロードし、ダーティデータを処理する方法があります。これはカスケード障害アプローチであり、次のようになります。

カスケード障害挿入

一度にできるだけ多くのサイズを挿入するのに適したサイズを見つけるという考えですが、不良データを取得した場合は、連続して小さいバッチでデータを再保存して、不良行に移動しようとします。ここでは、10000の最大挿入コミットサイズ(FastLoadMaxInsertCommit)から始めました。エラー行の処理で、からに変更しましRedirect RowFail Component

次の宛先は上記と同じですが、ここでは高速ロードを試み、100行のバッチで保存します。繰り返しますが、テストするか、妥当なサイズを思い付くように見せかけます。これにより、100行の100バッチが送信されることになります。これは、どこかで、テーブルの整合性制約に違反した行が少なくとも1つあるためです。

次に、3つ目のコンポーネントをミックスに追加します。今回は1つのバッチで保存します。または、同じ結果が得られるので、テーブルアクセスモードをFast Loadバージョンから変更することもできます。各行を個別に保存します。これにより、1つの不良行で「何か」を実行できるようになります。

最後に、フェイルセーフの宛先があります。目的の宛先と「同じ」テーブルである可能性がありますが、すべての列はとして宣言されていnvarchar(4000) NULLます。最終的にそのテーブルに到達するものは何でも調査してクリーンアップ/廃棄する必要があるか、または悪いデータ解決プロセスは何でも必要です。他の人はフラットファイルにダンプしますが、実際には、不良データの動作を追跡する方法に意味があります。


5

Fast Loadは、FAST LOADオプションで詳細に文書化されています

  • インポートしたデータファイルのID値を保持するか、SQL Serverによって割り当てられた一意の値を使用します。

  • バルクロード操作中にnull値を保持します。

  • 一括インポート操作中にターゲットテーブルまたはビューの制約を確認します。

  • 一括読み込み操作の間、テーブルレベルのロックを取得します。バッチの行数とコミットサイズを指定します。


違いはなんですか; 認識できる唯一の違いは、高速のロードがデータをはるかに高速に転送することです。

ボンネットの下では、table or view挿入する行ごとに個別のSQLコマンドを使用しますVS table or view - with fast loadBULK INSERTコマンドを使用します。

BULK INSERTで使用できる上記のオプションが表示された場合、例number of rows in the batch= = ROWS_PER_BATCHcommit size=BATCHSIZE

別のシナリオは..

デフォルトの最大挿入コミットサイズ(2147483647)が高すぎます。たとえば、500K行を挿入すると、PK違反のためにバッチが失敗します。このシナリオでは、FAST LOADオプションを使用すると、バッチ全体が失敗します。エラーの説明も取得できません。

これは、table or view宛先エラー出力として使用できる場所です。したがって、500Kのうち、5Kの挿入コミットサイズからFAST LOADを使用します。そのバッチの1行が失敗した場合、それらの5Kバッチをtable or viewロードにリダイレクトします。これは、行ごとの挿入を5K行にのみ使用し、エラーをtable or viewフラットファイルにリダイレクトすることもできます。 5Kの場合、障害の原因を特定できます。

上記の方法の利点は、どの行も失敗しない場合、バッチ全体にBULK INSERT(高速ロード)を使用することです。

SSIS愛好家のBillinkc は、Stackoverflowに関する同様の質問に回答しました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.