並列処理の性能調整

本付録では、並列処理を使用して [CI プロセス (tccri7203m000)] セッションを実行するときに必要な性能調整について説明します。

[CI プロセス (tccri7203m000)] の実際の処理速度は、利用可能な CPU 数、アプリケーションおよびデータベースサーバの設定などの多くの要素によります。テーブルに含まれるデータの量も、主要な要素の 1 つです。通常、次のテーブルに大量のデータが含まれています。

  • 統合取引 (tfgld482)
  • 調整データ (tfgld495)
  • ファイナライズ済取引 (tfgld106)
  • 仕掛品および在庫処理 (JSC) (ticst300)
  • プロジェクト管理仕掛品取引および在庫処理 (tipcs300)
  • 販売オーダ履歴 (tdsls450、tdsls451、および tdsls456)

LN FP5 以降には、RDBMS からテーブルを直接更新する機能が用意されています。この機能はポーティングセット 8.7a.03 以降に導入されています。

RDBMS から直接更新するのは、bshell 経由で更新するより効率的です。その違いは、すべての処理が RDBMS に委譲されている点です。このタイプの更新は、自国通貨額や為替レートの再計算が必要でないテーブルまたはデータに限定されます。これは、レポート通貨の自国通貨額が現地通貨建ての金額になる場合などに該当します。他の例としては、自国通貨額の削除があります。これは、レポート通貨が削除された場合、または通貨システムが標準通貨システムに変更された際にレポート通貨がロジスティックテーブル内にある場合などに該当します。

[CI プロセス (tccri7203m000)] セッションでは、RDBMS から直接更新が可能かどうかをチェックします。RDBMS からの直接更新が利用できない場合、このセッションでは通常の (遅い) 更新を利用します。

RDBMS 更新を利用するには、次の条件が満たされている必要があります。

  • [CI レート (tccri7100m000)] セッションで、[基準通貨 で表示] フィールドの値が [為替レート (tcmcs0108m000)] セッションの対応するフィールドの値と一致している必要があります。たとえば、ユーロを使用する会社では、変換の間に [基準通貨 で表示] 設定が変わらない場合、EUR (現地) から取引通貨への為替レートはそのままになります。

    [注意]: これは、[為替レート (tcmcs0108m000)] セッションの各基準通貨のすべてのレートタイプに適用されます。

  • 技術上の制限

    次の制限が適用されます。

    • データベースドライバはレベル 2 ドライバでなければならない
    • 次のテーブルは監査もミラーも行われない

      tfgld495、tfgld482、tdsls451、および tdsls456

  • バージョン 8.7a.03 以降のポーティングセットを使用する必要があります。ポーティングセットの TIV レベルは 1744 以降である必要があります。コマンドラインで $BSE/bin/bshell6.2 –V (Windows では %BSE\bin\ntbshell –V を使用) を実行すると、この数字を確認できます。

[CI プロセス (tccri7203m000)] セッションで通貨初期化処理が開始された場合、このセッションは変換クラスタおよび関連する会社にアクセスし、どのタイプの変換が必要かを決定します。RDBMS からの直接更新が利用可能な場合は、一部のデータがクラスタ会社別 CI 変換テーブル (tccri725) テーブルおよび CI クラスタ変換テーブル更新グループ (tccri726) テーブル内に生成されます。

注: 

CI クラスタ変換テーブル更新グループ (tccri726) は [クラスタ会社別 CI 変換テーブル (tccri7125m000)] セッション内の統合取引 (tfgld482) の項目に関してのみ生成されます。

[CI プロセス (tccri7203m000)] が RDBMS から直接テーブルを更新する場合、[クラスタ会社別 CI 変換テーブル (tccri7125m000)] セッションで一括更新フィールドが選択されます。

統合取引 (tfgld482) テーブルには、複数の財務会社に属している取引を含めることができます。RDBMS からの直接更新で処理できる統合取引は、更新グループに分類されます。1 つの更新グループの取引は 1 つの RDBMS 更新に変換されます。統合取引 (tfgld482) を RDBMS から直接更新せずに変換する必要がある場合でも (同様に)、テーブル変換は分割できます。この方法で、テーブルの従来の更新は並列処理を使用して処理できます。

RDBMS からの直接更新が適用できない場合にのみ、調整データ (tfgld495) を分割する必要があります。これは、自国通貨額や為替レートの再計算が必要な場合などに該当します。

注: 
  • 調整データ (tfgld495) の変換が分割された場合、RDBMS からの直接更新ではテーブルが更新されません
  • ファイナライズ済取引 (tfgld106) テーブルは並列処理を使用して変換されます。RDBMS からの直接更新はサポートされません。

調整例

この例は、RDBMS から直接更新せずに処理され、[クラスタ会社別 CI 変換テーブル (tccri7125m000)] で分割できる変換タスクに該当します。

並行処理での内部変換は、会社ごとの通貨設定によって RDBMS からの直接更新を伴う変換と伴わない変換があります。

9 つの並列処理の bshell を使用して 3 社のデータを変換するとします。この画像は、3 社のこの状況を会社ごとに異なる色で表しています。

タスク 1.1 で変換されたテーブルは非常に大規模です。同時に、他の 3 つの大規模なテーブル (2.1、2.2、および 3.1) も変換されます。大きな変換タスク 1.1 が分割できれば、6 つの bshell がタスク 1.1 を処理し、その間に 3 つの bshell がタスク 2.1、2.2、および 3.1 を処理するよう決定できます。タスク 1.1 の分割後、このタスクを処理する 6 つのより大きなタスクは、より小さいタスク (紫色) の前に処理されます。

たとえばテーブル 2.3 および 2.4 の変換を分割できれば、同じ手法を使用できます。テーブル 2.3 を 2 つの bshell で並列処理し、テーブル 2.4 を 3 つの bshell で並列処理すると、まだ残りの並列 bshell がより小さいタスク (緑色) を同時に処理する十分な余力があります。

タスクの分割後、並行処理の負担はよりバランスが取れています。

合計経過時間は 28 時間単位から 17 時間単位に短縮されました。

[CI プロセス (tccri7203m000)]: テスト変換と実変換

シミュレーションモードでは、RDBMS による直接更新のデータベース処理がテストされます。このタイプの更新は、調整データ (tfgld495)、統合取引 (tfgld482)、販売オーダ履歴ライン (tdsls451)、および販売オーダ履歴納入ライン (tdsls456) の変換の中で利用できます。テストモードでは、処理がロールバックされます。これには、実変換での実際の処理よりも非常に長い時間がかかることがあります。

従来の変換ロジックでは、テスト変換中にテーブルデータの更新は行われません。これらのテーブルは、テスト変換中はより短い時間で処理されますが、実変換での処理はより時間がかかることに注意してください。
注: 

通貨初期化の際、[CI プロセス (tccri7203m000)] セッションをテスト変換のために使用している場合でも、変換クラスタの会社内で他のユーザや処理を有効にしてはなりません。

テーブルのロックやコミットされていない処理の読み取りなどの問題を防ぐには、次の点に注意してください。
  • テスト変換の際、RDBMS からの直接更新は、テストされているがコミットされていない大規模な処理になります。これは、調整データ (tfgld495)、統合取引 (tfgld482)、販売オーダ履歴ライン (tdsls451)、および販売オーダ履歴納入ライン (tdsls456) でテーブルのロックを引き起こすことがあります。
  • SQL サーバ: デフォルトでは、データベースドライバは、共有ロック、および更新や削除のための排他的ロックを防ぐため、「非コミット読み取り (Read Uncomitted)」 分離レベルを使用します。その結果、(テスト) 変換の際、他のユーザまたはプロセスが、調整データ (tfgld495)、統合取引 (tfgld482)、販売オーダ履歴ライン (tdsls451)、および販売オーダ履歴納入ライン (tdsls456) でコミットされていない処理を読み取ることがあります。詳細については、次のトピックを参照してください: 「Infor Enterprise Server Technical Reference Guide for SQL Server Database Driver (U8173US)」。

Oracle 設定

RDBMS からの直接更新は、大規模な処理になります。そのため、大量の取消しテーブルスペースが必要となります。LN では、32 GB の取消しテーブルスペースでの動作を検証しています。たとえば 1 回につき 8 GB までデータファイルを自動的に拡張するように取消しテーブルスペースを設定することをお勧めします。この設定は、ORA-1555 (スナップショットが古すぎる) エラーの発生を防ぐ場合に役立ちます。最大データファイルサイズに注意してください。

取消しテーブルスペースのサイズが十分かどうかを予測することは容易ではありません。[CI プロセス (tccri7203m000)] の実行時、LN のイベントビューアのログで ORA-1555 エラーを探すことをお勧めします。

一般的に、クエリーの性能を高めるために、Oracle データベースは適切な調整を必要とします。

LN では、LN 環境に $BSE/lib/default/db_resource ファイル経由で以下の設定を適用して動作を検証しています。

  • ora_init:0101000
  • ora_max_array_fetch:100
  • ora_max_array_insert:100
  • ora_alter_session: set " _optim_peek_user_binds "= false

変換のため、バッチベースのデータベースリソースに、上記の行をマージすることを検討してください。

いくつかの実装では、Oracle の隠しパラメータ (いわゆるアンダースコアパラメータ) に非デフォルト値が適用されています。これらの設定はクエリーの実行計画に影響することがあります。これらの設定をデフォルトに戻すことを検討してください。これは、$BSE/lib/defaults/db_resource ファイルの ora_alter_session プロパティに追加することで可能になります。

SQL サーバ設定

通貨初期化中は LN データベースのロギングを 「簡易」 に変更し、通貨初期化後に完全なバックアップを作成することを検討してください。

配列取得が可能になるよう $BSE/lib/default/db_resource ファイルを設定し、取得サイズを 100 に設定します。

DB2 設定

配列取得が可能になるよう $BSE/lib/default/db_resource ファイルを設定し、取得サイズを 100 に設定します。