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

SSISを使用してETLパフォーマンスを改善するためのトップ10の方法

    抽出変換ロード(ETL)は、あらゆるデータウェアハウスのバックボーンです。データウェアハウスの世界では、データはETLプロセスによって管理されます。このプロセスは、データの抽出-ソースからのデータのプル/取得、変換-必要な形式のデータの変更、データウェアハウスへのデータの宛先へのロードプッシュの3つのプロセスで構成されます。データマート。

    SSISを学び、今すぐ無料トライアルを始めましょう!

    SQL Server Integration Services(SSIS)は、エンタープライズデータウェアハウスの開発と管理に役立つETLファミリのツールです。独自の特性によるデータウェアハウスは大量のデータを処理し、アーキテクトやDBAの大量のデータを管理する場合のパフォーマンスは大きな課題です。

    ETLの改善に関する考慮事項

    今日は、SSISを使用して、ETLパフォーマンスを向上させたり、高性能ETLシステムを設計したりするのがいかに簡単かについて説明します。理解を深めるために、10のメソッドを2つの異なるカテゴリに分けます。 1つ目は、SSISパッケージの設計時の考慮事項であり、2つ目は、SSISパッケージで使用可能なコンポーネントのさまざまなプロパティ値を構成することです。

    SSISパッケージの設計時の考慮事項

    #1データを並列に抽出する:SSISは、制御フローでシーケンスコンテナーを使用してデータを並列にプルする方法を提供します。依存しないテーブルまたはファイルからデータを並列にプルできるようにパッケージを設計できます。これにより、全体的なETL実行時間を短縮できます。

    #2必要なデータを抽出する:任意のテーブルまたはファイルから必要なデータセットのみをプルします。将来使用するために、現在ソースで利用可能なすべてのものをプルする傾向を回避する必要があります。ネットワーク帯域幅を消費し、システムリソース(I / OとCPU)を消費し、追加のストレージを必要とし、ETLシステムの全体的なパフォーマンスを低下させます。

    ETLシステムが本質的に動的であり、要件が頻繁に変更される場合は、すべてを一度に取り込むように設計するのではなく、メタデータ駆動型ETLなどの他の設計アプローチを検討することをお勧めします。

    #3非同期変換コンポーネントの使用を避ける:SSISは、ETL実行中に複雑なタスクを実行するための一連の変換コンポーネントを備えた豊富なツールですが、同時に、これらのコンポーネントが適切に使用されていない場合は多くの費用がかかります。

    >

    SSISでは、次の2つのカテゴリの変換コンポーネントを使用できます。同期 および非同期

    同期変換は、各行を処理して次のコンポーネント/宛先にプッシュダウンするコンポーネントです。割り当てられたバッファメモリを使用し、割り当てられたメモリに完全に適合する入力/出力データ行間の直接的な関係であるため、追加のメモリを必要としません。ルックアップ、派生列、データ変換などのコンポーネントは、このカテゴリに分類されます。

    非同期変換は、最初にデータをバッファメモリに格納し、次に並べ替えや集計などの操作を処理するコンポーネントです。タスクを完了するには追加のバッファメモリが必要です。バッファメモリが使用可能になるまで、データ全体をメモリに保持し、トランザクションをブロックします。これは、トランスフォーメーションのブロックとも呼ばれます。タスクを完了するために、SSISエンジン(データフローパイプラインエンジン)は追加のバッファメモリを割り当てます。これもETLシステムのオーバーヘッドです。並べ替え、集計、マージ、結合などのコンポーネントは、このカテゴリに分類されます。

    全体として、非同期変換は避ける必要がありますが、それでも、他に選択肢がない状況になった場合は、これらのコンポーネントの使用可能なプロパティ値を処理する方法を知っておく必要があります。これらについては、この記事の後半で説明します。

    #4イベントハンドラーでのイベントの最適な使用:パッケージの実行の進行状況を追跡したり、特定のイベントに対してその他の適切なアクションを実行したりするために、SSISは一連のイベントを提供します。イベントは非常に便利ですが、イベントを過剰に使用すると、ETLの実行に余分なオーバーヘッドが発生します。

    ここでは、SSISパッケージでイベントを有効にする前に、すべての特性を検証する必要があります。

    #5大量のデータを処理するときは、宛先テーブルのスキーマに注意する必要があります。ソースから大量のデータをプルしてデータウェアハウスまたはデータマートにプッシュする必要がある場合は、よく考える必要があります。挿入、更新、削除(DML)操作を組み合わせて巨大なデータを宛先にプッシュしようとすると、宛先テーブルにクラスター化インデックスまたは非クラスター化インデックスが含まれる可能性があるため、パフォーマンスの問題が発生する可能性があります。 DML操作のためにメモリ内で大量のデータがシャッフルされます。

    インデックスを持つテーブルに対する大量のDML操作が原因でETLにパフォーマンスの問題がある場合は、実行前フェーズで既存のクラスター化インデックスを削除してすべてのインデックスを再作成するなど、ETL設計に適切な変更を加える必要があります。実行後のフェーズで。状況に応じて、問題を解決するための他のより良い代替案を見つけることができます。

    コンポーネントのプロパティを構成する

    #6 MaxConcurrentExecutables を構成して、タスクの並列実行を制御します およびEngineThreads 財産。 SSISパッケージおよびデータフロータスクには、タスクの並列実行を制御するプロパティがあります: MaxConcurrentExecutables パッケージレベルのプロパティであり、デフォルト値は -1 です。 、これは、実行できるタスクの最大数が、マシン上のプロセッサの総数に2を加えたものに等しいことを意味します。


    パッケージ

    エンジンスレッド はデータフロータスクレベルのプロパティであり、デフォルト値は10です。これは、データフロータスクを実行するために作成できるスレッドの総数を指定します。


    データフロータスク

    ETLのニーズとリソースの可用性に応じて、これらのプロパティのデフォルト値を変更できます。

    #7OLEDB変換先でデータアクセスモードオプションを構成します。 SSISデータフロータスクでは、データアクセスモードで、データを宛先テーブルにプッシュするためのいくつかのオプションを提供するOLEDB宛先を見つけることができます。まず、「テーブルまたはビュー」オプション。一度に1行ずつ挿入します。次に、「テーブルまたはビューの高速ロード」オプション。これは、一括挿入ステートメントを内部的に使用してデータを宛先テーブルに送信します。これにより、他のオプションと比較して常にパフォーマンスが向上します。 「高速ロード」オプションを選択すると、IDの保持、nullの保持、テーブルロック、チェック制約など、データプッシュ操作中の宛先テーブルの動作をより詳細に管理できるようになります。


    OLEDB変換先エディター

    ETLのパフォーマンスを向上させるために、高速読み込みオプションを使用してデータを宛先テーブルにプッシュすることを強くお勧めします。

    #8、OLEDB変換先でバッチごとの行と最大挿入コミットサイズを構成します。これらの2つの設定は、tempdbとトランザクションログのパフォーマンスを制御するために重要です。これらのプロパティの指定されたデフォルト値を使用すると、1つのバッチと1つのトランザクションでデータが宛先テーブルにプッシュされるためです。 tembdbとトランザクションログを過度に使用する必要があります。これは、メモリとディスクストレージを過度に消費するため、ETLパフォーマンスの問題になります。


    OLEDB変換先エディター

    ETLのパフォーマンスを向上させるために、予想されるデータ量に基づいて両方のプロパティに正の整数値を設定できます。これは、大量のデータを複数のバッチに分割するのに役立ち、バッチ内のデータは、指定された値。 tempdbとトランザクションログの過度の使用を回避し、ETLのパフォーマンスを向上させるのに役立ちます。

    #9データフロータスクでのSQLServer宛先の使用。データをローカルのSQLServerデータベースにプッシュする場合は、SQL Server Destinationを使用することを強くお勧めします。これは、他のオプションの制限を克服する多くの利点を提供し、ETLのパフォーマンスを向上させるのに役立ちます。たとえば、SQL Serverに組み込まれている一括挿入機能を使用しますが、データを宛先テーブルにロードする前に変換を適用するオプションがあります。それとは別に、データの読み込み時に起動されるトリガーを有効/無効にするオプションがあり、ETLオーバーヘッドの削減にも役立ちます。


    SQLServer宛先データフローコンポーネント

    #10暗黙のタイプキャストは避けてください。データがフラットファイルからのものである場合、フラットファイル接続マネージャーはすべての列を数値列を含む文字列(DS_STR)データ型として扱います。ご存知のように、SSISはバッファメモリを使用してデータセット全体を格納し、データを宛先テーブルにプッシュする前に必要な変換を適用します。現在、すべての列が文字列データ型である場合、バッファ内により多くのスペースが必要になり、ETLのパフォーマンスが低下します。

    ETLのパフォーマンスを向上させるには、すべての数値列を適切なデータ型に変換し、暗黙的な変換を回避する必要があります。これにより、SSISエンジンが単一のバッファーでより多くの行に対応できるようになります。

    ETLパフォーマンスの改善の概要

    この記事では、ETLのパフォーマンスをいつでも簡単に制御できることを探りました。これらは、ETLのパフォーマンスを向上させるための10の一般的な方法です。さまざまなシナリオに基づいて、パフォーマンスを向上させる方法が他にもある可能性があります。

    全体として、分類の助けを借りて、状況を処理する方法を特定できます。データウェアハウスの設計段階にある場合は、両方のカテゴリに集中する必要があるかもしれませんが、レガシーシステムをサポートしている場合は、最初に2番目のカテゴリに密接に取り組んでください。


    1. SQLServerの論理演算子ではないもの-SQLServer/TSQLチュートリアルパート121

    2. Psql出力で結果セットの装飾を非表示にする方法

    3. @@SERVERNAMEを使用してSQLServerのローカルサーバー名を返します

    4. 高可用性のためにPerconaXtraDBCluster8をデプロイする方法