この Azure Well-Architected Framework のパフォーマンス効率チェックリストの推奨事項に適用されます。
| PE:08 | データのパフォーマンスを最適化します。 データ ストア、パーティション、インデックスを、ワークロードでの意図した実際の使用に合わせて最適化します。 |
|---|
このガイドでは、データ パフォーマンスを最適化するための推奨事項について説明します。 データパフォーマンスの最適化は、ワークロードがデータを処理して格納する効率を改善することです。 通常、すべてのワークロード操作、トランザクション、または計算は、データの迅速かつ正確な取得、処理、およびストレージに依存します。 データパフォーマンスが最適化されると、ワークロードはスムーズに実行されます。 データのパフォーマンスが損なわれると、パフォーマンス効率が低下するドミノ効果が生じます。 データ パフォーマンスを最適化しないと、応答の遅延、待機時間の増加、スケーラビリティの低下が発生します。 ワークロード全体の効率を危険にさらします。
定義
| 任期 | Definition |
|---|---|
| CAP 定理 | データ整合性のトレードオフを説明するために、整合性、可用性、パーティションの許容度を考慮するために使用されるフレームワーク。 |
| データベース インデックスの再構築 | インデックスを削除して再作成するメンテナンス アクティビティ。 |
| データベース インデックスの再編成 | 現在のデータベース インデックスを最適化するメンテナンス アクティビティ。 |
| データ ストア | データベース、オブジェクト ストア、ファイル共有などのデータを格納するリソース。 |
| 最終的な整合性 | 最終的に同期する前にデータ レプリカの一時的な不整合を許容するデータ同期モデル。 |
| Index | 項目にすばやくアクセスできるデータベース構造。 |
| オンライン分析処理 (OLAP) | 大規模なビジネス データベースを整理し、複雑な分析をサポートし、トランザクション システムに悪影響を与えることなく複雑な分析クエリを実行するテクノロジ。 |
| オンライン トランザクション処理 (OLTP) | 組織の日常業務におけるビジネス上の相互作用を記録するテクノロジ。 |
| オプティミスティック コンカレンシー | 従来のロック メカニズムではなく、スナップショットを使用して更新を行うデータベースを更新し、パフォーマンスとスケーラビリティを向上させるアプローチ。 |
| PACELC 定理 | パーティションの許容範囲、可用性、整合性、待機時間を考慮して、データ整合性のトレードオフを説明するために使用されるフレームワーク。 |
| パーティショニング | データを個別のデータ ストアに物理的に分割するプロセス。 |
| クエリのチューニング | データベース クエリの速度を最適化するプロセス。 |
| 読み取りレプリカ | 書き込みデータベースから読み取りトラフィックをオフロードできるプライマリ データベースのライブ コピー。 |
データの使用を最適化するには、データ ストア、パーティション、インデックスが意図した用途とワークロードでの実際の使用に合わせて最適化されていることを確認します。 最適化されたデータの使用により、クエリのパフォーマンスが向上し、リソースの消費量が削減され、システム全体の効率が向上します。 次の戦略を検討してください。
プロファイル データ。 データを理解し、データ モデルがワークロードに適していることを確認します。 データの正規化、インデックス作成戦略、パーティション分割手法などの要因を考慮してください。 効率的なデータ取得を行うには、適切なデータ型を選択し、エンティティ間のリレーションシップを定義し、最適なインデックス作成戦略を決定します。
データ ストレージの構成を微調整します。 ワークロードの要件に合わせてデータ ストレージ インフラストラクチャを構成します。 リレーショナル データベース、NoSQL データベース、データ ウェアハウスなど、適切なストレージ テクノロジを選択します。 バッファー サイズ、キャッシュ メカニズム、圧縮などのストレージ設定を最適化します。
クエリのパフォーマンスを最適化します。 ワークロードで実行されるクエリを分析して最適化します。 クエリの最適化、インデックス作成、キャッシュなどの手法を使用します。 ボトルネックを特定するには、クエリ プランとパフォーマンス監視ツールを使用し、必要な改善を行います。
システムを定期的に監視および調整します。 ワークロードのパフォーマンスを継続的に監視し、データ ストレージの構成とクエリの最適化を反復処理します。 パフォーマンス チューニングのベスト プラクティスに基づいて、システム メトリックを分析し、改善の領域を特定し、変更を実装します。
Profile data (プロファイル データ)
データ プロファイルでは、ソースからのデータを調べて、そのデータに関する情報を収集します。 目的は、ワークロード データの品質、構造、特性を理解することです。 このプロセスにより、欠損値、重複、一貫性のない形式、その他の異常などの問題を特定できます。 効果的なデータ プロファイリングを行う場合は、次の戦略を検討してください。
データ構造を理解する。 テーブル、列、リレーションシップなど、データの構造を調べます。 各列に適用されるデータ型、長さ、および制約を決定します。 データ構造の評価は、データの編成方法と、データが他のデータ要素にどのように関連しているかを理解するのに役立ちます。
データ ボリュームを分析します。 データの量を評価して、全体的なサイズと増加パターンを理解します。 レコードまたはドキュメントの数と、個々のテーブルまたはコレクションのサイズを決定します。 この情報は、ストレージ要件を見積もり、スケーラビリティの問題を特定するのに役立ちます。
データ リレーションシップを識別します。 主キーと外部キーのリレーションシップなど、データ要素間のリレーションシップを調べる。 データの接続方法を理解して、1 つのテーブルまたはドキュメントの変更が関連データにどのように影響するかを判断できます。
データ品質を評価します。 完全性、精度、一貫性、一意性などの要因を調べることで、データの品質を評価します。 データの整合性とクエリのパフォーマンスに影響を与える可能性があるデータの異常、欠損値、または重複レコードを特定します。 この手順は、データ クレンジングと改善の領域を特定するのに役立ちます。
データ分散をキャプチャします。 各列内の値の分布を分析して、データ パターンを決定します。 頻繁でまれな値、外れ値、データ スキューを特定します。 クエリのパフォーマンスを最適化するには、ディストリビューションに基づいて適切なインデックス作成戦略とクエリ最適化手法を選択します。
データのパフォーマンスを監視する
データ パフォーマンス監視は、データ ストア、パーティション、インデックスの効率をリアルタイムで一貫して追跡する方法です。 これには、システム レベル、データベース固有、またはサードパーティの監視ソリューション用に調整されたツールを使用して、データ操作に固有のパフォーマンス メトリックの収集と分析が含まれます。 効果的なデータ パフォーマンス監視を使用すると、潜在的なボトルネックを事前に特定して軽減し、データ関連のプロセスとタスクを効率的にすることができます。 データのパフォーマンスを監視するには、次の戦略を検討してください。
データ固有のメトリックを収集します。 データのパフォーマンスに直接関連する主要なメトリックを収集します。 これらのメトリックには、クエリ応答時間、データ スループット、データ アクセスに関連するディスク I/O、および特定のデータ パーティションの読み込み時間が含まれます。
データ アラートを設定します。 データ メトリック専用のアラートを設定します。 これらのメトリックで定義済みのしきい値または異常を使用して、アラートをトリガーします。 アラートを使用すると、パフォーマンス メトリックが許容範囲を超えた場合や異常な動作が表示されたときに通知を受け取ることができます。 たとえば、データベース クエリの所要時間が予想よりも長い場合や、データ スループットが大幅に低下した場合は、アラートがトリガーされます。 これらのアラートは、特殊な監視ツールまたはカスタム スクリプトを使用して設定できます。
データ パフォーマンスの問題を診断します。 収集されたデータ メトリックを定期的に確認して、潜在的なパフォーマンスのボトルネックやデータ操作の低下を特定します。 視覚化ツールまたはダッシュボードは、このプロセスで非常に重要であり、データ パフォーマンスの傾向、ボトルネック、外れ値を強調するのに役立ちます。 特定されたら、これらの問題の根本原因を掘り下げ、適切な修復手順を戦略化します。
データのパーティション分割
パーティション分割には、大規模なデータセットまたは大量のワークロードを、管理しやすい小さなサブセットに分割する必要があります。 パーティション分割では、ワークロードを分散し、並列処理を改善することで、データのパフォーマンス効率が向上します。 また、特定のニーズとクエリ パターンに基づいて、より効果的なデータ アクセスが保証されます。 データは、垂直方向または水平方向にパーティション分割できます (シャーディングとも呼ばれます)。
| 戦略 | Definition | Example | 活用事例 |
|---|---|---|---|
| 垂直パーティション分割 | パーティションごとに特定の列またはフィールドを選択して、テーブルをより小さなテーブルに分割します。 各パーティションは、完全なデータのサブセットを表します。 | 列 A、B、C、および D を含むテーブルがある場合は、列 A と B を含むテーブルを 1 つ作成し、もう 1 つは列 C と D を持つテーブルを作成できます。 | - テーブルには多数の列が含まれていますが、クエリはすべての列に一緒にアクセスするわけではありません。 - 一部の列は他の列よりも大きく、分離すると I/O パフォーマンスが向上する可能性があります。 - 異なるデータ パーツには、さまざまなアクセス パターンがあります。 |
| 水平パーティション分割 | 行または値の範囲 (シャーディングとも呼ばれます) に基づいてデータを分割します。 各パーティションには、似た特性を持つ行のサブセットが含まれています。 | 行が 1 ~ 1000 のテーブルがある場合は、行 1 から 500 のパーティションと 501 ~ 1000 行のパーティションを作成できます。 | - データセットが 1 つの場所またはサーバーに対して大きすぎます。 - データは、特定の範囲またはフィルターに基づいてアクセスされます。 - パフォーマンスを向上させるために、ワークロードを物理ノードまたはサーバーに分散する必要があります。 |
データをパーティション分割するには、次の手順を検討します。
データとクエリを分析します。 データとクエリ パターンを分析して、適切なパーティション分割またはシャーディング戦略を特定します。 データ、アクセス パターン、および配布要件の性質を理解します。
キーを決定します。 パーティションまたはシャード間でデータを分散するには、パーティション分割キーまたはシャーディング キーを選択します。 データの特性とクエリの要件に基づいてキーを慎重に選択します。
ロジックを決定します。 選択したキーに基づいてパーティション分割またはシャーディング ロジックを決定します。 データを範囲に分割するか、ハッシュ アルゴリズムを適用するか、他のパーティション分割手法を使用することを検討してください。
インフラストラクチャを構成します。 パーティション分割またはシャーディングをサポートするようにデータベース システムを構成します。 必要なインフラストラクチャを作成し、パーティションまたはシャードを定義し、データ分散を構成することを検討してください。
詳細については、「 データのパーティション分割のガイダンス」を参照してください。
データベース クエリを最適化する
データベース クエリを最適化すると、インデックス ヒントやキャッシュなどの手法を使用してクエリが調整されます。 これらの調整により、データ取得の効率と速度が向上します。 その結果、データベースのワークロードが軽くなり、リソースがより効果的に動作し、ユーザーはよりスムーズな対話を楽しむことができます。 データベース クエリを最適化するには、次の方法を検討してください。
クエリを書き換える。 複雑なクエリを確認して分析し、それらを書き換える機会を特定します。 クエリ ロジックの再構築、冗長な操作の排除、またはクエリ構文の簡略化を検討してください。
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 プロセスを最適化して処理時間を最小限に抑えます。 抽出プロセスを効率化し、効率的な変換アルゴリズムを実装し、読み込みプロセスを最適化できます。 各ステップを効率的に行うと、ワークフロー全体を最適化できます。
並列処理: 並列処理手法を利用してパフォーマンスを向上させます。 データ処理タスクを複数のスレッドまたはノードに分散すると、ワークロードを同時に分割して処理できるため、処理が高速になります。
バッチ処理: 同様のタスクをグループ化して、繰り返し操作によるオーバーヘッドを軽減します。 バッチ内の複数のタスクを処理して、全体的な処理時間を短縮します。
ストレージ設計を最適化する
ストレージ設計を最適化するには、正確なデータ ストレージ アーキテクチャを作成し、適切なストレージ テクノロジを選択する必要があります。 合理化されたストレージ設計により、データ アクセス、取得、操作が強化されます。 戦略的なストレージ設計により、ワークロードは応答時間と全体的な機能を向上させます。
データ近接性の設計
データの近接性とは、最も頻繁にアクセスするユーザーまたはサービスに近いデータの戦略的配置を指します。 データとユーザーの間の物理的または論理的な距離を減らすことで、データの近接性が向上し、データ アクセスが高速化され、応答性が向上します。 近接性を考慮して設計を最適化するには、次の戦略を検討してください。
データ アクセス パターンを評価する: ワークロードのアクセス パターンと頻繁にアクセスされるデータを評価します。 この分析は、最大限のメリットを得るためにデータを配置する場所を決定するのに役立ちます。
データ再配置をサポートするソリューションを選択する: アクセス パターンの変化に基づいて動的なデータ再配置を提供するソリューションを検討し、最適なデータの配置を確保します。
データ同期をサポートするソリューションを選択する: 分散ユーザー ベースに対応する場合は、さまざまなリージョン間でのデータ同期を容易にするソリューションを選択し、ユーザーに近接してデータ レプリカを使用できるようにします。
トレードオフ: 基になるデータが頻繁に変更される場合は、キャッシュされたデータを最新の状態に保つためのキャッシュ無効化メカニズムを実装します。
ポリグロット永続化を使用する
Polyglot 永続化は、複数のデータ ストレージ テクノロジを使用して、アプリケーションまたはシステム内のさまざまな種類のデータを格納および管理する方法です。 さまざまな種類のデータベースまたはストレージ ソリューションが、さまざまなデータ要件に対応します。
Polyglot 永続化では、各データ ストレージ テクノロジの利点を利用して、データの種類ごとに最適なパフォーマンスとスケーラビリティを確保します。 たとえば、リレーショナル データベースを使用して、構造化されたトランザクション データを格納できます。 また、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 インデックスのガイダンス
- データ ストアの種類について
パフォーマンス効率チェックリスト
推奨事項の完全なセットを参照してください。