Azure Cosmos DBのPartitioning and horizontal scaling解説|2026年5月更新で見るべきパーティション設計

Azure Cosmos DBの「Partitioning and horizontal scaling」でまず押さえるべき結論は、既存システムが突然動かなくなるような破壊的変更ではなく、パーティションキー設計の失敗を避けるための判断基準がより明確になったという点です。特に、ホットパーティション、クロスパーティションクエリ、論理パーティションの20GB上限、移行時のコンテナー再作成、階層型パーティションキーやグローバルセカンダリインデックスの使いどころを確認する必要があります。Microsoft Learnの英語版では最終更新が2026年5月21日と表示されているため、日本時間や社内の更新管理では2026年5月22日付の情報として扱う場合も、公式ページの表示日を併せて確認しておくと安全です。(Microsoft Learn)

目次

2026年5月更新で押さえるべきポイント

今回確認すべき中心テーマは、Azure Cosmos DBのパーティション分割そのものの基本仕様に加えて、どのパーティションキーを選ぶべきか、どの選び方が危険か、既存コンテナーをどう見直すべきかです。

公式記事では、Azure Cosmos DBがコンテナー内の項目をパーティションキーの値に基づいて論理パーティションへ分割し、データとスループットを物理パーティションへ分散して水平スケーリングする仕組みを説明しています。対象はNoSQL、MongoDB、Apache Cassandra、Apache Gremlin、Tableの各APIです。(Microsoft Learn)

特に実務で重要なのは、次の4点です。

確認ポイント実務上の意味主な対象者
パーティションキーは後からその場で変更できない設計ミスは新コンテナーへの移行やデータコピーが必要になるアーキテクト、開発者
論理パーティションは最大20GBが目安になる特定のキー値にデータが集中するとスケールの限界に近づく管理者、SRE
RU消費が偏るとホットパーティションになる429エラー、レイテンシ増加、コスト増につながる開発者、運用担当
/idstatus、ランダムGUIDなどの使い方に注意が必要一見便利でも、クエリや負荷分散と合わないと性能問題を起こす開発者

MicrosoftDocsの更新履歴では、2026年5月13日に「パーティションキーのアンチパターン」に関するガイダンス追加や文言調整が行われています。つまり、今回の更新は新機能だけを見るのではなく、既存設計を見直すための警告サインが整理された更新として読むのが実務的です。(GitHub)

Azure Cosmos DBのパーティション分割とは

Azure Cosmos DBでは、コンテナー内のデータを「論理パーティション」に分けます。論理パーティションは、同じパーティションキー値を持つ項目の集合です。

たとえば、UserIDをパーティションキーにした場合、UserIDが1,000種類あれば、1,000個の論理パーティションが作られます。各項目は、パーティションキーと項目IDの組み合わせによって一意に識別されます。(Microsoft Learn)

ここで混同しやすいのが「シャードキー」という言葉です。分散データベースではシャードキーと呼ばれることがありますが、Azure Cosmos DBの公式ドキュメントやAPIではパーティションキーが正式な用語です。設計書、コードコメント、運用手順書では「シャードキー」ではなく「パーティションキー」に統一すると、Azureの公式情報と照合しやすくなります。(Microsoft Learn)

論理パーティションと物理パーティションの違い

Azure Cosmos DBのスケーリングを理解するには、論理パーティションと物理パーティションを分けて考える必要があります。

種類役割管理者・開発者が意識すべきこと
論理パーティション同じパーティションキー値を持つデータのまとまりキー値ごとのデータ量、RU消費、トランザクション範囲
物理パーティションAzure Cosmos DB内部でデータとスループットを分散する単位直接制御できない。設計ではパーティションキーの分散を重視する

公式情報では、論理パーティションの数に制限はない一方で、各論理パーティションは最大20GBのデータを格納できるとされています。また、ストアドプロシージャやトリガー内のトランザクションは、1つの論理パーティション内に限定されます。(Microsoft Learn)

物理パーティションはAzure Cosmos DBが管理する内部実装です。個々の物理パーティションは最大10,000 RU/sのスループットと最大50GBのデータを扱うと説明されています。物理パーティションは直接操作できないため、管理者や開発者は「物理パーティションをどう配置するか」ではなく、論理パーティション間でRU消費とデータ量が偏らないパーティションキーを選ぶことに集中すべきです。(Microsoft Learn)

重要なのは、スループットが物理パーティションに均等配分される点です。たとえば、あるコンテナーで一部のパーティションキー値だけにアクセスが集中すると、全体として十分なRU/sを確保していても、その一部のパーティションでレート制限が発生することがあります。これがホットパーティションです。

影響を受けやすいシステム

今回の公式情報を特に確認すべきなのは、次のようなAzure Cosmos DB環境です。

システムの特徴起こりやすい問題確認すべき項目
マルチテナントSaaS大口テナントだけデータ量やアクセスが突出するtenantId単独で20GBや10,000RU/sに近づいていないか
EC・注文管理特定顧客、特定日、特定店舗に書き込みが集中するcustomerIdorderDatestoreIdの偏り
IoT・ログ収集特定デバイスや時間帯に書き込みが集中する時間バケットや合成キーの必要性
読み取り中心のAPIパーティションキーを含まない検索が多いクロスパーティションクエリのRU消費
既存設計を長く使っている環境初期設計時よりデータ量やクエリが変わっているパーティションキー変更やGSI検討の必要性

小規模な検証環境では問題が見えなくても、本番でデータ量が100GBを超えたり、プロビジョニング済みスループットが30,000RU/sを超えたりすると、クロスパーティションクエリやホットパーティションの影響が見えやすくなります。公式記事でも、大きな読み取り中心コンテナーでは、クエリで頻繁に使う等値フィルターに合うパーティションキーを選ぶことが重要とされています。(Microsoft Learn)

パーティションキー選定で見るべき判断基準

パーティションキーは、Azure Cosmos DBの性能、コスト、移行難易度を大きく左右します。選定時は、単に「値の種類が多いか」だけでは不十分です。

値の種類が多いだけでは足りない

良いパーティションキーには、高いカーディナリティが必要です。つまり、値の種類が十分に多く、データとRU消費を分散できる必要があります。

ただし、ランダムGUIDのように値の種類が多くても、アプリケーションのクエリ条件にほとんど登場しない場合、読み取り処理がクロスパーティションクエリになりやすくなります。書き込みは分散できても、読み取りのRU消費とレイテンシが悪化する可能性があります。

クエリパターンと一致しているかを見る

読み取りが多いコンテナーでは、よく使う検索条件とパーティションキーが一致しているかが重要です。

たとえば、ユーザーごとの注文履歴を取得するAPIが中心なら、/userId/customerIdは候補になります。一方、管理画面で「注文日」「ステータス」「店舗」「商品カテゴリ」など複数条件で横断検索することが多い場合、単一のパーティションキーだけでは最適化しきれません。

この場合は、通常のパーティションキーだけでなく、合成パーティションキー、階層型パーティションキー、グローバルセカンダリインデックスを検討します。

変更されない値を使う

パーティションキー値は、項目作成後にその場で変更できません。項目を別のパーティションへ移動したい場合は、新しいパーティションキー値を持つ項目を作成し、元の項目を削除する必要があります。この2操作は異なる論理パーティション間でアトミックに実行できないため、業務データでは整合性設計が必要です。(Microsoft Learn)

避けたい例は、後から変わる可能性がある値です。

避けたい候補理由代替案
emailユーザーが変更する可能性があるuserId
status値の種類が少なく、変更も多いorderIdcustomerId、合成キー
planTypeプラン変更で値が変わるtenantIdtenantId_userId
country値の種類が少なく偏りやすい地域以外の高カーディナリティなキー

数値IDは文字列化も検討する

公式記事では、パーティションキー値には文字列型または数値型を使用できる一方、倍精度数値の境界を超える可能性がある数値は文字列へ変換することが推奨されています。大きなIDを数値として扱うと、言語やJSON処理系によって精度問題が起きる可能性があるためです。(Microsoft Learn)

特に、外部システム由来の長い注文番号、会員番号、決済ID、Snowflake形式のIDなどを扱う場合は、パーティションキーとして使う前に型を確認しましょう。

よくあるアンチパターンと改善策

2026年5月更新で特に実務者が見るべきなのは、パーティションキーのアンチパターンです。MicrosoftDocsの履歴でも、アンチパターンに関するガイダンス追加と文言調整が確認できます。(GitHub)

/idを汎用的に使う

/idをパーティションキーにすると、項目ごとに論理パーティションが分かれるため、書き込み分散やポイント読み取りには向いています。しかし、id以外の条件で検索するクエリが多い場合は、クロスパーティションクエリになりやすくなります。

向いているのは、次のようなワークロードです。

/idが向くケース/idが向かないケース
idを指定したポイント読み取りが中心顧客別、日付別、ステータス別の検索が多い
書き込み分散を重視する一覧画面や管理画面の絞り込みが多い
項目単位で独立している同じユーザーや同じ注文グループをまとめて読む

「とりあえず/id」は危険です。APIの主要な読み取りパターンを確認し、id以外の検索が多いなら別のキーを検討しましょう。

statustypeのような低カーディナリティ項目を使う

statustypecountryのような値の種類が少ない項目をパーティションキーにすると、論理パーティション数が少なくなります。その結果、一部の値にアクセスが集中し、RU消費やデータ量が偏りやすくなります。

たとえば、注文データでstatusをパーティションキーにすると、多くのデータがcompletedpendingに集中する可能性があります。これはホットパーティションの典型例です。

改善策としては、customerIdorderIdtenantId_userIdstoreId_dateのように、より分散しやすく、かつクエリに使いやすいキーを検討します。

高カーディナリティでもクエリに合っていない

値の種類が多いキーでも、クエリで使われなければ読み取り性能の改善にはつながりません。

たとえば、randomGuidをパーティションキーにすれば書き込みは分散できます。しかし、実際の検索が「顧客IDで注文を探す」「テナントIDでログを一覧する」なら、ほとんどの検索がクロスパーティションになります。

この場合は、次の順で検討すると判断しやすくなります。

状況検討する設計
主要クエリが1つの軸に集約できる通常のパーティションキー
単一項目では分散と検索条件を両立できない合成パーティションキー
テナント、ユーザー、セッションなど階層構造が自然にある階層型パーティションキー
複数の独立した検索軸があり、単一設計では対応しづらいグローバルセカンダリインデックス

パーティションキーの種類と使い分け

公式記事では、通常のパーティションキー、合成パーティションキー、階層型パーティションキー、グローバルセカンダリインデックスが整理されています。(Microsoft Learn)

選択肢向いているケース注意点
通常のパーティションキーcustomerIdorderIdなど、検索条件と分散を両立できる特定顧客や特定テナントに偏るとホットパーティション化する
合成パーティションキー単一項目だけでは分散できない書き込み中心ワークロード片方の項目だけで検索するとクロスパーティションになりやすい
階層型パーティションキーテナント、ユーザー、セッションのような階層構造がある大規模データ第1階層のカーディナリティが低いと書き込みが詰まりやすい
グローバルセカンダリインデックス複数の独立したクエリパターンを効率化したいプレビュー機能であり、追加のRU・ストレージ・最終的一貫性を考慮する

階層型パーティションキーを使う判断基準

階層型パーティションキーは、パーティションキーを最大3階層まで構成できる機能です。マルチテナント環境でTenantIdだけでは20GB上限に近づく場合や、テナント配下にユーザー、セッションなど自然な階層がある場合に候補になります。公式情報では、階層型パーティションキーにより、論理パーティションキーのプレフィックスが20GBや10,000RU/sを超えるシナリオに対応できると説明されています。(Microsoft Learn)

ただし、第1階層のカーディナリティが低いと、書き込みが一部の物理パーティションに偏る可能性があります。たとえば、テナント数が5社しかない状態でTenantIdを第1階層にすると、特定テナントの大量書き込みがボトルネックになりやすくなります。

グローバルセカンダリインデックスを使う判断基準

グローバルセカンダリインデックスは、ソースコンテナーとは異なるパーティションキーでデータを保持する読み取り専用コンテナーです。ソースコンテナーと自動同期され、別のクエリパターンを効率化できます。(Microsoft Learn)

たとえば、ソースコンテナーをcustomerIdで最適化しているが、管理画面ではorderIdemailAddressでも高速に検索したい場合、GSIが候補になります。

ただし、GSIは万能ではありません。公式情報では、GSIは最終的一貫性で同期され、独自のパーティションキー、インデックスポリシー、スループット、データモデルを持つとされています。また、GSIコンテナーには追加のストレージとRUが必要です。(Microsoft Learn)

本番採用時は、次の点を確認してください。

確認項目理由
プレビュー機能を採用できる運用ルールか組織によっては本番利用に承認が必要
最終的一貫性で問題ないか書き込み直後の厳密な即時検索には向かない場合がある
GSI側のRUを見積もったかソースとは別にRU消費が発生する
インデックス対象のプロパティが全項目に存在するか欠損値が偏ると論理パーティション上限に近づく可能性がある
置換・削除の追加RUを考慮したか更新・削除が多いワークロードではコストに影響する

既存コンテナーで確認すべき設定とメトリック

管理者や開発者は、今回の情報を読んだだけで終わらせず、既存環境を次の順で確認すると効果的です。

パーティションキーごとのデータ量を確認する

最初に見るべきは、特定の論理パーティションキー値が20GBに近づいていないかです。公式ドキュメントでは、Azure Monitorアラートを使い、論理パーティションキーのストレージが20GB上限に近づいているか監視する方法が紹介されています。例では、20GBの70%である14GBを超えた場合にアラートを発火させる構成が示されています。(Microsoft Learn)

実務では、次のようなルールにしておくと運用しやすくなります。

しきい値状態推奨アクション
10GB未満通常監視月次またはリリース前に確認
10〜14GB注意増加率、対象キー、将来予測を確認
14GB以上警戒移行、階層型キー、合成キー、データ分離を検討
18GB以上危険新規書き込み停止リスクを前提に緊急対応を計画

診断ログとLog Analyticsを有効化する

論理パーティションキーのサイズ監視には、Diagnostic LogsのPartitionKeyStatisticsログカテゴリを使います。公式手順では、Azure Cosmos DBアカウントで診断ログを有効化し、Log Analyticsワークスペースへ送信する構成が前提です。(Microsoft Learn)

まだ設定していない場合は、次の順で確認します。

手順確認内容
診断設定を確認対象のAzure Cosmos DBアカウントでDiagnostic Logsが有効か
ログカテゴリを確認PartitionKeyStatisticsを収集しているか
送信先を確認Log Analyticsワークスペースに送信されているか
アラートを作成14GBなど運用上のしきい値で通知できるか
通知先を確認メール、Teams連携、Azure Function、Logic Appsなどに届くか

クエリがパーティションキーを含んでいるか確認する

読み取り処理では、主要クエリがパーティションキーを含んでいるかを確認します。

たとえば、/customerIdをパーティションキーにしているなら、APIやクエリにWHERE c.customerId = @customerIdのような条件が入っているかを見ます。含まれていない検索が多い場合、物理パーティション数が増えるほどクロスパーティションクエリの負荷が目立ちます。

管理画面やバッチ処理では、横断検索が必要なこともあります。その場合は、単に「クロスパーティションだから悪い」と判断するのではなく、実行頻度、RU消費、レイテンシ、代替設計のコストを比較しましょう。

パーティションキーを変更したい場合の移行方法

Azure Cosmos DBでは、既存コンテナーのパーティションキーをその場で変更できません。変更するには、新しいパーティションキーを持つコンテナーを作成し、データを移動する必要があります。公式記事では、コンテナーコピージョブやグローバルセカンダリインデックスが選択肢として示されています。(Microsoft Learn)

コンテナーコピーを使う場合

コンテナーコピーは、既存コンテナーから別コンテナーへデータをコピーするための機能です。公式情報では、パーティションキーの変更、スループットの粒度変更、ユニークキー更新、コンテナー名変更、新しいコンテナーでのみサポートされる機能の採用などに利用できるとされています。(Microsoft Learn)

移行時の基本的な流れは次のとおりです。

フェーズ作業内容注意点
設計新しいパーティションキー、インデックスポリシー、TTL、ユニークキーを決める既存設定をそのままコピーすればよいとは限らない
準備移行先コンテナーを作成するRU、オートスケール、リージョン設定も確認
コピーコンテナーコピージョブを実行するオンラインコピーかオフラインコピーかで手順が変わる
検証件数、代表データ、クエリ結果、RU消費を比較するデータ欠損や重複を確認
切り替えアプリケーションの接続先を変更するロールバック手順を用意する
監視429、レイテンシ、RU消費、エラー率を監視する切り替え直後は負荷傾向が変わる

オフラインコピーでは、コピー開始前にソースコンテナーへの操作を停止することが強く推奨されています。コピー中にソース側で削除や更新を続けると、移行先で重複や欠損が起きる可能性があるためです。(Microsoft Learn)

オンラインコピーを使う場合でも、前提条件やRU増加に注意が必要です。公式情報では、オンラインコピーの前提として継続的バックアップや変更フィードモードの設定が示されており、ソースアカウントの書き込み操作に追加RUが発生する旨も説明されています。(Microsoft Learn)

自前移行を行う場合

アプリケーション側でデータを読み出して新コンテナーへ書き込む方法もあります。この場合は、単純な一括コピーではなく、以下を設計しておく必要があります。

項目確認内容
二重書き込み移行期間中の新旧コンテナーの整合性をどう保つか
再実行性途中失敗しても安全に再開できるか
削除反映削除済みデータを移行先に残さない仕組みがあるか
順序性更新順序が業務上問題にならないか
切り戻し切り替え後に問題が出た場合、旧コンテナーへ戻せるか
コスト移行中の読み取りRU、書き込みRU、ストレージ増加を見積もったか

パーティションキー変更は、単なるスキーマ変更ではなく、データ配置とアクセスパターンの変更です。移行計画では、アプリケーション改修、運用監視、コスト試算まで含めて判断しましょう。

展開前に失敗しやすいポイント

Azure Cosmos DBのパーティション設計では、開発環境では見えなかった問題が本番負荷で表面化しがちです。展開前に、次の失敗パターンをつぶしておきましょう。

失敗しやすいポイント何が起きるか予防策
テストデータが均等すぎる本番の偏りを再現できず、ホットパーティションを見逃す大口顧客、特定日、特定地域に偏ったデータで負荷試験する
一覧画面のクエリを軽視する管理画面だけRU消費が大きくなる主要画面ごとにクエリとRUを測る
パーティションキー変更を軽く見る移行作業が大きくなり、停止時間が伸びる初期設計時に変更不能性を前提にレビューする
GSIを同期済みテーブルのように扱う書き込み直後の検索結果にズレが出る可能性がある最終的一貫性で許容できる用途に限定する
階層型キーの第1階層が少なすぎる書き込みが一部に集中する第1階層の値数と負荷分布を確認する
statustypeをキーにする値が少なく、ホットパーティションになりやすい高カーディナリティでクエリに合うキーを選ぶ

新規設計時の実用的な決め方

新しくコンテナーを設計する場合は、先にパーティションキー名を決めるのではなく、アクセスパターンから逆算します。

最初に書き出すべき情報

確認項目
主要な読み取り条件customerIdで注文一覧、tenantIdでユーザー一覧
主要な書き込み単位注文作成、ログ追加、セッションイベント追加
データが増える軸顧客、テナント、デバイス、日付
偏りやすい軸大口顧客、人気商品、大規模テナント
トランザクション範囲同一注文内、同一ユーザー内、同一テナント内
将来の検索要件管理画面、分析、全文検索、ベクトル検索

この情報を整理したうえで、候補キーを比較します。

ワークロード例候補キー判断
ユーザーごとのプロフィール参照/userId読み取り条件と一致しやすい
注文履歴API/customerId顧客単位の検索に強いが、大口顧客の偏りを確認
大量の注文書き込み/customerId_orderMonth書き込み分散に有効。ただし顧客単独検索は工夫が必要
マルチテナントのイベントログ/tenantId、または階層型/tenantId/userId/sessionIdテナントごとの成長差を確認
IoTテレメトリ/deviceId_dateBucket特定デバイスや時間帯の集中に注意
複数軸の検索が必要な業務アプリソースは主要キー、別軸はGSIを検討プレビュー制約とコストを確認

管理者と開発者が今すぐ確認すべきチェックリスト

既存のAzure Cosmos DB環境がある場合は、次の順で確認すると、パーティション設計のリスクを短時間で洗い出せます。

チェック確認内容
コンテナー一覧重要コンテナー、データ量、RU設定、API種別を整理する
パーティションキー現在のパーティションキーパスと値の分布を確認する
データ量論理パーティションキーごとのサイズが20GBに近づいていないか見る
RU消費特定キーにリクエストが集中していないか見る
クエリ主要クエリにパーティションキー条件が含まれているか確認する
トランザクションストアドプロシージャやトリガーが複数パーティションを前提にしていないか確認する
監視Diagnostic Logs、Log Analytics、Azure Monitorアラートを設定する
移行計画キー変更が必要な場合、新コンテナー作成と切り替え手順を用意する
新機能検討階層型パーティションキーやGSIが要件に合うか評価する
費用見積もり移行中、GSI利用時、コピー時の追加RUとストレージを見積もる

まとめ:まずはパーティションキーの偏りを確認する

Azure Cosmos DBの「Partitioning and horizontal scaling」で重要なのは、パーティション分割の仕組みを知ること自体ではなく、自社のコンテナーがその仕組みに合った設計になっているかを確認することです。

特に、次の3つを優先して確認してください。

  1. 既存コンテナーのパーティションキー値ごとのデータ量が20GBに近づいていないか
  2. 主要クエリがパーティションキーを含み、不要なクロスパーティションクエリを増やしていないか
  3. /idstatus、ランダムGUIDなど、便利に見えるが実運用で不利になりやすいキーを選んでいないか

問題が見つかった場合は、いきなり移行するのではなく、通常のパーティションキー、合成パーティションキー、階層型パーティションキー、グローバルセカンダリインデックス、コンテナーコピーのどれが最もリスクとコストを抑えられるかを比較しましょう。Azure Cosmos DBのスケーリングは自動で行われますが、スケールしやすいデータ配置を作る責任は設計側にあります。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次