トラバーサル警告と非効率的なインデックス使用によって引き起こされるDAM アセットクエリのパフォーマンスの問題

Adobe Experience Manager(AEM)のDAM アセットクエリは、大きな結果セット、サポートされていないクエリ構文、非効率的なインデックス選択、不十分なクエリフィルターが原因で、ノードのトラバーサルが過剰に発生すると、動作が遅くなったり、タイムアウトになったり、失敗したりします。 この問題は、クエリビルダークエリ、SQL2 クエリ、スケジューラージョブ、API エンドポイント、およびDAM アセット検索パフォーマンスに影響します。 この問題を解決するには、クエリを最適化し、インデックスを改善し、トラバーサルを減らします。

説明 description

環境

Adobe Experience Manager as a Cloud Service (AEMaaCS)

問題/症状

  • タイムアウトまたはreturn*「インデックスが多すぎるノードをトラバースしました」*警告をクエリします。
  • OAKがサポートされていないLIMIT構文を変換するため、SQL2 クエリは解析エラーで失敗します。 例えば、LIMIT 1LIMIT(*)1になり、ParseExceptionが発生します。
  • Query Builder エンドポイントは、大規模なDAM パスが大量のトラバーサルをトリガーする場合に、サービス停止の応答を返します。
  • 説明クエリ出力には、インデックスの使用状況が表示されず、使用された​インデックスが表示されます:なし
  • /content/dam/...などの大きなDAM パスに対するクエリは、数百秒かかるか、p.limit=-1が使用されるとハングします。

根本原因

この問題は、適切なフィルターを備えていない大規模なDAM クエリで、Oakが過剰な数のノードをスキャンする必要が生じるために発生します。 サポートされていないSQL2 LIMIT/OFFSET構文、無効なインデックス選択、IS NULLなどのサポートされていない条件、および無制限の結果セットは、効率的なインデックスの使用を妨げます。 フォルダー階層が大きいと、クエリが最適化されていない場合は、HTTP タイムアウト、リソース枯渇、トラバーサル警告が発生する可能性があります。

解決策 resolution

クエリの問題を特定し、DAM クエリのパフォーマンスを向上させるには、次の手順に従います。

  1. ログ、Query Builder Debuggerの結果、Query Performanceの出力、クエリの結果の説明を確認して、クエリの失敗タイプを特定します。
  2. p.limit=-1を合理的な制限に置き換え、大規模なDAM階層をクエリする際のクエリ範囲を削減することで、大規模な結果セットを削減します。
  3. サポートされていないSQL2 LIMIT/OFFSET構文をOPTION(LIMIT 1)などのサポートされている構文に置き換え、必要に応じてクエリビルダーのページネーションを使用します。
  4. 「クエリの説明」出力を確認し、クエリでフォールバックインデックスの代わりに想定されるDAM インデックスが使用されていることを確認します。
  5. 「クエリを説明」に誤ったインデックス選択が表示された場合は、適切なインデックスタグを適用します。 例えば、必要に応じてoption(index tag assetsOmnisearch)を追加します。
  6. インデックスの使用と強制トラバーサルを防ぐIS NULL条件を削除または再構築します。
  7. DAM階層に非常に大きなフォルダー構造が含まれている場合、クエリを小さなサブクエリに分割します。 例えば、何万ものアセットを含む単一のパスをクエリするのではなく、サブフォルダーでクエリを分割します。
  8. 日付、リソースタイプ、その他のインデックス付きプロパティなどのメタデータフィルターを追加して、スキャンされたノードの数を減らし、インデックスの適格性を向上させます。
  9. クエリを再実行し、クエリの説明の出力を確認し、正しいインデックスの使用を確認し、トラバーサルの警告とタイムアウトが発生しないようにすることで、解決を検証します。

エスカレーションするタイミング

  • クエリの制限とフィルターが適用された後も、トラバーサルの警告は続行されます。
  • クエリの最適化後も、クエリの説明は引き続きインデックスの使用状況を表示しません。
  • クエリの修正後も、サポートされているSQL2構文は引き続き失敗します。
  • 最適化とインデックス検証の後、クエリビルダーエンドポイントは引き続きサービス停止エラーを返します。

関連トピックス

recommendation-more-help
experience-cloud-kcs-help-kbarticles