4

SSIS 2005 内で、インポート/エクスポート ウィザードを使用して、運用サーバーと開発マシンの間で一部のテーブルのデータを削除/再作成し、置き換えるパッケージを作成しました。ウィザードによって作成された制御フローは非常に複雑だったので、新しいパッケージを作成し、ウィザードが作成したクレイジーなものとは対照的に、構成とセットアップが非常に簡単な「Transfer SQL Server Objects Task」を使用しました。問題は、作成したパッケージの実行に 3 分以上かかるのに対し、ウィザード バージョンでは約 20 秒かかることです。それらは基本的に同じことを行っています。なぜ実行時間にこのような違いがあるのでしょうか。また、オブジェクトの転送タスクを使用しているパッケージで変更して実行を高速化できる設定はありますか?

ウィザードが作成したパッケージは次のとおりです。ウィザードを使用する前に、編集に問題のない同様のパッケージを作成しましたが、このようなものはこれまで見たことがありません。ドロップして作成したテーブルとスキーマを変更する場所がわかりません。代替テキスト http://www.freeimagehosting.net/uploads/f7323b2ce3.png

for ループ コンテナー内の転送タスクのプロパティは次のとおりです。

代替テキスト http://www.freeimagehosting.net/uploads/6f0dfc8269.png

4

6 に答える 6

1

ウィザードは使用しませんが、実際に作業を行うストアドプロシージャを作成できたでしょうか。ストアドプロシージャはデータベース内のすべての作業を実行できるため、これはどのように高速化されているかを説明します。

TransferTaskすべての作業が行われる場所のように見えるので、中に何があるのか​​興味があります。

データをフラットファイルにエクスポートしてから、一括インポートを使用してこれをより高速に行うことを検討できます。

ここで物事がどれほど速く進むかについてのいくつかの考えについては、しかし最も重要なのは、彼がバルク挿入を間違って使用した方法など、与えられたコメントのいくつかです。

http://weblogs.sqlteam.com/mladenp/articles/10631.aspx

更新: これもご覧ください:http: //blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/title-12最後に、彼はテストにかかった時間を示していますが、最初のコメントインポートを高速化するために、最も役立つ部分かもしれません。

于 2009-11-05T01:28:53.193 に答える
1

ウィザードで生成されたパッケージを使用して、それが何をするのかを理解してみませんか?それは明らかに物事を非常に効率的に行っています。

于 2009-11-04T21:49:31.500 に答える
1

かなりの数になる可能性があります。ルックアップを行っていますか?その場合は、代わりに結合を使用してください。db プロファイルを実行して、クレイジー パッケージがカスタム パッケージに対して何をするかを確認することもできます。

于 2009-11-04T22:04:22.687 に答える
1

どの接続タイプを使用していますか?

ここで、Oracle と SQL の間で転送したいと考えていたところ、ADO.NET プロバイダーは Oracle OLE DB プロバイダーよりもはるかに遅くなりました。

于 2009-10-30T15:07:48.437 に答える
1

This class of performance problem usually stems from "commit" levels and logging.

The illustrated wizard generated task does a "start transaction" before entering the loop and commits after all the data is transferred. Which is the best thing to do if the table is not 'enormous'.

Have you left 'autocommit" on in your hand coded version?

于 2009-11-06T01:51:32.460 に答える
0
  • ロケール固有でない場合は、整数列と日付列のインポートで高速解析オプションを使用します
  • SQL Server Native Client 10.x OLE DB プロバイダーをインメモリの高パフォーマンス接続に使用するか、Attunity ドライバーまたは SQL Server <---> Oracle の使用を検討してください。
  • 上流のデータ フロー コンポーネントの出力の IsSorted プロパティを True に設定します。
  • OLE DB 宛先データ アクセス モード「テーブルまたはビュー - 高速読み込み」を選択します。
  • タスクを並行して実行しても、不要な優先順位の制約が追加されません
  • データ フロー タスクで select * を使用しない
  • ( [RunInOptimizedMode]プロパティ)。最適化モードでは、未使用の列、出力、およびコンポーネントをデータ フローから削除することにより、パフォーマンスが向上します。
  • 制約ボックスのチェックを外します
  • ネットワーク パケット サイズをデフォルトの 4k ではなく 32k に設定します。
  • 切り捨てられた/リロードされたテーブルのインデックスを削除し、削除を使用する場合は切り捨ての使用を検討してください *
  • テーブルがわずかに変化する場合は、Merge の使用を検討してください
  • ここにリストされている有名なもののような動的インデックス再構築 SP の使用を検討してください。
  • アプリケーション "ssis-%" でフィルター処理するように設定された SQL Server プロファイラーで UAT を使用して負荷テストを行います
  • デフォルトのバッファ サイズは 10 メガバイトで、最大バッファ サイズは 100 メガバイトです。
  • MDF/LDF と TempDB および最適化ディスクを分離
  • DMV を使用してデータベースのボトルネックを見つける
  • RAID 5 またはその他から RAID 10 または 0 に変更
于 2013-12-06T00:56:17.687 に答える