Azure AI Search では、容量はワークロードに合わせてスケーリングできる "レプリカ" と "パーティション" に基づいています。 レプリカは検索エンジンのコピーです。 パーティションはストレージの単位です。 新しい検索サービスはそれぞれ 1 つずつ開始されますが、変動するワークロードに対応するために、レプリカとパーティションの追加または削除を個別に行うことができます。 容量を追加すると、検索サービスを実行するコストが増加します。
処理速度やディスク IO など、レプリカとパーティションの物理的な特性は、 価格レベルによって異なります。 標準の検索サービスでは、レプリカとパーティションは基本サービスにあるものよりも高速で大きくなります。
容量の変更は瞬時には行われません。 特に大量のデータが含まれているサービスでは、パーティションのコミッションまたは使用停止に最大で 1 時間かかることがあります。
検索サービスをスケーリングする場合は、次のツールと方法で選択できます。
メモ
サービスが 2024 年 4 月または 5 月より前に作成された場合は、追加コストなしで、より高いストレージ制限への 1 回限りのアップグレードを利用できる可能性があります。 詳細については、「 検索サービスのアップグレード」を参照してください。
概念: 検索ユニット、レプリカ、パーティション
容量は、パーティションとレプリカの組み合わせで割り当てることができる検索ユニットで表されます。
概念 | 定義 |
---|---|
検索単位 | 使用可能な合計容量の 1 つの増分。 サービスを実行するには、少なくとも 1 つの検索ユニットが必要です。 価格レベルに応じて、最大の範囲は 1 から 36 ユニットです。 検索単位の数は、レプリカの数にパーティションの数 (R × P = SU) を掛けた値と等しくなります。 各サービスは、1 つのレプリカと 1 つのパーティションから始まり、1 つのユニット (1 × 1 = 1) を消費します。 2 つ目のレプリカを追加すると、2 × 1 = 2 という 2 つのユニットが消費されます。 検索単位は、検索サービスの課金単位でもあります。 |
[レプリカ] | 主にクエリ操作の負荷分散に使用される Search サービスのインスタンスです。 各レプリカは、インデックスの 1 つのコピーをホストします。 3 つのレプリカを割り当てると、クエリ要求のサービスに使用できるインデックスのコピーが 3 つ作成されます。 |
"パーティション" | 読み取り/書き込み操作 (たとえば、インデックスを再構築または更新する場合など) のための物理ストレージと I/O。 各パーティションにインデックス全体のスライスがあります。 3 つのパーティションを割り当てると、インデックスは 3 つに分割されます。 |
パーティションとレプリカのテーブルで、36 ユニットの制限を超えない可能性のある組み合わせを確認します。
容量をいつ追加するか
最初に、1 つのパーティションと 1 つのレプリカで構成される最小限のリソースがサービスに割り当てられます。 選択するレベルによってパーティションのサイズと速度が決まり、各レベルはさまざまなシナリオに適した一連の特性に対して最適化されます。 ハイエンド レベルを選択した場合は、S1 を使用する場合よりもパーティション数を減らす必要がある場合があります。 セルフダイレクト テストを通じて回答する必要がある質問の 1 つは、より大きくコストの高いパーティションの方が、下位レベルでプロビジョニングされたサービスで 2 つの安価なパーティションよりもパフォーマンスが向上するかどうかです。
1 つのサービスに、すべてのワークロード (インデックスおよびクエリ) を処理するための十分なリソースが必要です。 どちらのワークロードもバックグラウンドで実行されません。 クエリ要求の頻度が自然に低い時間にインデックス作成をスケジュールできますが、それ以外の場合、サービスは 1 つのタスクに優先順位を付けることはできません。 さらに、ある程度の冗長性により、サービスまたはノードが内部的に更新されるときのクエリのパフォーマンスの問題を解決します。
容量を追加するかどうかを決定するためのガイドラインは次のとおりです。
- サービスレベル合意の高可用性を満たすための基準。
- HTTP 503 (サービス利用不可) エラーの頻度が増加しています。
- HTTP 429 (要求が多すぎます) エラーの頻度が増加しており、ストレージが少なくなっていることが示されています。
- 大規模なクエリ ボリュームが必要です。
- 新しいインフラストラクチャと大規模なパーティションへの 1 回限 りのアップグレードでは不十分です。
- 現在のパーティション数は、ワークロードのインデックス作成には適していません。
一般的な規則として、検索アプリケーションでは、パーティションよりもレプリカの方が多く必要となる傾向があります。特に、サービス操作でクエリ ワークロードの比重が高い場合は、その傾向が強まります。 各レプリカは、インデックスの 1 コピーです。これにより、サービスでは、複数のコピーに対して要求を負荷分散できます。 Azure AI Search では、インデックスのすべての負荷分散とレプリケーションが管理され、サービスに割り当てられたレプリカの数はいつでも変更できます。 Standard Search サービスでは最大 12 個、Basic Search サービスでは最大 3 個のレプリカを割り当てることができます。 レプリカの割り当ては、Azure portal またはプログラム オプションの 1 つのいずれかから行うことができます。
追加のパーティションは、集中的なインデックス作成ワークロードに役立ちます。 パーティションを追加すると、読み取り/書き込み操作がより多くのコンピューティング リソースに分散されます。
最後に、インデックスが大きくなると、クエリの実行に時間がかかります。 そのため、パーティションで段階的に増加すれば、レプリカでも小規模ながら比例して増加するべきであると考えるかもしれません。 クエリの内容とその量の複雑さが、どれほど速くクエリが処理されるかに影響を与えます。
メモ
レプリカやパーティションを追加すると、サービスの実行コストが増加し、結果の並べ替え方法が少し変化する可能性があります。 ノードを追加した場合の課金の影響を理解するには、料金計算ツール を必ず確認してください。 下のグラフは、特定の構成に必要な検索単位の数を相互参照するのに役立ちます。 追加のレプリカがクエリ処理に与える影響の詳細については、「 結果の順序付け」を参照してください。
容量をアップグレードする方法
一部の Azure AI Search 機能は、新しいサービスでのみ使用できます。 このような機能の 1 つは、 2024 年 4 月以降に作成されたサービスに適用される、より高いストレージ容量です。 ただし、2024 年 4 月より前にサービスを作成した場合は、1 回限りアップグレードを実行することで、サービスを再作成せずに容量を増やすことができます。 詳細については、「 検索サービスのアップグレード」を参照してください。
容量を変更する方法
サービスの容量を増減するには、次の 2 つのオプションがあります。
パーティションとレプリカを追加または削除する
Azure portal にサインインし、検索サービスを選択します。
左側のペインで [設定]>[スケール] を選択します。
次のスクリーンショットは、1 つのレプリカとパーティションでプロビジョニングされる Standard サービスを示しています。 下部の式は、使用される検索ユニットの数 (1) を示しています。 ユニットの価格が 100 ドル (実際の価格ではありません) の場合、このサービスを実行するための毎月のコストは平均 100 ドルになります。
スライダーを使用してパーティションの数を増減し、[保存] を選択します。
この例では、2 つ目のレプリカおよびパーティションを追加します。 請求の計算式では、レプリカ数とパーティション数が乗算されるため (2 x 2)、検索ユニット数が 4 になっていることに注意してください。 容量を 2 倍にすると、サービスを実行するためのコストが 2 倍以上になります。 検索ユニットのコストが 100 ドルの場合、新しい毎月の請求額は 400 ドルになります。
各レベルの現在のユニットあたりのコストについては、 価格ページを参照してください。
通知を確認して、操作が開始されたことを確認します。
この操作の完了には数時間かかることがあります。 開始後にプロセスを取り消すことはできません。また、レプリカとパーティションの調整をリアルタイムで監視することはできません。 ただし、変更中は次のメッセージが表示されます。
価格レベルを変更する
メモ
Azure portal と サービス - 更新プログラム (REST API) では 、Basic レベルと Standard レベル (S1、S2、S3) レベル間の変更がサポートされます。 現在のサービス構成がターゲット レベルの制限を超えていない場合は、レベルをアップグレードまたはダウングレードできます。 また、お客様のリージョンでは、ターゲット レベルに容量の制約を設定することもできません。
価格レベルによって、検索サービスの最大ストレージが決まります。 容量を増減する必要がある場合は、ストレージのニーズに合わせて別の価格レベルに切り替えることができます。
容量に加えて、価格レベルによって、インデックス、インデクサー、その他の検索オブジェクトの制限が決まります。 続行する前に、現在のレベルのサービス制限と目的のレベルを比較してください。 一般に、より高いレベルに切り替えると、ストレージの制限とベクターの制限が増加し、要求スループットが増加し、待機時間が減少しますが、下位レベルに切り替えると、それと反対の効果があります。
より高い価格レベルに切り替えると、検索サービスを実行するコストも増加します。 詳細については、 価格に関するページを参照してください。
価格レベルを変更するには:
Azure portal にサインインし、検索サービスを選択します。
左側のペインで [設定]>[スケール] を選択します。
現在のレベルで、[ 価格レベルの変更] を選択します。
[価格レベルの選択] ページで、一覧から別のレベルを選択します。
Basic、S1、S2、S3 を切り替えることができますが、Free、S3HD、L1、または L2 に切り替えることはできません。 これらのレベルは選択できず、淡色表示されます。
スケーリング操作を開始するには、[保存] を選択します。
この操作の完了には数時間かかることがあります。 開始後にプロセスを取り消すことはできません。また、レベルの変更をリアルタイムで監視することはできません。 ただし、変更中は次のメッセージが表示されます。
スケーリング要求を処理する方法
スケーリング要求を受け取ると、検索サービスでは次のことを行います。
- 要求が有効であるかどうかを確認します。
- データとシステム情報のバックアップを開始します。
- サービスが既にプロビジョニング状態になっているかどうかを確認します (現在、レプリカまたはパーティションの追加または削除を実行中)。
- プロビジョニングを開始します。
サービスのスケーリングには、サービスのサイズと要求の範囲に応じて、わずか 15 分しかかからないこともあれば、1 時間以上かかることもあります。 バックアップには、データ量とパーティションおよびレプリカの数に応じて、数分かかることがあります。
上記の手順は完全に連続しているわけではありません。 たとえば、システムでは、安全に行えるようになったときに、プロビジョニングを開始します。それは、バックアップが終わり近づいているときかもしれません。
スケーリング中のエラー
次の表に、スケーリング操作中に発生する可能性があるエラーの原因と解決策の一覧を示します。
エラーメッセージ | 原因 | 解決策 |
---|---|---|
"以前の要求を処理しているため、サービス更新操作は現在許可されていません。" | 別のスケーリング操作が処理中です。 | Azure portal の [概要] ページを確認するか、Search Management REST API、Azure PowerShell、または Azure CLI を使用して、検索サービスの状態を取得します。 状態が "プロビジョニング" の場合は、"成功" または "失敗" になるまで待ってからやり直してください。 1, 2 |
"検索サービス servicename のスケーリングに失敗しました。 エラー: オブジェクト数 ActualCount が許容される制限 MaximumCount を超えています。" | 現在のサービス構成がターゲット価格レベルの制限を超えています。 | ストレージ使用、ベクター使用、インデックス、インデクサー、その他のオブジェクトが、下位レベルのサービス制限内に収まることを確認してください。 たとえば、Basic レベルでは最大で 15 個のインデックスがサポートされるため、16 個のインデックスがある場合は S1 から Basic に切り替えることはできません。 もう一度試す前に、リソースを調整してください。 |
1 バックアップの状態がありません。これは内部操作であり、スケーリング操作を妨げる可能性は低いです。
2 検索サービスがプロビジョニングの状態でストールしているように見える場合は、クエリ ボリュームがゼロでインデックスの更新がない、使用できない孤立したインデックスがないかどうかを確認します。 使用できないインデックスがある場合、サービス容量の変更がブロックされることがあります。 特に、キーが無効になった CMK で暗号化されたインデックスを探します。 インデックスを削除するか、キーを復元してインデックスをオンラインに戻し、スケーリング操作のブロックを解除します。
パーティションとレプリカの組み合わせ
次のグラフは、Standard レベル以上に適用されます。 パーティションとレプリカのすべての可能な組み合わせが表示されます。サービスごとに最大 36 個の検索ユニットが適用されます。
1 個のパーティション | 2 個のパーティション | 3 個のパーティション | 4 個のパーティション | 6 個のパーティション | 12 個のパーティション | |
---|---|---|---|---|---|---|
1 つのレプリカ | 1 SU | 2 スー | 3 SU | 4 SU | 6 SU | 12 SU |
2 つのレプリカ | 2 スー | 4 SU | 6 SU | 8 SU | 12 SU | 24 SU |
3 つのレプリカ | 3 SU | 6 SU | 9 SU | 12 SU | 18 SU | 36 SU |
4 つのレプリカ | 4 SU | 8 SU | 12 SU | 16 SU | 24 SU | 該当なし |
5 つのレプリカ | 5 SU | 10 SU | 15 SU | 20 SU | 30 SU | 該当なし |
6 つのレプリカ | 6 SU | 12 SU | 18 SU | 24 SU | 36 SU | 該当なし |
12 レプリカ | 12 SU | 24 SU | 36 SU | 該当なし | 該当なし | 該当なし |
Basic 検索サービスでは、検索ユニット数が少なくなります。
2024 年 4 月 3 日より前に作成された検索サービスでは、Basic サービスはパーティションを 1 つだけ持ち、最大 3 つのレプリカを 3 つの SU に制限できます。 調整可能なリソースはレプリカだけです。 ただし、 サービスをアップグレードすることで、パーティション数を増やすことができる場合があります。
サポートされているリージョンで 2024 年 4 月 3 日以降に作成された検索サービスでは、Basic サービスには最大 3 つのパーティションと 3 つのレプリカを含めることができます。 パーティションとレプリカを完全にサポートするために、SU の上限は 9 です。
作成日に関係なく、どの課金対象レベルの検索サービスでも、クエリの高可用性を実現するには少なくとも 2 つのレプリカが必要です。
レベルごとの課金レートと通貨については、Azure AI 検索の価格に関するページを参照してください。
課金対象階層を使用した容量の見積もり
構築するインデックスのサイズによって、ストレージのニーズが決まります。 見積もりに役立つような、信頼できる経験則や一般原則はありません。 インデックスのサイズを見極める唯一の方法は、1 つ構築することです。 そのサイズは、トークン化と埋め込み、suggester、フィルター処理、並べ替えを有効にするか、ベクトル圧縮を利用できるかに基づいています。
課金対象レベル (Basic 以上) で見積もりすることをお勧めします。 Free レベルは、複数の顧客が共有する物理リソースで実行され、制御を超える要因の対象となります。 課金対象の検索サービスの専用のリソースでのみ、より長いサンプリングと処理時間に対応でき、開発段階でのインデックスの数量、サイズ、クエリ量についてより現実的な見積もりを求めることができます。
各レベルのサービス制限を確認して、より低いレベルで、必要なインデックス数に対応できるかどうかを判断してください。 アクティブな開発、テスト、運用のためにインデックスの複数のコピーが必要かどうかを検討します。
検索サービスには、オブジェクトの制限 (インデックス、インデクサー、スキルセットの最大数など) とストレージの制限が適用されます。 最初に達した制限が、有効な制限になります。
課金対象レベルでサービスを作成します。 レベルは、特定のワークロード向けに最適化されています。 たとえば、Storage Optimized レベルでは、少数の大きなインデックスをサポートするように設計されているため、インデックスは 10 個に制限されています。
予想される負荷がわからない場合は、Basic または S1 の低いレベルで始めます。
テストに大規模なインデックス作成とクエリの負荷が含まれている場合は、S2 または S3 の高レベルから始めます。
社内のビジネス アプリケーションのように、インデックスを付けるデータの量が多く、クエリの負荷が比較的低い場合は、Storage Optimized (L1 または L2) から始めます。
最初のインデックスを構築して、ソース データがどのようにインデックスに変換されるかを特定します。 これは、インデックスのサイズを推測する唯一の方法です。 フィールド定義の属性は、物理ストレージの要件に影響します。
キーワード検索の場合、フィールドをフィルター可能および並べ替え可能としてマークすると、インデックス サイズが大きくなります。
ベクトル検索の場合は、ベクトル サイズを小さくするようにパラメーターを設定できます。
Azure portal で、ストレージ、サービス制限、クエリ量、待機時間を監視します。 秒あたりのクエリ数、スロットルされたクエリ数、検索の待ち時間が Azure portal に表示されます。 これらすべての値が、適切なレベルを選択したかどうかを判断するために役立ちます。
可用性を高めたり、クエリのパフォーマンス低下を軽減したりするためにレプリカを追加します。
クエリの負荷に対応するために必要なレプリカの数に関するガイドラインはありません。 クエリのパフォーマンスは、クエリおよび競合するワークロードの複雑さによって異なります。 レプリカを追加するとパフォーマンスが向上しますが、厳密に線形に向上するわけではありません。3 つのレプリカを追加しても、スループットが 3 倍になるとは限りません。 ソリューションの QPS を推定する方法のガイダンスについては、パフォーマンスのための分析と、クエリの監視に関する記事を参照してください。
転置インデックスのサイズと複雑性はコンテンツによって決まり、必ずしもそれにフィードするデータ量によって決まるものではありません。 冗長性の高い大規模なデータ ソースは、変動の多いコンテンツを含む小さいデータセットよりも、インデックスのサイズが小さくなることがあります。 そのため、元のデータ セットのサイズに基づいてインデックスのサイズを推測できることはほとんどありません。
検索されることのないデータが含まれていると、ストレージの要件が増大することがあります。 ドキュメントには、検索機能に必要なデータのみが含まれていることが理想的な状態です。
サービス レベル契約に関する考慮事項
Free レベルおよびプレビュー機能は、サービス レベル アグリーメント (SLA) の対象ではありません。 課金対象のすべてのレベルで、SLA が有効になるのは、サービスにとって十分な冗長性がプロビジョニングされるときです。
2 つ以上のレプリカがクエリ (読み取り) の SLA を満たしている。
3 つ以上のレプリカがクエリとインデックス作成 (読み取り/書き込み) の SLA を満たしている。
パーティションの数は、SLA に影響しません。