次の方法で共有


データ パフォーマンスの最適化に関するレコメンデーション

この Power Platform Well-Architected Performance Efficiencyチェックリストの推奨事項に適用されます:

体育:08 データ パフォーマンスの最適化。 ワークロードでの意図された使用と実際の使用に合わせてデータ ストアを最適化します。

このガイドでは、データ パフォーマンスを最適化するための推奨事項について説明します。 データ パフォーマンスを最適化するということは、ワークロードがデータを処理および保存する効率を改善することです。 通常、すべてのワークロード操作、トランザクション、または計算は、データの迅速かつ正確な取得、処理、保存に依存します。 データ パフォーマンスが最適化されると、ワークロードはスムーズに実行されます。 データ パフォーマンスが低下すると、パフォーマンス効率が低下するというドミノ効果が発生します。 データ パフォーマンスを最適化しないと、応答 の遅延、レイテンシの増加、スケーラビリティの低下が発生します。 全体のワークロードの効率が損なわれます。

定義

任期 Definition
データ ストア データベース、オブジェクト ストア、ファイル共有などのデータを保存するリソース。
Index アイテムへの迅速なアクセスを提供するデータベース構造。
オンライン分析処理 (OLAP) 大規模なビジネス データベースを整理し、複雑な分析をサポートし、トランザクション システムに悪影響を与えることなく複雑な分析クエリを実行するテクノロジー。
オンライントランザクション処理 (OLTP) 組織の日常業務で発生するビジネス上のやり取りを記録するテクノロジー。
パーティション分割 データを物理的に分割して個別のデータ ストアに格納するプロセス。
クエリのチューニング データベースクエリの速度を最適化するプロセス。

主要な設計戦略

データの使用を最適化するには、データ ストアが意図された用途とワークロードでの実際の使用に合わせて最適化されていることを確認します。 データの使用を最適化すると、クエリのパフォーマンスが向上し、リソースの消費が削減され、システム全体の効率が向上します。 次の戦略を検討してください。

  • プロファイル データ。 データを理解し、データ モデルがワークロードに適していることを確認します。 データの正規化やパーティション分割手法などの要素を考慮してください。 効率的なデータ取得のために、適切なデータ型を選択し、テーブル間で リレーションシップ を定義するようにしてください。

  • フォームのパフォーマンスの最適化。 ワークロードで実行されるクエリを分析および最適化します。 クエリの最適化やキャッシュなどのテクニックを使用します。 サーバー側ビューを使用してデータを事前フィルターします。 ボトルネックを特定するには、パフォーマンス監視ツールを使用して、必要な改善を行います。

  • システムを定期的に監視および調整します。 ワークロードのパフォーマンスを継続的に監視し、データ ストレージ構成とクエリの最適化を繰り返します。 パフォーマンス チューニングのベスト プラクティスに基づいて、システム メトリックを分析し、改善領域を特定し、変更を実装します。 データが増えるにつれて、パフォーマンスを維持するためにクエリを更新する必要がある場合があります。

プロファイル データ

データ プロファイリングでは、ソースからのデータを調べ、そのデータに関する情報を収集します。 目的は、ワークロード データの品質、構造、特性を理解することです。 このプロセスにより、欠落値、重複、一貫性のない形式、その他の異常などの問題を特定できます。

効果的なデータ プロファイリングを行うには、次の戦略を検討してください。

  • データの構造について理解する。 テーブル、列、リレーションシップなどのデータの構造を調べます。 各列に適用されるデータ型、長さ、制約を決定します。 データ構造の評価は、データがどのように構成されているか、他のデータ要素とどのように関連しているかを理解するのに役立ちます。

  • データ容量を分析する。 データの量を評価して、全体的なサイズと増加パターンを把握します。 レコードまたはドキュメントの数と、個々のテーブルまたはコレクションのサイズを決定します。 この情報は、ストレージ要件を見積もり、スケーラビリティの問題を特定するのに役立ちます。

  • データ¥ リレーションシップの特定。 データ要素間のリレーションシップを調べます。 データがどのように接続されているかを理解することで、1 つのテーブルまたはドキュメントの変更が関連するデータにどのように影響するかを判断できます。

  • データ品質の評価。 完全性、正確性、一貫性、一意性などの要素を調べて、データの品質を評価します。 データの整合性とクエリのパフォーマンスに影響を与える可能性のあるデータの異常、欠損値、または重複レコードを識別します。 この手順は、データのクレンジングと改善の領域を特定するのに役立ちます。

  • データ配信のキャプチャ。 各列内の値の分布を分析して、データ パターンを決定します。 頻繁な値とまれな値、外れ値、データの偏りを識別します。 クエリのパフォーマンスを最適化するには、代替キーがパフォーマンスの向上に適切かどうかを分析します。

データ パフォーマンスの監視

データ パフォーマンス監視は、データ ストアの効率を継続的に追跡する手法です。 これには、システムレベル、データベース固有、またはサードパーティの監視ソリューション向けにカスタマイズされたツールを使用して、データ操作に固有のパフォーマンス メトリックを収集および分析することが含まれます。 効果的なデータ パフォーマンス監視により、潜在的なボトルネックを積極的に特定して軽減し、データ関連のプロセスとタスクの効率性を確保できます。

データのパフォーマンスを監視するには、次の戦略を検討してください。

  • データ固有のメトリックを収集します。 データのパフォーマンスに直接関連する主要なメトリックを収集します。 これらのメトリックには、クエリ 応答 時間とデータ スループットが含まれます。

  • データ アラートを設定します。 データ メトリック専用のアラートを設定します。 これらのメトリックで事前定義されたしきい値または異常を使用して、トリガー アラートを生成します。 アラートを使用すると、パフォーマンス メトリックが許容範囲を超えたり、異常な動作を示したりしたときに通知を受け取ることができます。たとえば、データベース クエリに予想よりも時間がかかったり、データ スループットが大幅に低下したりした場合などです。 これらのアラートは、専用の監視ツールまたはカスタム スクリプトを使用して設定できます。

  • データ パフォーマンスに関する問題の診断。 収集されたデータ メトリックを定期的に確認して、データ操作における潜在的なパフォーマンスのボトルネックや劣化を特定します。 視覚化ツールやダッシュボードはこのプロセスで非常に役立ち、データ パフォーマンスの傾向、ボトルネック、外れ値を明らかにするのに役立ちます。 問題が特定されたら、その根本原因を調査し、適切な修復手順を計画します。

データのパーティション分割

パーティション分割では、大規模なデータセットまたは大量のワークロードをもっと小さく管理しやすいサブセットに分割します。 パーティション分割により、ワークロードが分散され、並列処理が改善され、データ パフォーマンスの効率が向上します。 また、特定のニーズやクエリ パターンに基づいて、より効果的なデータ アクセスも保証されます。 データを垂直または水平にパーティション分割できます (シャーディングとも呼ばれます)。 たとえば、Dataverse Elastic テーブルを使用する場合は、パーティション分割キーを何にするかを検討します。

企業戦略 Definition 使用例
垂直分割 各パーティションの特定の列またはフィールドを選択して、テーブルを もっと小さく テーブルに分割します。 各パーティションは完全なデータのサブセットを表します。 列 A、B、C、D を持つテーブルがある場合、列 A と B を持つテーブルを 1 つ作成し、列 C と D を持つテーブルをもう 1 つ作成できます。 - テーブルには多くの列が含まれていますが、クエリはすべての列に同時にアクセスしません。
- 一部の列は他の列よりも大きいため、それらを分離すると I/O パフォーマンスが向上します。
- データ部分によってアクセスパターンが異なります。
水平分割 行または値の範囲に基づいてデータを分割します (シャーディングとも呼ばれます)。 各パーティションには、類似した特性を持つ行のサブセットが含まれます。 行 1 から 1000 までのテーブルがある場合、行 1 から 500 までのパーティションを 1 つ作成し、行 501 から 1000 までのパーティションをもう 1 つ作成することができます。 - データセット は、単一の場所またはサーバーには大きすぎます。
- データは特定の範囲またはフィルターに基づいてアクセスされます。
- パフォーマンスを向上させるために、物理ノードまたはサーバー間でワークロードを分散する必要があります。

データをパーティション分割するには、次の手順を検討してください。

  • データとクエリの分析。 データとクエリ パターンを分析して、適切なパーティション分割またはシャーディング戦略を特定します。 データの性質、アクセス パターン、配布要件を理解します。

  • キーの決定 パーティション分割またはシャード間でデータを分散するには、パーティション キーまたはシャーディング キーを選択します。 データの特性とクエリの要件に基づいてキーを慎重に選択します。

  • ロジックを決定します。 選択したキーに基づいて、パーティション分割またはシャーディングのロジックを決定します。 データを範囲に分割したり、ハッシュ アルゴリズムを適用したり、その他のパーティション分割手法を使用したりすることを検討してください。

クエリを最適化する

クエリを最適化すると、クエリが絞り込まれ、適格なデータと返されるデータが削減されます。 これらの調整により、データ取得の効率と速度が向上します。 その結果、データベースの負荷が軽減され、リソースがより効率的に機能し、ユーザーはよりスムーズなやり取りを楽しめるようになります。

データベース クエリを最適化するには、次の戦略を検討してください。

  • クエリを書き換えます。 複雑なクエリを確認して分析し、書き直す機会を特定します。 クエリ ロジックの再構築、冗長な操作の排除、またはクエリ構文の簡素化を検討してください。

  • N+1 クエリの問題を回避します。 結合とバッチフェッチを使用して関連データを効率的に取得し、データベースへのラウンドトリップの回数を最小限に抑えます。

  • 結合を並べ替えます。 各結合操作の行数を最小限に抑えるために、結合順序を評価して並べ替えることを検討します。 テーブルを結合する順序はクエリのパフォーマンスに影響する可能性があります。

  • クエリをキャッシュする。 頻繁に実行されるクエリの結果を保存して、簡単に再利用できるようにします。 クエリ キャッシュにより、同じクエリを繰り返し実行する必要がなくなり、クエリ処理のオーバーヘッドが削減されます。

  • 監視と調整。 実行時間、リソース使用率、クエリ スループットなどのクエリ パフォーマンス メトリックを監視します。 データベース プロファイリング ツールと監視機能を使用して、パフォーマンスが低いクエリを特定します。 その情報を使用してクエリのパフォーマンスを最適化します。

データのアーカイブと消去

アーカイブとパージは、データストレージを効率化する戦略です。 アーカイブにより、アクセス頻度の低い古いデータが、よりコスト効率の高いストレージに移動されます。 データを消去すると、冗長なデータが完全に削除されます。 どちらの方法も、データ量を削減し、データ アクセス速度を向上させ、バックアップとリカバリの時間を短縮することで、パフォーマンス効率の向上に貢献します。

  • データ量の削減: データが少ないと処理時間が短縮され、ユーザーの要求に迅速に対応できるようになります。
  • データ アクセス速度の向上: トリミングされた データセット により、クエリとデータ取得が高速化され、システムの応答性が最適化されます。
  • バックアップとリカバリ時間の短縮: もっと小さく データセットは、バックアップと復元のプロセスを迅速化し、ダウンタイムを最小限に抑え、一貫したパフォーマンスを保証します。

アーカイブとパージは、データ駆動型システムで最高のパフォーマンス効率を維持するのに役立ちます。

ストレージ負荷の最適化

ストレージ負荷を最適化するということは、ストレージ システムへの要求を合理化することを意味します。 不要なリクエストを排除し、データの取得を強化し、ストレージ システムの過負荷を回避します。 ストレージ負荷を最適化することで、ストレージ システムが正当な要求に応答し続け、最高のパフォーマンスを維持できるようになります。 データ ストアの処理負荷を軽減するための戦略を実装します。 データ ストアの負荷を最適化するには、追従する の戦略を検討してください。

キャッシュの使用

キャッシュは、頻繁にアクセスされるデータを高速アクセス ストレージ領域に保存するため、メイン ソースからデータを取得するよりもデータの取得が速くなります。 この手法は、アクセス時間を短縮し、繰り返しのデータ取得を回避することで、データ パフォーマンスを向上させます。 キャッシュにより、特に頻繁にアクセスされるデータの読み取り速度とユーザーの 応答 時間が向上します。 この方法は、静的データまたはほとんど変更されないデータに最も効果的です。

最適なキャッシュ効率を確保するには、有効期限ポリシー、削除戦略、キャッシュ サイズの管理などの要素を考慮してください。 調節モード 最適なパフォーマンスを得るには、存続時間 (TTL) などの設定を変更します。 キャッシュを使用してストレージ負荷を最適化するには、次の戦略を検討してください。

  • インメモリ キャッシュ: インメモリ キャッシュを実行して、頻繁にアクセスされるデータをメモリに保存し、高速に取得できるようにします。 この手法は、計算やデータベースからの取得にコストがかかるアプリケーション データに使用できます。 メモリ内キャッシュは、頻繁に読み取られるが頻繁に変更されないデータに役立ちます。 たとえば、クラウド フローの変数やキャンバス アプリのコレクションを使用してデータをキャッシュできます。

  • データベース クエリのキャッシュ: この手法を使用してデータベース クエリの結果をキャッシュし、同じクエリが複数回実行されるのを回避します。 データベース クエリ キャッシュは、複雑で時間のかかるデータベース クエリに役立ちます。 クエリの結果をキャッシュすると、同じクエリの後続のリクエストがすぐに返されます。 また、可能であればサーバー側ビューを使用してデータを事前にフィルタリングし、クエリに関連するデータを絞り込むことも検討してください。

  • コンテンツ配信ネットワーク キャッシュ: この手法を使用して、分散ネットワーク サーバーにWebコンテンツをキャッシュし、待ち時間を減らしてコンテンツ配信を改善します。 コンテンツ配信ネットワーク キャッシュは、画像、CSS ファイル、JavaScript ファイルなどの静的コンテンツに効果的です。 コンテンツ配信ネットワークは、コンテンツのコピーを世界中の複数の場所に保存するため、ユーザーは地理的に近いサーバーからコンテンツにアクセスできます。

データの更新を最適化する

データ更新を最適化するには、実行されるデータ更新を評価して、パフォーマンスを確保することが必要です。 更新は、不要な作業を引き起こしたり、ロックの競合を引き起こしたりする可能性があるため、他の操作よりもパフォーマンスに影響を与える可能性があります。

データ更新を最適化する方法を評価するには、次の点を考慮してください。

  • データの変更。 実際の変更が発生していない場合は、データまたはフィルターの事前イメージを使用して自動化を最適化し、作業を最小限に抑えます。 変更されていないデータに対して自動化をトリガーしないでください。

  • 自動化。 データの変更に基づいて更新がいつどのようにトリガーされるかを評価し、フィルターを含めるようにトリガーを最適化します。 たとえば、データ ソース 内の特定のフィールドが変更された場合にのみ自動化をトリガーします。 段階的にトリガー自動化を複数回実行する更新を評価します。 代わりに、すべての処理を処理するカスタム操作を作成できるかどうかを検討してください。 たとえば、注文が発送され、発送日と追跡番号が別々に更新される場合、カスタムの "ShipOrder" 操作で両方を同時に更新できます。

  • デッドロック。 複数のフローが異なる順序で同じデータを更新することが原因で問題が発生する可能性がある、遅い更新操作を評価します。 この非効率性により、ロックの競合や潜在的なデッドロックが発生し、不必要なやり直しが発生する可能性があります。 競合を最小限に抑えるために、異なるリソースを同じ順序で更新します。

  • 一括更新。 テーブルの複数の行に対して操作を実行する場合は、一括操作 の使用を検討してください。

データの移動と処理を最適化する

データの移動と処理を最適化するには、データの抽出、変換、読み込み、処理に関連する操作の効率とパフォーマンスを向上させる必要があります。 データの移動と処理を最適化するには、次の重要な側面を考慮してください。

  • 抽出、変換、ロード (ETL) の最適化: ETLプロセスを最適化して処理時間を最小限に抑えます。 抽出プロセスを合理化し、効率的な変換アルゴリズムを実装し、読み込みプロセスを最適化できます。 各手順を効率的にすると、全体的なワークフローが最適化されます。

  • 並列処理: 並列処理技術を使用してパフォーマンスを向上させます。 データ処理タスクを複数のスレッドまたはノードに分散すると、ワークロードを分割して同時に処理できるため、処理が高速化されます。

  • バッチ処理: 類似のタスクをグループ化して、繰り返し操作によって発生するオーバーヘッドを削減します。 複数のタスクをバッチで処理して、全体の処理時間を短縮します。

データの近接性を考慮した設計

データの近接性とは、データに最も頻繁にアクセスするユーザーまたはサービスの近くにデータを戦略的に配置することを指します。 データとそのユーザー間の物理的または論理的な距離を短縮することで、データ アクセスが高速化し、応答性が向上します。 閉じる の近接性に合わせて設計を最適化するには、次の戦略を検討してください。

  • データ アクセス パターンを評価する: ワークロードのアクセス パターンと頻繁にアクセスされるデータを評価します。 この分析は、最大の利益を得るためにデータをどこに配置すればよいかを判断するのに役立ちます。

  • データの再配置をサポートするソリューションを選択する: アクセス パターンの変化に基づいて動的なデータの再配置を提供し、最適なデータ配置を保証するソリューションを検討してください。

  • データ同期をサポートするソリューションを選択します: 分散したユーザー ベースにサービスを提供する場合は、さまざまなリージョン間でデータ同期を可能にするソリューションを選択して、データ レプリカがユーザーの近くで利用できるようにします。

トレードオフ: 基礎となるデータが頻繁に変更される場合は、キャッシュされたデータが最新の状態に保たれるように、キャッシュ無効化メカニズムを実装します。

Power Platform の促進

データ パフォーマンスを監視する: データ パフォーマンスを監視するには、 Azure Monitor を使用して、インフラストラクチャ メトリック、ログ、アプリケーション データを収集および分析することを検討してください。 モニターを Application Insights などの他のサービスと統合することができます。 Application Insights アプリケーション パフォーマンス監視を提供し、多くのプラットフォームをサポートします。

Application Insights は使用状況とパフォーマンスのデータを収集します。 ログ分析 を使用して、そのデータを Azure リソース全体の構成およびパフォーマンス データと関連付けることができます。 Dataverse 用 Application Insights データ ストリームは現在、Dataverse API 着信呼び出し、Dataverse プラグイン実行呼び出し、Dataverse SDK 呼び出しに関連するパフォーマンス データを提供しています。

キャンバス アプリでクエリ データ パターンを最適化します: 追従する 文書化されたガイダンスと提案。 Power Apps の最適化されたクエリ データ パターン を参照してください。

文書化されたベスト プラクティスとガイダンスに従って、カスタマイズ、拡張、または統合する方法を最適化します。 Dataverse: 追従する Microsoft Dataverse を使用する際のベスト プラクティスとガイダンス を参照してください。

データベース クエリとインデックスのパフォーマンスを最適化します: Azure SQL Databaseのクエリ パフォーマンス分析情報機能を使用して、クエリ、テーブル、データベースを最適化します。 この機能を使用して、クエリのパフォーマンスの問題をトラブルシュートすることもできます。

リレーショナルデータベースの場合、インデックス設計ガイドライン SQL Server インデックス ガイダンス、そして Azure Cosmos DB インデックスガイダンス に従います。 SQL データベースを使用して、クエリのパフォーマンスを向上させるために 自動チューニング を実行します。

SQL データベースの場合は、定期的に インデックスを再編成または再構築 する必要があります。 パフォーマンスを改善するために、実行速度の遅いクエリを特定してそれらを調整します。 多くのデータベース エンジンにはクエリ チューニング機能があります。 詳細については、クエリパフォーマンスのベストプラクティス をご覧ください。

Azure Cosmos DB は、すべての項目のすべてのプロパティにインデックスを付け、任意の文字列または数値の範囲インデックスを適用する デフォルトのインデックス作成ポリシー があります。 このポリシーにより、効率的なクエリ パフォーマンスが提供され、事前にインデックスを管理する必要がなくなります。

ストレージ負荷を最適化: 多くのAzureデータベース サービスは読み取りレプリカをサポートしています。 読み取りレプリカの可用性と構成は、Azure データベース サービスによって異なります。 詳細とオプションについては、各サービスの公式ドキュメントを参照してください。

パフォーマンス効率チェックリスト

完全なレコメンデーションのセットを参照してください。