6.9.1.6 PGQL問合せでのパフォーマンスの考慮事項
多数の要因が、Oracle DatabaseでのPGQL問合せのパフォーマンスに影響を与えます。次に、問合せのパフォーマンスのためのお薦めの慣例をいくつか示します。
問合せオプティマイザ統計
優れた、最新の問合せオプティマイザ統計は、問合せのパフォーマンスにとって非常に重要です。プロパティ・グラフのデータを大幅に更新した後は、必ずOPG_APIS.ANALYZE_PGを実行してください。
パラレル問合せ実行
パラレル問合せ実行を使用して、OracleのパラレルSQLエンジンを利用します。多くの場合、パラレル実行は、シリアル実行に対して大幅なスピードアップになります。パラレル実行は、再帰的WITH戦略を使用して評価されるパス問合せで特に重要となります。
パラレル問合せ実行の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』も参照してください。
オプティマイザの動的サンプリング
グラフ・データ・モデル本来の柔軟性のため、静的情報では必ずしも最適な問合せ計画が生成されない場合があります。そのような場合は、よりすぐれた問合せ計画を得るために、問合せオプティマイザで動的サンプリングを使用して、実行時にデータのサンプリングを実行できます。サンプリングされるデータ量は、使用される動的サンプリング・レベルによって制御されます。動的サンプリング・レベルの範囲は0から11です。最適な使用レベルは、特定のデータセットとワークロードによって異なりますが、多くの場合、2 (デフォルト)、6、または11のレベルで良好な結果を得られます。
『Oracle Database SQLチューニング・ガイド』の「補足的な動的統計」も参照してください。
バインド変数
可能な場合は常に、定数にバインド変数を使用します。バインド変数の使用により、問合せのコンパイル時間が大幅に削減されます。それにより、使用されている定数値のみが異なる問合せでの問合せワークロードのスループットが大幅に増加します。さらに、バインド変数を使用した問合せでは、インジェクション攻撃に対する脆弱性が軽減されます。
パス問合せ
+
(プラス記号)演算子または*
(アスタリスク)演算子を使用して任意の長さのパスを検索する、PGQLのパス問合せでは、計算が非常に複雑なため、特別な考慮が必要になります。最適なパフォーマンスを得るためには、パラレル実行を使用し、再帰的WITH(USE_DIST_RW=T)にDISTINCTオプションを使用してください。また、大規模で、連結度が高いグラフの場合は、MAX_PATH_LEN=nを使用して、再帰ステップの反復数を妥当な数に制限することをお薦めします。お薦めの方法は、小さな反復制限から開始して、その制限を繰り返し増加してより多くの結果を見つけるというものです。