12.1 グラフ・サーバー(PGX)エンジンの構成パラメータ

起動時に単一のJSONファイルをインメモリー・グラフ・サーバー(PGX)に割り当てることで、グラフ・サーバー(PGX)エンジンおよびPGXランタイム・ライブラリを構成できます。

このファイルには、次の表に示すパラメータが含まれます。

構成ファイルを指定するには、インメモリー・グラフ・サーバー(PGX)への構成ファイルの指定を参照してください。

ノート:

  • パラメータ値の相対パスは常に、指定された構成ファイルの親ディレクトリを基準として解決されます。たとえば、構成ファイルが/pgx/conf/pgx.confである場合、そのファイル内のファイル・パスgraph-configs/my-graph.bin.json/pgx/conf/graph-configs/my-graph.bin.jsonに解決されます。

  • パラメータのデフォルト値は、広範囲のアルゴリズムにわたって最高のパフォーマンスを得るように最適化されています。作業負荷に応じて、様々な戦略、サイズおよびしきい値を試行してパフォーマンスをさらに向上させることができます。

表12-1 グラフ・サーバー(PGX)エンジンの構成パラメータ

パラメータ 説明 デフォルト

admin_request_cache_timeout

integer

管理要求の結果がキャッシュから削除されるまでの秒数。完了していないリクエストまたはまだ消費されていないリクエストは、このタイムアウトから除外されます。ノート: これが関連するのは、PGXがWebアプリケーションとしてデプロイされている場合のみです。

60

allow_idle_timeout_overwrite

boolean

trueの場合、セッションによってデフォルトのアイドル・タイムアウトが上書きされる可能性があります。

true

allow_override_scheduling_information

boolean

trueの場合、タスクの重み、タスク優先度、スレッド数などのスケジューリング情報のオーバーライドをすべてのユーザーに許可します

true

allow_task_timeout_overwrite

boolean

trueの場合、セッションによってデフォルトのタスク・タイムアウトが上書きされる可能性があります。

true

allow_user_auto_refresh

boolean

trueの場合、ユーザーはロードするグラフの自動リフレッシュを有効化できます。falseの場合、preload_graphsに指定されているグラフのみ、自動リフレッシュを有効にできます。

false
allowed_remote_loading_locations 文字列の配列 リモートの場所(http、https、ftp、ftps、s3、hdfs)からPGXエンジンへのグラフのロードを許可します。空の場合は、デフォルトの場合と同様に、リモートの場所は許可されません。配列で*を指定すると、すべてのリモートの場所が許可されます。現在サポートされているのは値*のみです。この設定の値に関係なく、事前ロードされたグラフは任意の場所からロードされていることに注意してください。

警告:

このパラメータによってセキュリティが低下するため、必要な場合にのみ使用します。
[]
basic_scheduler_config object 分岐結合プールのバックエンドの構成パラメータ。 null

bfs_iterate_que_task_size

integer

BFS反復QUEフェーズのタスク・サイズ。

128

bfs_threshold_parent_read_based

number

親読取りベースのアクセス戦略に切り替えるBFS横断レベル・アイテムのしきい値。

0.05

bfs_threshold_read_based

integer

読取りベースのアクセス戦略に切り替えるBFS横断レベル・アイテムのしきい値。

1024

bfs_threshold_single_threaded

integer

BFSのトラバース・レベル・アイテムの頂点がシングル・スレッドでアクセスされる回数。

128

character_set

string

PGX全体で使用する標準文字セット。デフォルトはUTF-8です。ノート: 一部の書式には互換性がない可能性があります。

utf-8

cni_diff_factor_default

integer

共通の隣接イテレータ実装で使用されるデフォルトの差分係数値。

8

cni_small_default

integer

部分配列が小さいとみなされるしきい値を示すために、共通の隣接イテレータ実装で使用されるデフォルト値。

128

cni_stop_recursion_default

integer

バイナリ検索アプローチが適用される最小サイズを示すために、共通の隣接イテレータ実装で使用されるデフォルト値。

96

dfs_threshold_large

integer

多数の頂点に対して最適化されたデータ構造にDFS実装が切り替わる判断の基準となる頂点へのアクセス数。

4096

enable_csrf_token_checks

boolean

trueの場合、PGX Webアプリケーションは、クライアントが送信したクロスサイト・リクエスト・フォージェリ(CSRF)のトークンCookieとリクエスト・パラメータが存在して一致することを検証します。これを行うのは、CSRF攻撃を回避するためです。

true

enable_gm_compiler

boolean

trueの場合、実行時にPGXアルゴリズムAPI (またはGreen-Marlコード)の動的コンパイルを有効にします。

true

enable_shutdown_cleanup_hook

boolean

trueの場合、PGXは、JVMのシャットダウン時にPGXを自動的にシャットダウンするJVMシャットダウン・フックを追加します。注意: シャットダウン・フックを非アクティブにし、PGXを明示的にシャットダウンしない場合、一時ディレクトリの汚染につながる可能性があります。

true

enterprise_scheduler_config

object

エンタープライズ・スケジューラの構成パラメータ。

null

enterprise_scheduler_flags

object

[enterprise_schedulerに該当します]エンタープライズ・スケジューラ固有の設定。

null

explicit_spin_locks

boolean

trueの場合、ロックが使用可能になるまで、ループ内で明示的にスピンします。falseの場合、JVMに依存するJDKのロックを使用し、コンテキスト切替えとスピンのどちらを行うかを決定します。この値をtrueに設定すると、通常はパフォーマンスが向上します。

true
file_locations オブジェクトの配列 authorization-configで使用できるファイルの場所。 []
graph_algorithm_language enum[GM_LEGACY, GM, JAVA] 使用するフロントエンド・コンパイラ。 gm
graph_validation_level enum[low, high] 新しくロードまたは作成されたグラフで実行される検証のレベル。 low
ignore_incompatible_backend_operations boolean trueの場合、RTSまたはFJプールで互換性のない操作および構成値を検出した場合のみログに記録します。falseの場合、例外がスローされます。 false
in_place_update_consistency_model enum[ALLLOW_INCONSISTENCIES, CANCEL_TASKS] インプレース更新の発生時に使用される一貫性モデル。インプレース更新が有効な場合のみ該当します。現在、更新がインプレースで適用されるのは、更新が構造的でない場合のみです(プロパティを変更するのみ)。現在2つのモデルが実装されており、1つのモデルでは更新の発生時に新しいタスクのみを遅延させ、もう1つのモデルでは実行中のタスクも遅延させます。 allow_inconsistencies
init_pgql_on_startup boolean trueの場合、PGQLはPGXの起動時に直接初期化されます。そうでない場合、PGQLの初回使用時に初期化されます。 true
interval_to_poll_max integer いったん達するとジョブ・ステータスのポーリング間隔が固定される指数関数的バックオフの上限(ミリ秒) 1000
java_home_dir string Javaのホームディレクトリへのパス。<system-java-home-dir>に設定した場合は、java.homeシステム・プロパティを使用します。 null
large_array_threshold integer 配列のサイズが大きすぎて通常のJava配列を使用できなくなるときのしきい値。これは使用しているJVMによって異なります。(Integer.MAX_VALUE - 3にデフォルト設定されます) 2147483644
max_active_sessions integer

1回にアクティブにできるセッションの最大数。

1024
max_distinct_strings_per_pool integer [string_pooling_strategyが索引付けられている場合のみ該当します]プーリングを停止するまでのプロパティごとの個別の文字列数。制限に達すると、例外がスローされます。 65536
max_http_client_request_size long REST APIを介してPGXサーバーに送信されるhttpリクエストの最大サイズ(バイト単位)。-1に設定すると、任意のサイズのリクエストが許可されます。 10485760
max_off_heap_size integer
OutOfMemoryErrorがスローされるまでPGXが割り当てられるオフピーク・メモリーの最大容量(MB)。

ノート:

端数処理および同期のトレードオフのため、この制限を超えないことは保証されていません。これは、PGXが新しいメモリー割当てリクエストを拒否し始める場合のみ、しきい値として機能します。
<available-physical-memory>

max_queue_size_per_session

integer

キューに入れることができるセッション当たりの保留中タスクの最大数。セッションが最大数に達した場合、そのセッションの新しい着信リクエストは拒否されます。負の値は無限大または無制限を意味します。

-1
max_snapshot_count integer

エンジンで同時にロードされる可能性のあるスナップショットの数。自動または強制更新により新規スナップショットを作成できます。グラフのスナップショットの数がこのしきい値に到達すると、自動更新はこれ以上実行されなくなり、強制更新の結果、1つ以上のスナップショットがメモリーから削除されるまでは例外になります。値ゼロは、無制限数のスナップショットをサポートすることを示します。

0
memory_allocator enum[basic_allocator, enterprise_allocator] 使用するメモリー・アロケータ。 basic_allocator
memory_cleanup_interval integer

メモリー・クリーンアップ間隔(秒)。

600
min_array_compaction_threshold number グラフ構成でarray_compaction_threshold値に使用できる最小値(更新用に最適化されたグラフにのみ関連)。グラフ構成でmin_array_compaction_thresholdで指定された値より小さい値を使用しようとすると、かわりにmin_array_compaction_thresholdが使用されます。 0.2
min_fetch_interval_sec integer デルタリフレッシュ(グラフ形式がデルタ更新をサポートしている場合のみ関連)の場合、グラフ・ソースに対して変更が問い合される最小間隔。グラフのデルタリフレッシュが頻繁に発生するためにPGXがハングしないように、この値をチューニングできます。 2
min_update_interval_sec integer 自動リフレッシュの場合、グラフ全体を再ロードするか、フォーマットがデルタ更新をサポートするかによって、新しいスナップショットが作成される間隔が最小で、キャッシュされている変更は(フォーマットでデルタ更新がサポートされている場合のみ関連)になります。グラフの自動リフレッシュが頻繁に発生するためにPGXがハングしないように、この値をチューニングできます。 2
ms_bfs_frontier_type_strategy enum[auto_grow, short, int]

MS-BFSフロンティアに使用するタイプ方針。

auto_grow
num_spin_locks integer

生成された各アプリケーションがインスタンス化の際に作成するスピン・ロックの数。トレードオフ: 数値が小さくなると、メモリー消費量が少なくなり、数値が大きくなると、実行速度が速くなります(アルゴリズムがスピン・ロックを使用している場合)。

1024
parallelism integer スレッド・プールで使用されるワーカー・スレッド数。ノート: コール元のスレッドが別のスレッド・プールの一部である場合、この値は無視され、親プールの並列度が使用されます。 <number-of-cpus>
pattern_matching_supernode_cache_threshold integer スーパーノードになるノードの近隣の最小数。これは、パターン一致エンジン用です。 1000
pgx_realm object レルムの構成パラメータ。 null
pooling_factor number [string_pooling_strategyがon_heapの場合のみ該当します]この値は、文字列プールがプロパティのサイズと同じ大きさになることを阻止します。同じ大きさになると、プーリングの表示が無効になる可能性があります。 0.25
preload_graphs オブジェクトの配列

起動時に登録されるグラフ構成のリスト。各アイテムには、グラフ構成へのパス、グラフの名前、およびグラフを公開するかどうかが含まれます。

[]
random_generator_strategy enum[non_deterministic, deterministic] PGXで乱数を生成する方法。 non_deterministic
random_seed long

[決定論的乱数ジェネレータにのみ関連] pgxで使用される決定論的乱数ジェネレータのシード。デフォルトは-24466691093057031です。

-24466691093057031
release_memory_threshold number

使用されたメモリーのしきい値パーセンテージ(小数)。この値を超えると、エンジンは未使用のグラフを解放し始めます。例: 値が0.0の場合、参照カウントがゼロになると同時にグラフが解放されます。つまり、そのグラフをロードしたすべてのセッションが破棄され、タイムアウトします。値が1.0の場合、グラフは解放されず、メモリーに収まらないグラフが必要になると、エンジンはすぐにOutOfMemoryErrorsをスローします。値が0.7の場合、合計メモリー使用量が使用可能な合計メモリーの70%未満であるかぎり、その時点でこれらを使用しているセッションがない場合でも、すべてのグラフがメモリー内に保持されます。消費量が70%を超え、別のグラフをロードする必要がある場合、メモリー使用量が70%を再度下回るまで、使用されていないグラフは解放されます。

0.85
revisit_threshold integer キャッシュされるノードからの一致結果の最大数。 4096
scheduler enum[basic_scheduler, enterprise_scheduler, low_latency_scheduler] 使用するスケジューラ。
  • basic_scheduler: 基本機能を持つスケジューラを使用します
  • enterprise_scheduler: 複数のタスクを同時に実行してパフォーマンスを改善するための高度なエンタープライズ機能を備えたスケジューラを使用します
  • low_latency_scheduler: 複数のセッションにわたるスループットまたは公平性よりもタスクのレイテンシを優先するスケジューラを使用します。low_latency_schedulerは埋込みモードでのみ使用できます。
enterprise_scheduler
session_idle_timeout_secs integer

アイドル・セッションのタイムアウト(秒)。ゼロ(0)は無限大またはタイムアウトなしを意味します

0
session_task_timeout_secs integer

セッション(アルゴリズム、I/Oタスク)によって送信された長時間実行タスクの中断のタイムアウト(秒)。ゼロ(0)は無限大またはタイムアウトなしを意味します。

0
small_task_length integer

処理の合計量がデフォルトのタスクの長さより小さい場合のタスクの長さ(タスク・スティーリング戦略の場合のみ該当します)。

128

strict_mode boolean

trueの場合、エンジンで構成の問題(無効なキー、不一致、その他の潜在的なエラーなど)が発生する場合は常に、例外がスローされ、ERRORレベルでログに記録されます。falseの場合、エンジンでは(重大度に応じて) ERROR/WARNレベルで問題が記録され、最適な推測を行われ、例外がスローされるのではなく、合理的なデフォルトが使用されます。

true
string_pooling_strategy enum[indexed, on_heap, none] 使用する文字列プール戦略。 on_heap
task_length integer

デフォルトのタスクの長さ(タスク・スティーリング戦略の場合のみ該当します)。100から10000の範囲にする必要があります。トレードオフ: 小さい数値を指定すると、より詳細なタスクが生成され、スティーリング・スループットが高くなります。大きい値を指定すると、メモリー消費量およびGCアクティビティが減少します。

4096
tmp_dir string

コンパイル・アーティファクトおよび他の一時データを格納するための一時ディレクトリ。<system-tmp-dir>に設定すると、基礎となるシステムの標準のtmpディレクトリ(Linuxでは/tmp)が使用されます。

null
udf_config_directory string

UDF構成ファイルを含むディレクトリ・パス。

null
use_index_for_reachability_queries enum[auto, off] 到達可能性問合せの索引を作成します。 auto
use_memory_mapper_for_reading_pgb boolean trueの場合、可能な場合はPGB形式でグラフを読み取るためにメモリーにマップされたファイルを使用します。falseの場合は、常にストリームベースの実装を使用します。 true
use_memory_mapper_for_storing_pgb boolean trueの場合、可能な場合はPGB形式でグラフを格納するためにメモリーにマップされたファイルを使用します。falseの場合は、常にストリームベースの実装を使用します。 true

エンタープライズ・スケジューラ・パラメータ

次のパラメータは、高度なスケジューラが使用されている場合にのみ該当します。(基本スケジューラを使用している場合は無視されます。)

  • analysis_task_config

    分析タスクの構成。型: object。デフォルト: prioritymediummax_threads<no-of-CPUs>weight<no-of-CPUs>

  • fast_analysis_task_config

    高速分析タスクの構成。型: object。デフォルト: priorityhighmax_threads<no-of-CPUs>weight1

  • maxnum_concurrent_io_tasks

    同時タスクの最大数。型: integer。デフォルト: 3

  • num_io_threads_per_task

    高速分析タスクの構成。型: object。デフォルト: <no-of-cpus>

基本的なスケジューラ・パラメータ

次のパラメータは、基本スケジューラが使用されている場合にのみ該当します。(高度なスケジューラを使用している場合は無視されます。)

  • num_workers_analysis

    分析タスクに使用するワーカー・スレッドの数。型: integer。デフォルト: <no-of-CPUs>

  • num_workers_fast_track_analysis

    ファスト・トラック分析タスクに使用するワーカー・スレッドの数。型: integer。デフォルト: 1

  • num_workers_io

    I/Oタスク(ロード/リフレッシュ/ディスクからの読取り/ディスクへの書込み)に使用するワーカー・スレッドの数。ファイルベース・ローダーは常にシングル・スレッドであるため、この値による影響はありません。データベース・ローダーは、I/Oワーカーごとに新しい接続をオープンします。デフォルト: <no-of-CPUs>

例12-1 インメモリー・グラフ・サーバー(PGX)の最小構成

次の例を使用すると、インメモリー・グラフ・サーバー(PGX)により、32のワーカーを含む分析スレッド・プールが初期化されます。(その他すべてのパラメータに対してデフォルト値が使用されます。)

{
  "enterprise_scheduler_config": {
    "analysis_task_config": {
      "max_threads": 32
    }
  }
}

例12-2 事前ロードされた2つのグラフ

この例では、より多くのフィールドを設定し、グラフ・サーバー(PGX)の起動中にメモリーにロードするための2つの固定グラフを指定します。

{ 
  "enterprise_scheduler_config": {
    "analysis_task_config": {
      "max_threads": 32
    },
    "fast_analysis_task_config": {
      "max_threads": 32
    }
  }, 
  "memory_cleanup_interval": 600,
  "max_active_sessions": 1, 
  "release_memory_threshold": 0.2, 
  "preload_graphs": [
    {
      "path": "graph-configs/my-graph.bin.json",
      "name": "my-graph"
    },
    {
      "path": "graph-configs/my-other-graph.adj.json",
      "name": "my-other-graph",
      "publish": false
    }
  ],
  "authorization": [{
    "pgx_role": "GRAPH_DEVELOPER",
    "pgx_permissions": [{
      "preloaded_graph": "my-graph",
      "grant": "read"
    },
    {
      "preloaded_graph": "my-other-graph",
      "grant": "read"
    }]
  },	
	....
  ]
}