クエリの調整
クエリが Microsoft Dataverse のデータを格納するデータベースに不均衡な負荷をかけた場合、データベースのリソースが不足し、すべてのデータ操作のパフォーマンスに悪影響を及ぼす可能性があります。 これが起こると、Dataverse はそのクエリの調整を開始し、他のすべてのシナリオが正常に実行できるようにします。
クエリ調整がサービス保護の API 制限 と異なる点は、クエリ調整はパフォーマンス低下の原因となるクエリを対象とし、それ以外のトラフィックには影響を与えないという点です。 調整されたクエリが非インタラクティブなアプリケーションから発信されている場合、調整はエンドユーザーには気づかれない可能性があります。 クエリがインタラクティブなアプリケーションから発信される場合、その特定のシナリオを実行するユーザーに影響します。
クエリ調整の動作
調整には、次の 3 つの方法があります。
- クエリを実行する前に遅延を導入し、クエリを利用するシナリオを遅くする
- クエリを実行しようとすると、何割かの確率で下記のようなエラーが発生します。
エラー コード 16 進コード |
件名 | Message |
---|---|---|
-2147187388 0x80048544 |
DataEngineQueryThrottling |
This query cannot be executed because it conflicts with query throttling. |
-2147187132 0x80048644 |
DataEngineLeadingWildcardQueryThrottling |
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 |
DataEngineComputedColumnQueryThrottling |
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. |
-2147186875 0x80048745 |
DataEnginePerformanceValidationIssuesQueryThrottling |
This query cannot be executed because it conflicts with Query Throttling; the query has performance validation issues ({0}), which will cause the query to be throttled more aggressively. |
アンチパターンが原因で発生したクエリの調整の Dataverse エラー
既知のクエリのアンチパターン を使用するクエリが、環境の正常性に対するリスクとして特定された場合、稼働停止を回避するために、Dataverse はクエリの大幅な調整を行います。
クエリが調整が原因で失敗し、アンチパターンのいずれかを使用している場合、Dataverse はクエリが使用しているアンチパターンを特定する以下の一意のエラーを返します。
名前:
DataEnginePerformanceValidationIssuesQueryThrottling
コード:0x80048745
番号:-2147186875
メッセージ:This query cannot be executed because it conflicts with Query Throttling; the query has performance validation issues ({0}), which will cause the query to be throttled more aggressively. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952
例外メッセージの {0}
部分には、クエリが使用しているアンチパターンが列挙されています。 クエリで使用されるアンチパターンが複数ある場合は、コンマで区切られます。 たとえば、クエリが大きなテキスト列でフィルター処理を行い、さらに多数の列を選択している場合、例外メッセージには PerformanceLargeColumnSearch,LargeAmountOfAttributes
という文字列が含まれます。 次の表に、アンチパターンと説明へのリンクを示します。
アンチパターン識別子 | 説明のリンク |
---|---|
PerformanceLeadingWildCard |
フィルター条件の先頭にワイルド カードを使用しない |
PerformanceLargeColumnSearch |
大規模なテキスト列での条件の使用を避ける |
OrderOnEnumAttribute |
選択列別の並べ替えを避ける |
OrderOnPropertiesFromJoinedTables |
関連テーブル内の列別の順序付けを避ける |
LargeAmountOfAttributes |
選択した列の数を最小限にする |
LargeAmountOfLogicalAttributes |
選択した論理列の数を最小限にする |
FilteringOnCalculatedColumns |
フィルター条件で数式や計算列を使用しない |
ヒント
クエリに PerformanceLeadingWildCard
または FilteringOnCalculatedColumns
のアンチパターンが含まれている場合、異なる Dataverse のエラーがスローされます。
PerformanceLeadingWildCard
のアンチパターンを使用するクエリは、このページに記載されている DataEngineLeadingWildcardQueryThrottling
のエラーをスローします。また、FilteringOnCalculatedColumns
のアンチパターンを使用するクエリは、このページに記載されている DataEngineComputedColumnQueryThrottling
のエラーをスローします。
DataEngineLeadingWildcardQueryThrottling
と DataEngineComputedColumnQueryThrottling
のエラーは DataEnginePerformanceValidationIssuesQueryThrottling
のエラーより前に発生しており、DataEngineLeadingWildcardQueryThrottling
と DataEngineComputedColumnQueryThrottling
は後方互換性を維持するために引き続きスローされます。
一般的な要因
クエリの調整が必要な状況のほとんどは、これら 2 つの大きなカテゴリのいずれかに分類されます。
一般的な対話型シナリオの一部のクエリは非効率的であるため、実行ごとに多くのデータベース リソースを必要とします
- 一般的な例としては、グリッドで使用される保存済みクエリや、プラグインによって実行されるクエリがあります
自動化された操作では、クエリを高いレートで実行するため、各実行のコストが低くても、合計すると多くのデータベース リソースが消費されます
- 一般的な例としては、大量のデータを Dataverse で出し入れするデータ統合があります
クエリ調整を回避する方法
クエリ調整は、クエリや実行するシナリオによって異なりますが、いくつかの共通のガイドラインがあります。
インタラクティブなアプリケーションで一般的に使用される、低速で低頻度のクエリについては、クエリ構造を変更して効率化する必要がある
- クエリのパフォーマンスを向上させるための一般的なガイドラインについては FetchXml を使用したパフォーマンスの最適化 を参照
非インタラクティブ アプリケーションの場合、データベースの負荷を軽減する一般的な方法は次のとおりです。
- ExecuteMultiple (または他のバッチ処理メカニズム) を使用してる場合、バッチ サイズを小さくする
- アプリケーションがマルチスレッドの場合、コンカレント スレッド数を減らす
- バッチ処理もコンカレント要求も使用しない場合、要求間の遅延を追加して要求レートを下げることができる
参照
アンチ パターンのクエリ
FetchXml を使用してパフォーマンスを最適化する
QueryExpression を使用してパフォーマンスを最適化する
サービス保護の API 制限