理論目的のためにのみ構築されたデータ転送状況のツール。これは、SQLサーバー(2000以上)および/またはOracle(10G以降)インスタンスから大量のデータを別のインスタンス(SQL> SQL> Oracle、Oracle> SQL、Oracle> Oracle)に転送するのに役立ちます。
SQL Serverおよび/またはOracleテーブルをあるインスタンスから別のインスタンスにコピーするのが通常です。
通常、SSMSインポート/エクスポートウィザード、統合サービスパッケージ、またはテキストファイルとしてデータを転送する方法を使用することにした可能性があります。
しかし、3億回以上の記録または30GB以上のテーブルについて話している場合は、最低時間でコピーする必要がある場合は問題が発生する可能性があります。
運が良ければ、このテーブルには、SQL Serverにクラスター化されたインデックスまたはOracleに周波数ヒストグラムがあるインデックスがある場合があります。それが、この小さなプロジェクトが役割を果たすシナリオです。
ソーステーブルにクラスター化されたインデックスがない場合、いくつかの希望があり、OracleとSQLサーバーの両方でヒープテーブルからデータをコピーするために、新しい方法(クラスター化されたものよりも少し遅い)を実装しました。
そのロジックは非常に単純です。SQLサーバーのクラスター化されたインデックス統計、またはOracleのヒストグラムをスキャンし、バランスの取れたデータのクラスターを定義します。
つまり、スレッドがパラメーター化されたように多くのクエリを作成し、それらのクエリがクラスター化されたインデックスフィールドでフィルタリングして、それぞれ同じ量のデータを取得します。次に、ODP.NETメソッドからSQLBulkCopy .NET FWまたはOracleBulkCopyを使用してそれらを発射します。ヒープとして、決定機能とモジュール(SQL Serverの%% Lockres %%およびOracleのRowID)を備えたテーブルを「パーティション」し、1つのスレッドで各クエリを起動します。
スレッドの量に応じて、非常にリソース集中的なプロセスであり、場合によってはCPUの消費が最大100%上昇し、ディスクキューの長さが長い待機を引き起こす可能性があることをアドバイスする必要があります。
このため、データソースと宛先以外の異なるサーバーで実行することをお勧めします。
したがって、各サーバーに2つの100MBITネットワークカードを備えた2つのネットワークの構造により、190MB/SEG転送速度を達成しました。
生産環境で使用することを検討する前に、統計目的でテストする必要があります。
追加のメモ:パフォーマンスゲインは特定の回避策の下で達成されますが、クラスター化された列内のデータの性質により、パフォーマンスのゲインが実現されます。まず第一に、クラスター化されたインデックスが複合インデックスの最初の列の統計情報のみを保存することを明確にする必要があるため、クラスター化されたインデックスが適切に設計されることがより重要になりました。私たちは、最も粒度が少ないものから、フィールドを順序付けする先端に従う方が良いことを意味します。遭遇する可能性のある別の問題は、ヌルデータの量です。統計は非ヌルデータについて話します。したがって、テーブルにNULLデータの80%がある場合、マルチスレッドのマルチスレッドはすべて利益を得ません。当然のことながら、宛先テーブルにはインデックスがなく(複数のバルク挿入スレッドを許可するため)、パーティションがなく、挿入プロセスをスピードアップするために圧縮されていないこともお勧めします。
このDLLは、SSISプラットフォーム上に依存していない、または構築されていない他のETLプロジェクトに入っている可能性があります。