クエリ調整

特定のクエリが Microsoft Dataverse のデータを格納するデータベースに不均衡な負荷をかけた場合、データベースのリソースが不足し、すべてのデータ操作のパフォーマンスに悪影響を及ぼす可能性があります。 これが起こると、Dataverse はその特定のクエリの調整を開始し、他のすべてのシナリオが正常に実行できるようになります。

クエリ調整サービス保護の API 制限 と異なる点は、クエリ調整はパフォーマンス低下の原因となる特定のクエリを対象とし、それ以外のトラフィックには影響を与えないという点です。 調整されたクエリが非インタラクティブなアプリケーションから発信されている場合、調整はエンドユーザーには気づかれない可能性があります。 クエリがインタラクティブなアプリケーションから発信される場合、その特定のシナリオを実行するユーザーに影響します。

クエリ調整の動作

調整には、次の 3 つの方法があります。

  • クエリを実行する前に遅延を導入し、クエリを利用するシナリオを遅くする
  • クエリを実行しようとすると、何割かの確率で下記のようなエラーが発生します。
エラー コード 16 進コード Message
-2147187388 0x80048544 This query cannot be executed because it conflicts with query throttling.
-2147187132 0x80048644 This query cannot be executed because it conflicts with Query Throttling; the query uses a leading wildcard value in a filter condition, which will cause the query to be throttled more aggressively.
-2147186876 0x80048744 This query cannot be executed because it conflicts with Query Throttling; the query uses a computed column in a filter condition, which will cause the query to be throttled more aggressively.

先頭のワイルドカードのような、より積極的に抑制されたクエリパターンの詳細については、FetchXml を使用してパフォーマンスを最適化するQueryExpression を使用してパフォーマンスを最適化するを参照してください

一般的な要因

クエリの調整が必要な状況のほとんどは、これら 2 つの大きなカテゴリのいずれかに分類されます。

  • グリッドで使用される保存済クエリや、プラグインで実行されるクエリなど、一般的なインタラクティブ シナリオにおけるクエリは、非効率的で、実行のたびに多くのデータベース リソースを必要とする

  • 大量のデータを Dataverse に出し入れするデータ統合などの自動化された操作では、クエリが非常に高いレートで実行されるため、1 回の実行量は少なくても、全体では多くのデータベース リソースが消費される

クエリ調整を回避する方法

クエリ調整は、クエリや実行されるシナリオによって異なりますが、いくつかの共通のガイドラインがあります。

  • インタラクティブなアプリケーションで一般的に使用される、低速で低頻度のクエリについては、クエリ構造を変更して効率化する必要がある

  • 非インタラクティブ アプリケーションの場合、データベースの負荷を軽減する一般的な方法は次のとおりです。

    • ExecuteMultiple (または他のバッチ処理メカニズム) を使用してる場合、バッチ サイズを小さくする
    • アプリケーションがマルチスレッドの場合、コンカレント スレッド数を減らす
    • バッチ処理もコンカレント要求も使用しない場合、要求間の遅延を追加して要求レートを下げることができる