cosmic

元記事:Troubleshoot query performance for Azure Cosmos DB

  1. DBとクライアントは同じリージョンに配置する。
  2. 一貫性レベルを確認する。
    許容できる一貫性レベルを確認する。
  3. ログクエリ情報を使用する。
    QueryMetricsを使用して、遅い・重いクエリを直す
  4. Query Optionの調整
    クエリ性能はリクエストのFeed Optionパラメータで調整できる
    Max Degree of Parallelism (-1)
    Max Buffered Item Count (-1)
    Max Item Count (-1)
    比較するときとは、2,4,8,16のような値を使用する
  5. コンテナーからすべての結果を読む
    全ての結果を取得できるまで取得し続けてください。
    継続トークンがある間は取得し続ける。
  6. インデックスを使用できるシステム関数を選ぶ
    文字列範囲に変換できる式は、インデックスを使用できます。
    STARTSWITH / LEFT / SUBSTRING
  7. JOIN式の最適化
    JOIN式は大きなクロス積に拡張できます。
    可能であれば、フィルタをして狭い範囲に対してクエリを実行します。
  8. order by の最適化
    order by 性能は、分散度が低い列かインデックスポリシーがない列だと、性能劣化します。
  9. 多くの大きなItemを読み込んだり実行する
    時間とRUsは、レスポンスサイズとクエリ処理の作業量に依存します。

image

cosmic

Cosmos DB の論理パーティションは、コンテナーのパーティションキーに基づいてデータをグルーピングします。

Cosmos DBは、水平スケールさせるために、物理サーバー/パーティション間で、論理パーティションをシームレスに組み合わせます。
ユーザーが制御できるのは論理パーティションまでで、論理パーティションと物理パーティションのマッピングはシステム側で自動的に行います。

image

パーティショニングの設計により性能に大きく影響がでます。
良いパーティションキーとは、容量とスループットの観点からバランスが取れて分散するものです。

容量が偏ったり、スループットが偏ったりする場合には、パーティションキーを見直ししたほうがいいです。

image

cosmic

Cosmos DB の性能は、RSuで定義されています。
指定したRUsに従って、性能が提供されます。

RUsは、メモリやCPU、IOPSが抽象化して表現されたものです。
1KBのItemを1Readすると1RUs。
1KBのItemを1Write1すると5RUs。

RUsが課金に関係してくるので、各クエリのRUsをいかに低くするのかが重要な性能チューニングポイントになります。
RUsを抑えるデータモデリングについては、こちらの「Cosmos DBのデータモデリングの勘所」を参照してください。

image