古いデータベースの機密データが暗号化されていないデータ変換を行っています。私たちは新しいデータベースとフロントエンドアプリケーションを構築しています。データを変換する際に、新しいデータベースに読み込まれるときに暗号化する必要がある2つの列があります。私は必要な3つの列(一意のIDと暗号化する必要がある2つの列)のステージングテーブル(OLE DB SQLデータベース接続)からシンプルな選択クエリを使用している、次に私はC#コードを含むスクリプトコンポーネントを持っているGACにあるカスタムDLLを参照してから行を処理し、IDを持つ別のステージングテーブル(OLE DB SQLデータベース)と暗号化された値を持つ2つの列にロードします。私は処理するために2.3Mの行を持っています、そして、私は、ターゲットのステージングテーブルのTABLE LOCKとCHECK CONSTRAINTS(実際にはありません)で高速ロードオプションを使用しています。しかし、このプロセスは14時間から24時間の間に完了します!ローディング時間のばらつきは2つの異なる環境からのものでした。私のPCは高速でしたが、もう1つはより多くのメモリを搭載した仮想サーバーからでした。とにかく、これらの時代のどれも良いことはありません。私はこれを大幅にスピードアップするために何かできるかどうかを見たいと思っていましたか?ここでスクリプトコンポーネントのカスタム暗号化DLLを使用したSSISデータフローVERY SLOW
C#のスクリプトは、スクリプトコンポーネント内にある:
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.ClaimNumberEncr = DAV.CMS.Core.Common.Crypto.EncryptFromStringAES (Row.ClaimNumber, "abc123defg").Entity;
Row.SSNEncr = DAV.CMS.Core.Common.Crypto.EncryptFromStringAES (Row.AlternateClaimantID, "abc123defg").Entity;
}
}
あなたはカスタム暗号化コードを書きましたが、あなたのパッケージは本当に長い時間がかかります。暗号化コードのようなものはおそらく犯人かもしれません。サーバー上の追加RAMは、一般的には良いことですが、暗号化は伝統的にCPUやGPUなどの集中的な処理であるため、効果がありません。影響を受けるかどうかを確認するには、VMに公開されているCPUの数をダイヤルアップする必要があります。 – billinkc
ステップ1.ベースラインを確立します。スクリプトタスクを削除するか、これらの2つの列で_IsNullプロパティをtrueに設定し、パッケージを実行します(Visual Studio内のデバッガの外側)。これが理論上の最大スループットです。 11時間だと、あなたの問題は他の場所にあります。ステップ2、今度は 'SELECT TOP 10 PERCENT *'を実行してください。そうすれば、合理的なデータセットが得られます。その時を記録する。ステップ3では、いずれかの列の暗号化を有効にします。その時を記録する。ステップ4、両方の列の暗号化を有効にする。 – billinkc
最後に、データフローに含まれているデータ型を確認します。ソースでLOB値(text/image/n/varchar(max)/ varbinary(max))を使用している場合、または暗号化された出力列をそれらのものとして定義している場合は、 SSISで – billinkc