目次

Search

  1. はじめに
  2. パフォーマンスのチューニングの概要
  3. ターゲットの最適化
  4. ソースの最適化
  5. トランスフォーメーションの最適化
  6. マッピングの最適化
  7. パーティション化したマッピングの最適化
  8. 実行時の最適化
  9. SQLデータサービスの最適化
  10. Webサービスの最適化
  11. 接続の最適化

パフォーマンスのチューニングの概要

パフォーマンスのチューニングの概要

式の最適化

式の最適化

トランスフォーメーションで使用される一部の式によってパフォーマンスが低下することがあります。
式に関するボトルネックを減らすには、以下の方法を検討します。
パフォーマンスを低下させている式を切り離す。
一部の式によってマッピングのパフォーマンスが低下することがあります。 パフォーマンスを低下させている式を切り離すには、マッピングからそれらの式を1度に1つずつ削除してマッピングを実行し、式がない場合のマッピングの実行所要時間を調べます。 マッピングの実行時間が著しく異なる場合は、パフォーマンスを低下させている式を最適化する方法を探します。
式のパフォーマンスを評価する次のステップを実行します。
  1. 元の式を使用してマッピングの時間を計測します。
  2. マッピングをコピーし、複雑な式の半分を定数に置き換えます。
  3. 編集したマッピングを実行して時間を計測します。
  4. マッピングのコピーをもう1つ作成し、複雑な式の残りの半分を定数で置き換えます。
  5. 編集したマッピングを実行して時間を計測します。
共通のロジックを減らす。
マッピングによって複数の箇所で同じ処理が実行される場合、その処理をマッピングの初期段階に移すことによって、マッピングによる処理の実行回数を減らします。たとえば、マッピングに5つのターゲットテーブルがある場合を検討しましょう。各ターゲットには、社会保障番号のルックアップが必要です。この場合、ルックアップを5回実行する代わりに、データフローが分かれる前のマッピングにLookupトランスフォーメーションを配置します。次に、ルックアップの結果を5つのターゲットすべてに渡します。
集計関数の呼び出しを最小限にする。
式を記述するときには、集計関数の呼び出しをできる限り少なくします。集計関数が呼び出されるたびに、Data Integration Serviceではデータの検索とグループ化を行う必要が生じます。 例えば、次の式では、Data Integration Serviceは最初にCOLUMN_Aを読み込んでその合計を求めます。次に、COLUMN_Bを読み込んでその合計を求め、最後に2つの合計の和を求めます。
SUM(COLUMN_A) + SUM(COLUMN_B)
次の例のように集計関数の呼び出しを減らした場合、Data Integration ServiceはCOLUMN_AをCOLUMN_Bに足した後でその合計を求めます。
SUM(COLUMN_A + COLUMN_B)
共通の式をローカル変数で置き換える。
1つのトランスフォーメーションにおいて同じ式が複数回使用されている場合は、その部分式をローカル変数にすることができます。ローカル変数はトランスフォーメーション内でのみ使用できます。ただし、変数の計算は一度で済むので、パフォーマンスを向上させることができます。
数値演算と文字列演算のどちらを使用するかを選択する。
Data Integration Serviceでは、数値演算の方が文字列演算よりも高速に処理されます。 例えば、2つの列(EMPLOYEE_NAMEとEMPLOYEE_ID)で大量のデータを検索する場合、EMPLOYEE_IDにルックアップを設定することでパフォーマンスが改善されます。
CHAR対CHARおよびCHAR対VARCHARの比較を最適化する。
Data Integration ServiceがCHAR列とVARCHAR列の比較を行う場合、行の末尾に空白が検出されるたびに処理速度が低下します。 Informatica AdministratorでData Integration Serviceを設定する場合に、TreatCHARasCHARonReadオプションを使用すると、Data Integration ServiceはChar型ソースフィールドの末尾の空白を削除しません。
DECODEとLOOKUPのどちらを使用するかを選択する。
LOOKUP関数を使用すると、Data Integration Serviceではデータベース内のテーブルを検索する必要が生じます。 DECODE関数を使用するとルックアップ値が式自体に取り込まれ、Data Integration Serviceが個々のテーブルを検索する必要がなくなります。 したがって、ルックアップする値が変化せず、その数も少ない場合は、DECODEを使用するとパフォーマンスが向上します。
関数の代わりに演算子を使用する。
Data Integration Serviceでは、関数を使用して書かれた式よりも、演算子を使用して書かれた式の方が高速に読み込まれます。 したがって、できるだけ演算子を使用して式を記述してください。たとえば、CONCAT関数をネストした次のような式があるとします。
CONCAT( CONCAT( CUSTOMERS.FIRST_NAME, ‘ ’) CUSTOMERS.LAST_NAME)
||演算子を使用すると、上記の式を次のように表すことができます。
CUSTOMERS.FIRST_NAME || ‘ ’ || CUSTOMERS.LAST_NAME
IIF関数を最適化する。
IIF関数では、値およびアクションを返すことができるため、式をより簡潔にできます。たとえば、FLG_A、FLG_B、FLG_Cという3つのY/Nフラグを含むソースがあり、各フラグの値に基づく値を返したいとします。
次の式を使用します。
IIF( FLG_A = 'Y' and FLG_B = 'Y' AND FLG_C = 'Y', VAL_A + VAL_B + VAL_C, IIF( FLG_A = 'Y' and FLG_B = 'Y' AND FLG_C = 'N', VAL_A + VAL_B , IIF( FLG_A = 'Y' and FLG_B = 'N' AND FLG_C = 'Y', VAL_A + VAL_C, IIF( FLG_A = 'Y' and FLG_B = 'N' AND FLG_C = 'N', VAL_A , IIF( FLG_A = 'N' and FLG_B = 'Y' AND FLG_C = 'Y', VAL_B + VAL_C, IIF( FLG_A = 'N' and FLG_B = 'Y' AND FLG_C = 'N', VAL_B , IIF( FLG_A = 'N' and FLG_B = 'N' AND FLG_C = 'Y', VAL_C, IIF( FLG_A = 'N' and FLG_B = 'N' AND FLG_C = 'N', 0.0, ))))))))