Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

パフォーマンスのヒント

この章では、DeepSee のパフォーマンスに関するヒントについて説明します。

パフォーマンスおよびトラブルシューティング・オプションの詳細は、InterSystems Developer CommunityOpens in a new tab を参照してください。また、このドキュメントで前述の “DeepSee グローバルの別のデータベースへの配置” のセクションも参照してください。

結果キャッシュおよびキューブの更新

(既定で) 64,000 レコードより多く使用するキューブの場合、DeepSee は、結果キャッシュを保持し、使用します。なんらかの方法でキューブを更新する場合、結果キャッシュの一部が無効とみなされてクリアされます。詳細はキューブ定義のオプションに応じて異なります (この章で後述する “キャッシュのバケットとファクトの順序” を参照)。したがって、通常、頻繁にキューブを更新することは望ましくありません。

結果キャッシュは以下のように動作します。ユーザが (例えばアナライザを使用して) クエリを実行するたびに、DeepSee はそのクエリの結果をキャッシュします。次回そのクエリを任意のユーザが実行すると、DeepSee はそのキャッシュがまだ有効かどうかをチェックします。有効な場合、DeepSee はキャッシュされた値を使用します。それ以外の場合、DeepSee はクエリを再実行し、新しい値を使用して、その値をキャッシュします。その実質的な効果は、より多くのユーザがより多くのクエリを実行するほど、経時的にパフォーマンスが向上することです。

エージェント数の指定

DeepSee は、クエリを実行するエージェントのプールを設定します。このプールは、一連の優先度の高いエージェントと、同じ数の優先度の低いエージェントで構成されます。エージェントの数は制御できます。また、このエージェントは、キューブを構築するときにも使用されます。詳細は、"DeepSee モデルの定義" の “キューブのコンパイルとビルド” の章の “エージェント数の指定” を参照してください。

キャッシュのバケットとファクトの順序

前述のとおり、大量のデータ・セットの場合、DeepSee は結果キャッシュを保持し、使用します。この場合、ファクト・テーブルの行の順序を制御すると役立つことがあります。この順序によって、DeepSee がキャッシュをどのように作成して使用するかが変化するからです。そのためには、キューブの [初期ビルド順] オプションを指定します。"DeepSee モデルの定義" の “他のキューブ・オプション” を参照してください。

ユーザがピボット・テーブルを評価する場合、DeepSee は可能な限り後で再使用する集約値を計算してキャッシュします。DeepSee では、キャッシュが再使用できるかどうかを判断するために、以下のロジックを使用します。

  1. 特定のシナリオで使用されるレコードの ID を調べます (例えば、特定のピボット・テーブルのセルについて)。

  2. それらの ID が属するバケットを確認します。バケットとは、ファクト・テーブル内で連続する多数のレコードのことです (詳細は、後述します)。

    • (バケット内の少なくとも 1 つの ID に変更が加えられたために) バケットが更新されると、DeepSee は、そのバケットに関連付けられた該当のキャッシュを破棄して、結果を再生成します。

    • バケットが更新されていない場合、DeepSee は適切なキャッシュを再使用します (利用可能なキャッシュがある場合)。または、結果を再生成します (利用可能なキャッシュがない場合)。

シナリオによっては、ソース・レコードに加えた変更 (および、キューブに対するそれに対応する更新) は、最新のソース・レコードで最初に発生します。このようなシナリオでは、確実に古いレコードが最初になるように、レコードの古さ順でファクト・テーブルを構築することが有効です。この方法では、データへの変更によってより古い行のキャッシュが無効になることがなくなります (これに対して、古い行と新しい行がファクト・テーブル全体に混在していると、新しいレコードに変更が発生したときに、すべてのキャッシュが無効になる可能性があります)。

詳細は、このドキュメントで後述する “DeepSee クエリ・エンジンの仕組み” を参照してください。

非アクティブのキャッシュ・バケットの削除

キャッシュ・バケットが無効になった場合 (前のセクションを参照)、非アクティブとしてマークされますが、削除はされません。非アクティブのキャッシュ・バケットを削除するには、%DeepSee.UtilsOpens in a new tab%PurgeObsoleteCache() メソッドを呼び出します。例 :

d ##class(%DeepSee.Utils).%PurgeObsoleteCache("patients")

キューブ・セルの事前計算

前述のように、ユーザがピボット・テーブルを評価する場合、DeepSee は可能な限り後で再使用する集約値を計算してキャッシュします。つまり、このキャッシュ処理は、DeepSee で作業するユーザが増えるほどその動作が速くなることを意味します。(詳細は、このドキュメントで後述する “DeepSee クエリ・エンジンの仕組み” を参照してください。)

初期パフォーマンスも高速化するには、ピボット・テーブルで使用される特定の集約値を事前計算してキャッシュします。これは特に、パフォーマンスが重要となる場合に有効です。この機能は、以下のように実行されます。

  • キューブ・クラス内で、事前計算とキャッシュが必要なキューブ・セルを指定する追加の XData ブロック (CellCache) を指定します。詳細は、最初のサブセクションを参照してください。

  • それらのキューブ・セルをプログラムを使用して事前計算するには、ユーティリティ・メソッドを使用します。2 番目のサブセクションを参照してください。

    これは、キューブの構築後に実行する必要があります。

Important:

より単純なオプションは、単にクエリを事前に (つまり、ユーザが作業する前に) 実行することです。

セル・キャッシュの定義

キューブ・クラスには、事前計算およびキャッシュが可能なキューブ・セルを指定する追加の XData ブロック (CellCache) を格納できます。これによって DeepSee の初期パフォーマンスが高速化されます。以下に例を示します。

/// This xml document defines aggregates to be precomputed.
XData CellCache [ XMLNamespace = " http://www.intersystems.com/deepsee/cellCache" ]
{
<cellCache xmlns= "http://www.intersystems.com/deepsee/cellCache" >
   <group name= "BS">
      <item>
         <element >[Measures].[Big Sale Count]</element >
      </item>
   </group>
   <group name= "G1">
      <item>
         <element >[UnitsPerTransaction].[H1].[UnitsSold]</ element>
         <element >[Measures].[Amount Sold]</element >
      </item>
      <item>
         <fact >DxUnitsSold</fact >
         <element >[Measures].[Amount Sold]</element >
      </item>
   </group>
</cellCache >
}

<cellCache> 要素は以下のとおりです。

  • ネームスペース "http://www.intersystems.com/deepsee/cellCache" 内に存在している必要があります。

  • ゼロ個以上の <group> 要素が含まれます。

<group> 要素は以下のとおりです。

  • name 属性があります。この属性は、後で事前計算するセル・グループを指定するときに使用します。

  • 1 つ以上の <item> 要素が含まれます。

<item> 要素は、キューブ・インデックスの組み合わせを表し、%SHOWPLAN によって返される情報に対応します。<item> 要素は、1 つ以上の <element> 要素で構成されます。

<element> には、以下の構造のいずれかが、任意の組み合わせで 1 つ以上含まれます。

<fact>fact_table_field_name</fact>

または、以下のようになります。

<element>mdx_member_expression</element >

以下は、この指定の説明です。

  • fact_table_field_name は、レベルまたはメジャーのファクト・テーブルのフィールド名で、そのレベルまたはメジャーの factName 属性によって指定されています。

  • mdx_member_expression は、メンバとして評価する MDX 式です。これは、レベルのメンバの場合も、メジャー名の場合もあります (各メジャーは特殊な MEASURES ディメンジョンのメンバです)。

    この式は、計算メンバであってはいけません。

Note:

各グループは、一連の共通部分を定義します。グループ内の共通部分の数は、キューブ・セルを事前計算するときの処理速度に影響します。

キューブ・セルの事前計算

<group> で指定される集約値を事前計算するには、%DeepSee.UtilsOpens in a new tab%ComputeAggregateGroup() メソッドを使用します。このメソッドは、以下のとおりです。

classmethod %ComputeAggregateGroup(pCubeName As %String, 
                                   pGroupName As %String, 
                                   pVerbose As %Boolean  = 1) as %Status

pCubeName はキューブ名、pGroupName はグループ名、pVerbose はメソッドの実行中に進捗情報を書き込むかどうかを指定します。pGroupName については、"*" を使用してそのキューブのすべてのグループを事前計算することもできます。

このメソッドを使用する場合、最初にキューブを構築する必要があります。

このメソッドは、各グループを処理するために、ファクト・テーブルをループし、グループ内の項目によって定義されている共通部分を計算します。処理はグループ内の共通部分の数が少ないほど速くなります。この処理はシングルスレッドです。これによりフォアグラウンドでのクエリが可能になります。

FeedbackOpens in a new tab