クエリ調整
特定のクエリが 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 回の実行量は少なくても、全体では多くのデータベース リソースが消費される
クエリ調整を回避する方法
クエリ調整は、クエリや実行されるシナリオによって異なりますが、いくつかの共通のガイドラインがあります。
インタラクティブなアプリケーションで一般的に使用される、低速で低頻度のクエリについては、クエリ構造を変更して効率化する必要がある
- クエリのパフォーマンスを向上させるための一般的なガイドラインについては FetchXml を使用したパフォーマンスの最適化 を参照
非インタラクティブ アプリケーションの場合、データベースの負荷を軽減する一般的な方法は次のとおりです。
- ExecuteMultiple (または他のバッチ処理メカニズム) を使用してる場合、バッチ サイズを小さくする
- アプリケーションがマルチスレッドの場合、コンカレント スレッド数を減らす
- バッチ処理もコンカレント要求も使用しない場合、要求間の遅延を追加して要求レートを下げることができる