次の方法で共有


クエリの調整

クエリが 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 のエラーをスローします。

DataEngineLeadingWildcardQueryThrottlingDataEngineComputedColumnQueryThrottling のエラーは DataEnginePerformanceValidationIssuesQueryThrottling のエラーより前に発生しており、DataEngineLeadingWildcardQueryThrottlingDataEngineComputedColumnQueryThrottling は後方互換性を維持するために引き続きスローされます。

一般的な要因

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

  • 一般的な対話型シナリオの一部のクエリは非効率的であるため、実行ごとに多くのデータベース リソースを必要とします

    • 一般的な例としては、グリッドで使用される保存済みクエリや、プラグインによって実行されるクエリがあります
  • 自動化された操作では、クエリを高いレートで実行するため、各実行のコストが低くても、合計すると多くのデータベース リソースが消費されます

    • 一般的な例としては、大量のデータを Dataverse で出し入れするデータ統合があります

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

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

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

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

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

参照

アンチ パターンのクエリ
FetchXml を使用してパフォーマンスを最適化する
QueryExpression を使用してパフォーマンスを最適化する
サービス保護の API 制限