データ パフォーマンスを最適化するための推奨事項
この Azure Well-Architected Framework パフォーマンス効率チェックリストの推奨事項に適用されます。
PE:08 | データのパフォーマンスを最適化します。 ワークロードでの意図された実際の使用のために、データ ストア、パーティション、インデックスを最適化します。 |
---|
このガイドでは、データ パフォーマンスを最適化するための推奨事項について説明します。 データパフォーマンスの最適化は、ワークロードがデータを処理して格納する効率を改善することです。 ワークロードの操作、トランザクション、または計算はすべて、通常、データの迅速かつ正確な取得、処理、およびストレージに依存します。 データパフォーマンスが最適化されると、ワークロードはスムーズに実行されます。 データのパフォーマンスが損なわれると、パフォーマンス効率が低下するドミノ効果が生じます。 データ パフォーマンスを最適化しないと、応答の遅延、待機時間の増加、スケーラビリティの低下が発生します。 ワークロード全体の効率を危険にさらします。
定義
期間 | 定義 |
---|---|
CAP 定理 | データ整合性のトレードオフを説明するのに役立つ、整合性、可用性、およびパーティション許容度を考慮するために使用されるフレームワーク。 |
データベース インデックスの再構築 | インデックスを削除して再作成するメンテナンス アクティビティ。 |
データベース インデックスの再編成 | 現在のデータベース インデックスを最適化するメンテナンス アクティビティ。 |
データ ストア | データベース、オブジェクト ストア、ファイル共有などのデータを格納するリソース。 |
最終的な一貫性 | 最終的に同期する前にデータ レプリカで一時的な不整合を許容するデータ同期モデル。 |
インデックス | 項目にすばやくアクセスできるデータベース構造。 |
オンライン分析処理 (OLAP) | 大規模なビジネス データベースを整理し、複雑な分析をサポートし、トランザクション システムに悪影響を与えることなく複雑な分析クエリを実行するテクノロジ。 |
オンライン トランザクション処理 (OLTP) | organizationの日常業務で発生したビジネスインタラクションを記録するテクノロジ。 |
オプティミスティック コンカレンシー | 従来のロック メカニズムではなく、スナップショットを使用して更新を行うデータベースを更新し、パフォーマンスとスケーラビリティを向上させるアプローチ。 |
PACELC 定理 | パーティションの許容性、可用性、整合性、待機時間を考慮して、データの整合性のトレードオフを説明するために使用されるフレームワーク。 |
パーティション分割 | データを個別のデータ ストアに物理的に分割するプロセス。 |
クエリのチューニング | データベース クエリの速度を最適化するプロセス。 |
読み取りレプリカ | 書き込みデータベースから読み取りトラフィックをオフロードできるプライマリ データベースのライブ コピー。 |
主要な設計戦略
データの使用を最適化するには、データ ストア、パーティション、インデックスが、意図した用途とワークロードでの実際の使用のために最適化されていることを確認します。 最適化されたデータ使用量により、クエリのパフォーマンスが向上し、リソースの消費量が削減され、システム全体の効率が向上します。 次の戦略を考えます。
プロファイル データ。 データを理解し、データ モデルがワークロードに適していることを確認します。 データ正規化、インデックス作成戦略、パーティション分割手法などの要因を考慮してください。 効率的なデータ取得を行うには、適切なデータ型を選択し、エンティティ間のリレーションシップを定義し、最適なインデックス作成戦略を決定します。
データ ストレージの構成を微調整します。 ワークロードの要件に合わせてデータ ストレージ インフラストラクチャを構成します。 リレーショナル データベース、NoSQL データベース、データ ウェアハウスなど、適切なストレージ テクノロジを選択します。 バッファー サイズ、キャッシュ メカニズム、圧縮などのストレージ設定を最適化します。
クエリ パフォーマンスを最適化します。 ワークロードで実行されるクエリを分析して最適化します。 クエリの最適化、インデックス作成、キャッシュなどの手法を使用します。 ボトルネックを特定するには、クエリ プランとパフォーマンス監視ツールを使用し、必要な改善を行います。
システムを定期的に監視および調整します。 ワークロードのパフォーマンスを継続的に監視し、データ ストレージの構成とクエリの最適化を繰り返します。 パフォーマンス チューニングのベスト プラクティスに基づいて、システム メトリックを分析し、改善の領域を特定し、変更を実装します。
Profile data (プロファイル データ)
データ プロファイルには、ソースからのデータを調べて、それに関する情報を収集することが含まれます。 目的は、ワークロード データの品質、構造、特性を理解することです。 このプロセスにより、欠損値、重複、一貫性のない形式、その他の異常などの問題を特定できます。 効果的なデータ プロファイリングを行う場合は、次の方法を検討してください。
データ構造を理解する。 テーブル、列、リレーションシップなど、データの構造を調べます。 各列に適用されるデータ型、長さ、制約を決定します。 データ構造の評価は、データの編成方法と他のデータ要素との関係を理解するのに役立ちます。
データ ボリュームを分析します。 データの量を評価して、全体的なサイズと増加パターンを理解します。 レコードまたはドキュメントの数と、個々のテーブルまたはコレクションのサイズを決定します。 この情報は、ストレージ要件を見積もり、スケーラビリティの問題を特定するのに役立ちます。
データ リレーションシップを特定する。 主キーリレーションシップや外部キー リレーションシップなど、データ要素間のリレーションシップを調べる。 データがどのように接続されているかを理解することで、1 つのテーブルまたはドキュメントの変更が関連データにどのように影響するかを判断できます。
データ品質を評価する。 完全性、正確性、一貫性、一意性などの要因を調べることで、データの品質を評価します。 データの整合性とクエリのパフォーマンスに影響を与える可能性があるデータの異常、欠損値、または重複するレコードを特定します。 この手順は、データ クレンジングと改善の領域を特定するのに役立ちます。
データ分散をキャプチャします。 各列内の値の分布を分析して、データ パターンを決定します。 頻繁でまれな値、外れ値、データ スキューを特定します。 クエリのパフォーマンスを最適化するには、ディストリビューションに基づいて適切なインデックス作成戦略とクエリ最適化手法を選択します。
データのパフォーマンスを監視する
データ パフォーマンスの監視は、データ ストア、パーティション、インデックスの効率をリアルタイムで一貫して追跡する方法です。 これには、システム レベル、データベース固有、またはサードパーティの監視ソリューション用に調整されたツールを使用して、データ操作に固有のパフォーマンス メトリックの収集と分析が含まれます。 効果的なデータ パフォーマンス監視を使用すると、潜在的なボトルネックを事前に特定して軽減し、データ関連のプロセスとタスクを効率的に行うことができます。 データのパフォーマンスを監視するには、次の戦略を検討してください。
データ固有のメトリックを収集します。 データのパフォーマンスに直接関連する主要なメトリックを収集します。 これらのメトリックには、クエリの応答時間、データ スループット、データ アクセスに関連するディスク I/O、および特定のデータ パーティションの読み込み時間が含まれます。
データ アラートを設定します。 データ メトリック専用のアラートを設定します。 これらのメトリックで定義済みのしきい値または異常を使用してアラートをトリガーします。 アラートを使用すると、パフォーマンス メトリックが許容範囲を超えた場合や異常な動作が表示された場合に通知を受信できます。 たとえば、データベース クエリの所要時間が予想よりも長い場合や、データスループットが大幅に低下した場合は、アラートがトリガーされます。 これらのアラートは、特殊な監視ツールまたはカスタム スクリプトを使用して設定できます。
データ パフォーマンスの問題を診断します。 収集されたデータ メトリックを定期的に確認して、データ操作の潜在的なパフォーマンスのボトルネックや低下を特定します。 視覚化ツールまたはダッシュボードは、このプロセスで非常に重要であり、データ パフォーマンスの傾向、ボトルネック、外れ値を強調するのに役立ちます。 特定されたら、これらの問題の根本原因を掘り下げ、適切な修復手順を戦略化します。
データのパーティション分割
パーティション分割には、大規模なデータセットまたは大量のワークロードを、より小さく管理しやすいサブセットに分割する必要があります。 パーティション分割では、ワークロードを分散し、並列処理を改善することで、データのパフォーマンス効率が向上します。 また、特定のニーズとクエリ パターンに基づいて、より効果的なデータ アクセスが保証されます。 データは、垂直方向または水平方向にパーティション分割できます (シャーディングとも呼ばれます)。
戦略 | 定義 | 例 | ユース ケース |
---|---|---|---|
垂直的パーティション分割 | 各パーティションの特定の列またはフィールドを選択して、テーブルを小さなテーブルに分割します。 各パーティションは、完全なデータのサブセットを表します。 | 列 A、B、C、D を含むテーブルがある場合は、列 A と B、列 C と D を含むテーブルを 1 つ作成できます。 | - テーブルには多くの列が含まれていますが、クエリはすべての列に一緒にアクセスするわけではありません。 - 一部の列は他の列よりも大きく、それらを分離すると I/O パフォーマンスが向上する可能性があります。 - さまざまなデータ パーツに多様なアクセス パターンがあります。 |
行方向のパーティション分割 | 行または値の範囲に基づいてデータを分割します (シャーディングとも呼ばれます)。 各パーティションには、同様の特性を持つ行のサブセットが含まれています。 | 行 1 から 1000 のテーブルがある場合は、行 1 から 500 のパーティションと 501 から 1000 行のパーティションを作成できます。 | - データセットが 1 つの場所またはサーバーに対して大きすぎます。 - データは、特定の範囲またはフィルターに基づいてアクセスされます。 - パフォーマンスを向上させるために、ワークロードを物理ノードまたはサーバーに分散する必要があります。 |
データをパーティション分割するには、次の手順を検討してください。
データとクエリを分析する。 データとクエリ パターンを分析して、適切なパーティション分割またはシャーディング戦略を特定します。 データ、アクセス パターン、および配布要件の性質を理解します。
キーを決定します。 パーティションまたはシャード間でデータを分散するには、パーティション分割キーまたはシャーディング キーを選択します。 データ特性とクエリ要件に基づいてキーを慎重に選択します。
ロジックを決定します。 選択したキーに基づいてパーティション分割またはシャーディング ロジックを決定します。 データを範囲に分割するか、ハッシュ アルゴリズムを適用するか、他のパーティション分割手法を使用することを検討してください。
インフラストラクチャを構成します。 パーティション分割またはシャーディングをサポートするようにデータベース システムを構成します。 必要なインフラストラクチャを作成し、パーティションまたはシャードを定義し、データ分散を構成することを検討してください。
詳細については、「 Data partitioning guidance (データのパーティション分割のガイダンス)」を参照してください。
データベース クエリを最適化する
データベース クエリを最適化すると、インデックス ヒントやキャッシュなどの手法を使用してクエリが絞り込まれます。 これらの調整により、データ取得の効率と速度が向上します。 その結果、データベースのワークロードが軽くなり、リソースがより効果的に機能し、ユーザーはよりスムーズな対話を楽しむことができます。 データベース クエリを最適化するには、次の方法を検討してください。
クエリを書き換える。 複雑なクエリを確認して分析し、それらを書き換える機会を特定します。 クエリ ロジックの再構築、冗長な操作の排除、またはクエリ構文の簡略化を検討してください。
N+1 クエリの問題を回避します。 結合とバッチ フェッチを使用して関連データを効率的に取得することで、データベースへのラウンドトリップの数を最小限に抑えます。
結合を並べ替えます。 クエリ プランを評価し、結合順序を並べ替えて、各結合操作の行数を最小限に抑えるようにすることを検討します。 テーブルを結合する順序は、クエリのパフォーマンスに影響する可能性があります。
インデックス ヒントを使用します。 データベース エンジンがクエリの実行時にインデックスの使用を指定できるように、インデックス ヒントを使用します。 インデックス ヒントは、オプティマイザーが最も適切なインデックスを選択するようにガイドします。
キャッシュ クエリ。 頻繁に実行されるクエリの結果をメモリに格納します。 クエリ キャッシュを使用すると、同じクエリを繰り返し実行する必要がなくなり、クエリ処理のオーバーヘッドが軽減されます。
ロックを最適化します。 クエリで不要または制限の厳しいロック ヒントを回避します。 効率的なロック戦略により、クエリのパフォーマンスとコンカレンシーを向上させることができます。 データベース システムが提供する最適化されたロック メカニズムを適用します。 分離レベルを分析して調整し、データの一貫性とクエリのパフォーマンスのバランスを取る。
監視とチューニング。 ランタイム、リソース使用率、クエリ スループットなどのクエリ パフォーマンス メトリックを監視します。 データベース プロファイル ツールと監視機能を使用して、パフォーマンスの低いクエリを特定します。 収集されたパフォーマンス データに基づいてクエリ プランを評価および微調整します。 クエリ プランと待機統計を分析してボトルネックを特定します。 その情報を使用して、クエリのパフォーマンスを最適化します。
インデックスのパフォーマンスを最適化する
インデックスを使用すると、データベースで特定の列またはフィールドを使用してデータをすばやく検索できるため、データ取得速度が向上します。 これらのインデックスを最適化すると、並べ替えと結合の操作がより効率的になり、クエリが高速になります。 適切に最適化されたインデックスは、クエリに必要なディスク I/O 操作で削減されます。 不要なインデックスまたは冗長インデックスを削除すると、貴重なストレージ領域も解放されます。 インデックスのパフォーマンスを最適化するには、次の方法を検討してください。
クエリ パターンを分析する。 データベースで実行されるクエリ パターンを理解します。 頻繁に実行され、パフォーマンスが低下する可能性があるクエリを特定します。 クエリ パターンを分析して、パフォーマンスを最適化するために役立つインデックスを決定します。
既存のインデックスを評価します。 データベース内の既存のインデックスを確認します。 使用状況、パフォーマンスの影響、およびクエリ パターンとの関連性を評価します。 書き込みパフォーマンスを向上させ、ストレージのオーバーヘッドを削減するために削除できる冗長インデックスまたは未使用のインデックスを特定します。
インデックス作成の列を識別します。 クエリの where、 join、order by 句で頻繁に使用される列を特定します。 これらの列は、高速なデータ取得を可能にできるため、インデックス作成の候補となる可能性があります。
適切なインデックスの種類を選択します。 データベース システムに基づいて適切なインデックスの種類を選択します。 一般的なオプションには、等値クエリと範囲クエリの b ツリー インデックス、完全一致クエリのハッシュ インデックス、テキスト検索操作用のフルテキスト インデックスがあります。 クエリの要件に最も一致するインデックスの種類を選択します。
インデックス列の順序を検討してください。 複合インデックスまたは複数の列を含むインデックスを作成する場合は、列の順序を考慮してください。 クエリで最も頻繁に使用される列をインデックスの先頭に配置します。 列の順序は、ワークロードで幅広いクエリに対してインデックスを効果的に使用するのに役立ちます。
インデックス サイズのバランスを取る。 カーディナリティが低い列、または個別の値の数が少ない列にはインデックスを作成しないでください。 このようなインデックスは非効率的であり、データベースのサイズが大きくなる可能性があります。 代わりに、選択度が高いインデックス列。
インデックスの使用を維持します。 インデックスの使用状況とパフォーマンスを継続的に監視します。 クエリ パターンまたはパフォーマンス要件の変更に基づいて、新しいインデックスを作成したり、既存のインデックスを変更したりする機会を探します。 役に立たなくなったインデックスを削除または更新します。 インデックスにはメンテナンス のオーバーヘッドがあります。 データが変更されると、インデックスが断片化してパフォーマンスに影響を与える可能性があります。 最適なパフォーマンスを確保するために、インデックスの再構築や再構成などのインデックス メンテナンス タスクを定期的に実行します。
テストと検証。 運用環境でインデックスを修正する前に、徹底的なテストと検証を行います。 代表的なワークロードを使用して、インデックスリビジョンのパフォーマンス効果を測定します。 定義済みのベンチマークに対する機能強化を確認します。
トレードオフ: B ツリー インデックスのストレージ オーバーヘッドが高く、完全一致クエリが遅くなる可能性があります。 ハッシュ インデックスは、範囲クエリや比較演算子には適していません。 フルテキスト インデックスのストレージ要件が高く、テキスト以外のデータ クエリが遅くなる可能性があります。
データ圧縮を検討する
データ圧縮は、ストレージ領域を最適化し、ワークロードのパフォーマンス効率を向上させるために、データのサイズを小さくするプロセスです。 圧縮されたデータは、送信に必要なストレージ領域と帯域幅が少なくて済み、データ転送が高速になります。 データを圧縮して、ストレージのフットプリントを削減し、データ アクセス時間を短縮します。 データを圧縮すると、I/O 操作とネットワーク帯域幅の要件が削減されます。
無損失圧縮と損失圧縮は、データ圧縮アルゴリズムです。 無損失圧縮アルゴリズムは、情報を失うことなくデータのサイズを小さくします。 損失圧縮アルゴリズムは、重要度の低い情報や冗長な情報を削除することで、高い圧縮率を実現します。
トレードオフ: データを圧縮および圧縮解除するには、CPU やメモリなどの計算リソースが必要です。 圧縮するデータが多いほど、必要なリソースが多くなります。
データのアーカイブと消去
アーカイブと消去は、データ ストレージを効率化する戦略です。 アーカイブすると、アクセス頻度が低い古いデータが、よりコスト効率の高いストレージに再配置されます。 データを消去すると、冗長なデータが完全に削除されます。 これらは、データ量を減らし、データ アクセス速度を向上させ、バックアップと回復時間を短縮することで、パフォーマンス効率に貢献します。
データ量の削減: データの削減は処理時間の短縮を意味し、ユーザーの要求に対する迅速な応答を保証します。
データ アクセス速度の向上: トリミングされたデータセットを使用すると、より迅速なクエリとデータ取得が可能になり、システムの応答性が最適化されます。
バックアップと回復時間の短縮: データセットを小さくすると、バックアップと復元のプロセスが高速化され、ダウンタイムが最小限に抑えられ、一貫したパフォーマンスが確保されます。
アーカイブと消去は、データドリブン システムのピーク パフォーマンス効率を維持する上でインストルメントです。
ストレージの負荷を最適化する
ストレージの負荷を最適化することは、ストレージ システムへの要求を合理化することを意味します。 不要な要求を排除するのに役立ちます。 また、データの取得を強化し、ストレージの圧倒的な使用を防ぎます。 ストレージ負荷を最適化することで、ストレージ システムは正当な要求に対する応答性を維持し、ピーク パフォーマンスを維持できます。 データ ストアの処理負荷を軽減する戦略を実装します。 データ ストアの負荷を最適化するには、次の方法を検討してください。
キャッシュを使用する
キャッシュでは、一般的にアクセスされるデータが高速アクセスストレージ領域に格納されるため、メインソースからデータを取得するよりも迅速にデータを取得できます。 この手法では、アクセス時間を短縮し、反復的なデータフェッチを回避することで、データのパフォーマンスを向上させます。 キャッシュを使用すると、読み取り速度とユーザーの応答時間が向上します。特に、頻繁にアクセスされるデータの場合、この方法は、ほとんど変更されない静的データまたはデータに最も効果的です。
最適なキャッシュ効率を確保するには、有効期限ポリシー、削除戦略、キャッシュ サイズの管理などの要因を考慮してください。 最適なパフォーマンスを得るために、Time to Live (TTL) などの設定を調整します。 キャッシュを使用してストレージの負荷を最適化するには、次の方法を検討してください。
メモリ内キャッシュ: メモリ内キャッシュを実行して、頻繁にアクセスされるデータをメモリに格納して高速に取得します。 この手法は、データベースの計算や取得にコストがかかるアプリケーション データに使用できます。 メモリ内キャッシュは、頻繁に読み取るが頻繁に変更しないデータに役立ちます。
データベース クエリ キャッシュ: この手法を使用して、同じクエリを複数回実行しないようにデータベース クエリの結果をキャッシュします。 データベース クエリ キャッシュは、複雑で時間のかかるデータベース クエリに役立ちます。 クエリの結果をキャッシュすると、同じクエリに対する後続の要求が迅速に返されます。
コンテンツ配信ネットワーク キャッシュ: この手法を使用して、分散ネットワーク サーバー上の Web コンテンツをキャッシュし、待機時間を短縮し、コンテンツ配信を改善します。 コンテンツ配信ネットワーク キャッシュは、画像、CSS ファイル、JavaScript ファイルなどの静的コンテンツに有効です。 コンテンツ配信ネットワークでは、世界中の複数の場所にコンテンツのコピーが格納されるため、ユーザーは地理的に近いサーバーからコンテンツにアクセスできます。
読み取りレプリカを使用する
多くのデータベースでは、複数の読み取りレプリカがサポートされています。 読み取りクエリをレプリカ間で分散して、書き込みデータベースの需要を最小限に抑えます。 各読み取りレプリカは、トラフィックのサブセットを処理できるため、パフォーマンスを向上させることができます。
同期を維持すると予想される複数のデータ レプリカを含むワークロードがある場合は、PACELC 定理を使用してこの分散システムをモデル化すると便利です。 PACELC 定理は、システムの非パーティション状態における待機時間と定数のトレードオフの選択を理解するのに役立ちます。 この情報は、パーティション分割および非パーティション状態のシステムに最適なデータベース エンジンとデータ同期戦略を選択するのに役立ちます。 詳細については、「 コマンドとクエリの責任分離 (CQRS) パターン」を参照してください。
データの一貫性を最適化する
分散ワークロードでは、データが複数のノードまたは場所にまたがって存在する場合、選択した一貫性のレベルによって、1 つの場所の変更が他の場所にどの程度迅速に反映されるかが決まります。 より厳密な一貫性を選択すると、より多くのコンピューティング リソースが消費され、パフォーマンス効率に悪影響を及ぼす可能性があります。 一方、最終的な整合性のような厳密でない整合性レベルでは、ノード間で一時的な不整合が発生しますが、パフォーマンス効率が向上する可能性があります。
最終的な整合性は、データの精度とワークロードのパフォーマンスのバランスを取ります。 変更は即座ではなく徐々に広がり、ワークロードの応答性とデータ処理速度が向上します。 有効期間が短い不整合が発生しますが、ワークロードは最終的にすべてのノードで一貫したデータを提供します。 最終的な整合性を選択すると、ワークロードのパフォーマンスが向上し、可用性とスケーラビリティがさらに向上します。
データ更新を最適化する
オプティミスティック コンカレンシーを使用して、同じデータに対する同時更新を処理できます。 データをロックして他の更新を防ぐ代わりに、オプティミスティック コンカレンシーを使用すると、複数のユーザーまたはプロセスを同時に動作させ、競合がまれであると想定します。
オプティミスティック コンカレンシーでは、各更新操作には、更新時のデータの状態を表すバージョンまたはタイムスタンプが含まれます。 競合する更新プログラムが検出されると、更新プログラムを拒否するか変更をマージすることで、競合が解決されます。
オプティミスティック コンカレンシーは競合を最小限に抑え、不要なロックなしで同時更新を続行できます。 これにより、リソースの待機時間が短縮され、高いスループットが提供されます。
データの移動と処理を最適化する
データの移動と処理の最適化には、データ抽出、変換、読み込み、処理に関連する操作の効率とパフォーマンスの向上が含まれます。 データの移動と処理を最適化する上で、次の重要な側面を考慮してください。
抽出、変換、読み込み (ETL) の最適化: ETL プロセスを最適化して処理時間を最小限に抑えます。 抽出プロセスを効率化し、効率的な変換アルゴリズムを実装し、読み込みプロセスを最適化できます。 各ステップを効率的に行うと、ワークフロー全体を最適化できます。
並列処理: 並列処理手法を利用してパフォーマンスを向上させます。 データ処理タスクを複数のスレッドまたはノードに分散すると、ワークロードを同時に分割して処理できるため、処理が高速になります。
バッチ処理: 同様のタスクをグループ化して、繰り返しの操作によるオーバーヘッドを軽減します。 バッチで複数のタスクを処理して、全体的な処理時間を短縮します。
ストレージ設計を最適化する
ストレージ設計を最適化するには、正確なデータ ストレージ アーキテクチャを作成し、適切なストレージ テクノロジを選択する必要があります。 合理化されたストレージ設計により、データ アクセス、取得、操作が強化されます。 戦略的なストレージ設計により、ワークロードは応答時間と全体的な機能を向上させます。
データの近接性を設計する
データの近接性とは、最も頻繁にアクセスするユーザーまたはサービスに近いデータの戦略的配置を指します。 データとユーザーの間の物理的または論理的な距離を減らすことで、データの近接性により、データ アクセスの高速化と応答性の向上が保証されます。 近接性のために設計を最適化するには、次の戦略を検討してください。
データ アクセス パターンを評価する: ワークロードのアクセス パターンと頻繁にアクセスされるデータを評価します。 この分析は、最大限のメリットを得るためにデータを配置する場所を決定するのに役立ちます。
データ再配置をサポートするソリューションを選択する: アクセス パターンの変更に基づいて動的なデータ再配置を提供し、最適なデータの配置を確保するソリューションを検討します。
データ同期をサポートするソリューションを選択する: 分散ユーザー ベースに対応する場合は、さまざまなリージョン間でデータ同期を容易にするソリューションを選択し、ユーザーに近接してデータ レプリカを使用できるようにします。
トレードオフ: 基になるデータが頻繁に変更される場合は、キャッシュされたデータが最新の状態に保たれるように、キャッシュ無効化メカニズムを実装します。
ポリグロット永続化を使用する
ポリグロット永続化は、複数のデータ ストレージ テクノロジを使用して、アプリケーションまたはシステム内のさまざまな種類のデータを格納および管理する方法です。 さまざまな種類のデータベースまたはストレージ ソリューションが、さまざまなデータ要件に対応します。
ポリグロット永続化では、各データ ストレージ テクノロジの利点を利用して、データの種類ごとに最適なパフォーマンスとスケーラビリティを確保します。 たとえば、リレーショナル データベースを使用して、構造化されたトランザクション データを格納できます。 また、NoSQL データベースを使用して、非構造化データまたは半構造化データを格納できます。
データの要件に基づいて、各データ ストレージ テクノロジのスキーマを設計します。 リレーショナル データベースの場合は、適切なリレーションシップを持つ正規化されたテーブルを作成できます。 NoSQL データベースの場合は、ドキュメント構造またはキーと値のペアを定義できます。 API、データ アクセス層、データ統合パイプラインなど、各データ ストレージ テクノロジと対話するために必要なコンポーネントを開発します。 アプリケーションが適切なデータ ストアに対してデータの読み取りと書き込みを行うことができることを確認します。
トレードオフ: 正規化が低いデータ構造では、パフォーマンスは向上しますが、複雑さが生じます。
OLTP システムと OLAP システムを分離する
OLTP システムと OLAP システムを分離するために、トランザクション処理タスクと分析処理タスク用に個別のシステムを設計および展開します。 この分離により、各システムを特定のワークロードと特性に合わせて最適化できます。
OLTP システムは、リアルタイムトランザクション処理に使用されます。 個々のトランザクションを効率的かつ確実に処理します。 OLTP システムは、通常、オンライン注文処理、在庫管理、顧客データ管理などの日常的な運用タスクを実行するために使用されます。 OLTP システムは、応答性、一貫性、コンカレンシーに優先順位を付けます。
OLAP システムは、複雑な分析処理とレポート作成に使用されます。 大量のデータを処理し、集中的な計算と集計を実行します。 OLAP システムは、ビジネス インテリジェンス、データ マイニング、意思決定のサポートなどのタスクに使用されます。 OLAP システムは、クエリのパフォーマンス、データ集計、多次元分析に優先順位を付けます。
OLTP システムと OLAP システムを分離する場合は、適切なリソースを割り当て、その特定のワークロードに合わせて各システムを最適化できます。 分離を使用すると、各システムに異なるデータ モデリング手法を適用できます。 OLTP システムでは、通常、効率的なトランザクション処理のために正規化されたスキーマが使用されます。 OLAP システムでは、クエリのパフォーマンスを最適化するために、非正規化されたスキーマまたはデータ ウェアハウス手法を使用する場合があります。
Azure ファシリテーション
プロファイル データ: Azure には、Azure Data Catalog、Azure Purview、Azure Synapse Analytics などのデータのプロファイリングに使用できるツールとサービスが用意されています。 これらのツールを使用すると、さまざまなソースからデータを抽出、変換、読み込み、データ品質チェックを実行し、データに関する分析情報を得ることができます。
データ パフォーマンスの監視: データのパフォーマンスを監視するために、Azure Monitor を使用して、インフラストラクチャのメトリック、ログ、アプリケーション データを収集および分析できます。 Monitor は、Application Insights などの他のサービスと統合できます。 Application Insights は、アプリケーションパフォーマンスの監視を提供し、多くのプラットフォームをサポートします。
Application Insights では、使用状況とパフォーマンス データが収集されます。 Log Analytics を使用して、そのデータを Azure リソース全体の構成データとパフォーマンス データと関連付けることができます。
Azure SQLと Azure Cosmos DB の分析情報機能を使用して、データベースを監視できます。 この機能を使用すると、データベースのパフォーマンスの問題を診断および調整できます。
データのパーティション分割: Azure では、さまざまなデータ ストアに対してさまざまなパーティション分割戦略が提供されます。 各データ ストアには、データパーティション分割に関する考慮事項と構成オプションが異なる場合があります。 詳細については、「 データパーティション分割戦略」を参照してください。
データベース クエリとインデックスのパフォーマンスの最適化: Azure SQL Database のクエリ パフォーマンス分析情報機能を使用して、クエリ、テーブル、データベースを最適化します。 この機能を使用して、クエリのパフォーマンスの問題を特定してトラブルシューティングできます。
リレーショナル データベースの場合は、インデックス設計ガイドライン、SQL Serverインデックス ガイダンス、Azure Cosmos DB インデックス ガイダンスに従う必要があります。 SQL Databaseを使用して、クエリの自動チューニングを実行してパフォーマンスを向上させます。
SQL データベースでは、インデックスを定期的に 再構成または再構築する必要があります。 低速なクエリを特定し、パフォーマンスを向上させるために調整します。 多くのデータベース エンジンにはクエリ チューニング機能があります。 詳細については、「 クエリパフォーマンスのベスト プラクティス」を参照してください。
Azure Cosmos DB には、すべてのアイテムのすべてのプロパティ にインデックスを 作成し、任意の文字列または数値に範囲インデックスを適用する既定のインデックス作成ポリシーがあります。 このポリシーを使用すると、効率的なクエリ パフォーマンスが提供され、インデックスを事前に管理する必要はありません。
ストレージの負荷の最適化: 多くの Azure データベース サービスでは、読み取りレプリカがサポートされています。 読み取りレプリカの可用性と構成は、Azure データベース サービスによって異なります。 詳細とオプションについては、各サービスの公式ドキュメントを参照してください。
ストレージ設計の最適化: Azure には、ワークロードのニーズに合わせてさまざまなデータ ストアが用意されています。 データ ストアの種類を理解 し、 アプリケーションの Azure データ ストアを選択します。
関連リンク
- SQL Databaseでの自動チューニング
- Azure Cosmos DB
- Azure Cosmos DB インデックスのガイダンス
- Azure SQL
- クエリ パフォーマンスに関するベスト プラクティス
- CQRS パターン
- データのパーティション分割のガイダンス
- データのパーティション分割戦略
- 既定のインデックス作成ポリシー
- インデックスの設計ガイダンス
- OLAP の概要
- OLTP の概要
- パーティション分割のベスト プラクティス
- インデックスの再構成または再構築
- アプリケーションの Azure データ ストアを選択する
- インデックスのSQL Serverガイダンス
- データ ストアの種類を理解する
パフォーマンス効率のチェックリスト
推奨事項の完全なセットを参照してください。