高 QPS で AI Search エンドポイントのスループットをスケーリングする
プレビュー
この機能は パブリック プレビュー段階です。
デフォルトでは、標準エンドポイントはインデックスのサイズに応じて20~200 QPSをサポートしています。検索バー、レコメンデーションシステム、エンティティマッチングのようなリアルタイムアプリケーションは、多くの場合、100〜1,000以上のQPSを必要とします。標準エンドポイントのみ、ターゲットQPSを設定できます。Databricks は、そのスループットレベルに最適に一致するようにインフラストラクチャをプロビジョニングします(ベストエフォートであり、保証されません)。
ターゲットQPSを設定すると、追加の容量がプロビジョニングされ、エンドポイントのコストが増加します。この追加のキャパシティには、実際のクエリトラフィックに関わらず課金されます。スループットのスケーリングはベストエフォートであり、パブリックプレビュー期間中は保証されません。
高QPSを使用するのは、次のような場合です:
- お客様のアプリケーションには、50 QPSを超える持続的なスループットが必要です。
- 通常の負荷時に429 (リクエストが多すぎます) エラーが発生します。
- トラフィックが増加すると、平均利用率が低く見える場合でも、レイテンシは低下します。
要件
- High QPSは標準エンドポイントでのみ利用可能です。ストレージ最適化エンドポイントはサポートされていません。
- 高QPSの本番運用ワークロードには、サービスプリンシパルのOAuth認証とインデックスURLを使用します。個人アクセストークン (PAT) とワークスペースクエリURLはプロトタイピングには適していますが、最適化されたクエリ経路を使用せず、数十QPSに制限されています。
- テキストクエリに管理された埋め込みモデルを使用するDelta Syncインデックスの場合、ワークスペースがIPアクセスリストまたはAWS PrivateLinkのようなプライベート接続を使用しているとき、最適化されたクエリのルーティングは利用できません。その構成では、エンドポイントは構成されたターゲットQPSに達しない可能性があります。
ターゲットQPSを設定する
新しいエンドポイントを作成する際、または既存のエンドポイントを更新する際に、ターゲットQPSを設定します。ターゲットスループットに最適に一致させるために必要な追加容量は、自動的にプロビジョニングされます。Public Preview では、スループットのスケーリングはベストエフォートであり、保証されません:実際の QPS は、インデックスのサイズ、ベクトルの次元数、クエリーの複雑さ、およびフィルターの使用状況によって異なります。
- Databricks UI
- Python SDK
- REST API
新しいエンドポイントを作成する際:
-
左側のサイドバーで、 コンピュート をクリックします。
-
「**AI Search**」タブをクリックし、「**エンドポイントを作成**」をクリックします。

-
「高度な設定」で、ターゲットQPS値を入力してください。

既存のエンドポイントを更新する際:
-
エンドポイントの詳細ページに移動してください。
-
右側のパネルで、
「ターゲットQPS」 の横にある鉛筆アイコン をクリックします。

-
新しい値を入力し、「 保存 」をクリックします。
from databricks.ai_search.client import AISearchClient
client = AISearchClient()
# Create a new endpoint with target QPS
endpoint = client.create_endpoint(
name="my-high-qps-endpoint",
endpoint_type="STANDARD",
target_qps=500,
)
# Update an existing endpoint's target QPS
response = client.update_endpoint(name="my-endpoint", target_qps=500)
# Check scaling status
scaling_info = response.get("endpoint", {}).get("scaling_info", {})
print(f"Requested target QPS: {scaling_info.get('requested_target_qps')}")
print(f"State: {scaling_info.get('state')}")
# State is "SCALING_CHANGE_IN_PROGRESS" while capacity is being provisioned,
# then transitions to "SCALING_CHANGE_APPLIED"
ターゲットQPSを指定してエンドポイントを作成します:
POST /api/2.0/vector-search/endpoints
{
"name": "my-high-qps-endpoint",
"endpoint_type": "STANDARD",
"target_qps": 500
}
既存のエンドポイントでのターゲットQPSの更新:
PATCH /api/2.0/vector-search/endpoints/<ENDPOINT_NAME>
{
"target_qps": 500
}
スケーリングステータスを確認する
GET /api/2.0/vector-search/endpoints/<ENDPOINT_NAME>
応答 scaling_info フィールドには、requested_target_qps とスケーリング state が表示されます。容量がプロビジョニングされている間は状態がSCALING_CHANGE_IN_PROGRESSとなり、その後SCALING_CHANGE_APPLIEDに移行します。
インデックス URL をクエリーします
エンドポイントのスケーリング状態がSCALING_CHANGE_APPLIEDになった後、サービスプリンシパルのOAuthトークンを使用して、インデックスURLにクエリを送信します。この URL は、target_qps によってプロビジョニングされた追加のクエリー容量を使用するために必要です。
Pythonアプリケーションの場合は、get_index()を一度呼び出し、返されたインデックスオブジェクトを再利用してください。Python SDKはインデックスURLにクエリを送信します。
from databricks.ai_search.client import AISearchClient
client = AISearchClient(
service_principal_client_id="...",
service_principal_client_secret="...",
workspace_url="https://<workspace-url>",
)
index = client.get_index(endpoint_name="my-high-qps-endpoint", index_name="catalog.schema.index")
# Reuse this index object for every query.
index.similarity_search(query_vector=[...], columns=["id", "text"], num_results=10)
RESTまたはPython以外のアプリケーションの場合、まずインデックスURLを取得し、そのURLにクエリリクエストを送信します。トークンはサービスプリンシパルのOAuthトークンである必要があります。
export WORKSPACE_URL=https://<workspace-url>
export INDEX_NAME=catalog.schema.index
export TOKEN=<oauth-token>
export INDEX_URL=$(curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"$WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME" \
| jq -r '.status.index_url')
case "$INDEX_URL" in
http://*|https://*) ;;
*) INDEX_URL="https://$INDEX_URL" ;;
esac
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"$INDEX_URL/query" \
--data '{"num_results": 10, "query_vector": [...], "columns": ["id", "text"]}'
高QPSの本番運用トラフィックには、/api/2.0/vector-search/indexes/<index_name>/queryのようなワークスペースクエリURLを使用しないでください。そのURLは最適化されたクエリ経路を使用していないため、エンドポイントが設定されたターゲットQPSに達する前に429エラーを返す可能性があります。
スケーリングの適用方法
ターゲットQPSの設定後、必要な容量が自動的にプロビジョニングされます。新しいスループットレベルは、プロビジョニングが完了した後に適用されます;変更をトリガーするためにインデックスを同期する必要はありません。
スケーリング操作の進行中にターゲットQPSの更新を試行すると、RESOURCE_CONFLICTエラーが返されます。現在の操作が完了するのを待ってから、再試行してください。
429エラーのトラブルシューティング
高いQPSワークロードの場合、ボトルネックを見つけるには、以下のチェックを使用してください。
- PAT またはワークスペースクエリー URL を使用している場合は、サービスプリンシパル OAuth 認証およびインデックス URL に切り替えてください。
scaling_info.stateがSCALING_CHANGE_IN_PROGRESSである場合、状態がSCALING_CHANGE_APPLIEDに変更されるまでお待ちください。- アプリケーションが
query_vectorでベクタークエリを送信する場合、埋め込みモデルはクエリパスにありません。スケーリングが完了しても429エラーが続く場合、リクエストの同時実行を減らすか、より高いtarget_qpsを設定してください。 - アプリケーションがDatabricksマネージド埋め込みモデルを持つDelta Syncインデックスにテキストクエリを送信する場合、埋め込みモデルがボトルネックになる可能性があります。の代わりに のようなより小さい埋め込みモデルを使用するか、
databricks-qwen3-embedding-0-6bdatabricks-gte-large-enプロビジョニングされたスループットの基盤モデルAPIエンドポイント または埋め込み用の別の専用Model Servingエンドポイントを使用してください。
制限事項:
- オートスケールなし:予測されるトラフィックに基づいて、ターゲットQPSを手動で設定する必要があります。トラフィックがプロビジョニングされたレベルを超過した場合、429エラーが発生します。「クエリ スパイクの計画」を参照してください。
- 標準エンドポイントに限り:ストレージ最適化エンドポイントは
target_qpsをサポートしていません。 - 最適化されたルートが必要です : 構成されたターゲットQPSは、サービスプリンシパルOAuth認証とインデックスURLを使用するトラフィックに適用されます。PATトラフィックとワークスペースのクエリURLトラフィックは、数十QPSに制限されています。
- マネージド埋め込みモデルは 2 番目の制限を追加する場合があります : テキストクエリーにマネージド埋め込みモデルを使用する Delta Sync インデックスの場合、クエリースループットは、埋め込みモデルサービングエンドポイントにも依存します。モデルサービング容量を増やし、プロビジョニング済みスループットを使用するか、または自己管理の埋め込みを使用することで、予測可能なクエリースループットを実現できます。