第89章 デシジョンエンジン使用時のパフォーマンスチューニングに関する考慮点


以下の主要な概念または推奨のプラクティスを使用すると、デシジョンエンジンのパフォーマンス最適化に役立ちます。本セクションではこの概念についてまとめており、随時、他のドキュメントを相互参照して詳細を説明します。本セクションは、Red Hat Process Automation Manager の新しいリリースで、必要に応じて拡張または変更します。

デシジョンエンジンの重要な更新を必要としない、ステートレス KIE セッションには順次モードを使用する

順次モードは、デシジョンエンジンにおける高度なルールベースの設定です。順次モードでは、デシジョンエンジンは、ワーキングメモリーでの変更に関係なく、デシジョンエンジンアジェンダにリスト化された順番でルールを一度評価します。その結果、ルールの実行は順次モードの方が速くなる可能性がありますが、重要な更新がルールに適用されない可能性があります。順次モードは、ステートレス KIE セッションのみに適用されます。

順次モードを有効にするには、システムプロパティー drools.sequentialtrue に設定します。

順次モードや、このモードの有効化に関する他のオプションの情報は、「Phreak における順次モード」 を参照してください。

イベントリスナーを使用する場合は簡単な操作を使用する

イベントリスナーの数や、実行する操作の種類を制限します。デバッグロギングや設定プロパティーなどの簡単な操作にイベントリスナーを使用します。リスナーでネットワーク呼び出しなどの複雑な操作を行うと、ルールの実行が阻害される可能性があります。KIE セッションでの作業が完了した後には、セッションを消去できるように、アタッチされているイベントリスナーを以下の例のように削除します。

使用後に削除されるイベントリスナーの例

Listener listener = ...;
StatelessKnowledgeSession ksession = createSession();
try {
    ksession.insert(fact);
    ksession.fireAllRules();
    ...
} finally {
    if (session != null) {
        ksession.detachListener(listener);
        ksession.dispose();
    }
}

同梱のイベントリスナーとデシジョンエンジンでのデバッグロギングに関する情報は、87章デシジョンエンジンのイベントリスナーおよびデバッグロギング を参照してください。

実行可能なモデルビルドの LambdaIntrospector のキャッシュサイズ設定
実行可能なモデルビルドで使用される LambdaIntrospector.methodFingerprintsMap キャッシュのサイズを設定できます。キャッシュのデフォルトサイズは 32 です。キャッシュサイズに小さい値を設定すると、メモリーの使用量が減少します。たとえば、システムプロパティー drools.lambda.introspector.cache.size0 に設定すると、メモリーの使用量を最小限に抑えることができます。キャッシュサイズが小さくなると、ビルドパフォーマンスが低下する点に注意してください。
実行可能モデルでの lambda 外部化の使用

lambda 外部化を有効にして、実行時のメモリーの消費量を最適化します。この設定は、実行可能モデルで生成され使用される lambda を書き換えます。そのため、同じ lambda を全パターンおよび同じ制約で複数回再利用できます。Rete または Phreak がインスタンス化されると、実行可能なモデルをガベージコレクションにすることができます。

実行可能モデルの lambda 外部化を有効にするには、以下のプロパティーを追加します。

-Ddrools.externaliseCanonicalModelLambda=true
アルファノード範囲のインデックスしきい値の設定

アルファノード範囲のインデックスは、ルール制約を評価するのに使用されます。drools.alphaNodeRangeIndexThreshold システムプロパティーを使用して、アルファノードの範囲インデックスのしきい値を設定できます。しきい値のデフォルト値は 9 です。これは、先行ノードが不等式制約を持つ 9 個以上のアルファノードを含む場合にアルファノード範囲インデックスが有効になることを示しています。たとえば、Person(age > 10)Person(age > 20) ... Person(age > 90) のようなルールがあると、同様の 9 つのアルファノードを持つことができます。

しきい値のデフォルト値は、関連する利点とオーバーヘッドに基づきます。ただし、しきい値に小さい値を設定すると、ルールに応じてパフォーマンスを向上させることができます。たとえば、drools.alphaNodeRangeIndexThreshold の値を 6 に設定すると、先行ノード用に 6 を超えるアルファノード範囲のインデックスを有効にできます。ルールのパフォーマンステスト結果に基づいて、しきい値に適切な値を設定できます。

結合ノード範囲のインデックスの有効化

結合ノードの範囲インデックス機能は、複数のファクトを結合する場合にのみパフォーマンスが向上します (例: 256*16 の組み合わせ)。アプリケーションが多数のファクトを挿入すると、結合ノード範囲のインデックスを有効にして、パフォーマンスの向上を評価できます。デフォルトでは、結合ノード範囲インデックスは無効になります。

kmodule.xml ファイルの例

<kbase name="KBase1" betaRangeIndex="enabled">

BetaRangeIndexOption のシステムプロパティー

drools.betaNodeRangeIndexEnabled=true

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.