Azure Cosmos DB SQL API で実行された操作の要求ユニット使用量の確認

適用対象: SQL API

Azure Cosmos DB では、多くの API (SQL、MongoDB、Cassandra、Gremlin、Table など) がサポートされています。 各 API には、固有のデータベース操作のセットがあります。 これらの操作の範囲は、単純なポイント読み取り/書き込みから、複雑なクエリにまで及びます。 各データベース操作は、それらの操作の複雑さに基づいて、システム リソースを消費します。

すべてのデータベース操作のコストは Azure Cosmos DB によって正規化され、要求ユニット (RU) によって表されます。 要求の料金は、すべてのデータベース操作で使用される要求ユニットです。 RU は、Azure Cosmos DB によってサポートされるデータベース操作を実行するために必要な CPU、IOPS、メモリなどのシステム リソースを抽象化する、パフォーマンスの通貨と考えることができます。 Azure Cosmos コンテナーの操作にどの API 使用するかに関係なく、コストは RU によって測定されます。 データベース操作が書き込み、ポイント読み取り、またはクエリのいずれの場合でも、コストは常に RU で測定されます。 詳細については、要求ユニットとその考慮事項に関する記事を参照してください。

この記事では、Azure Cosmos DB SQL API のコンテナーに対して実行された任意の操作の要求ユニット (RU) 消費量を確認するさまざまな方法を紹介します。 別の API を使用している場合は、RU の使用量を確認する方法について、MongoDB の APICassandra APIGremlin APITable API の記事を参照してください。

この消費量は現在、Azure portal を使用するか、いずれかの SDK を通じて Azure Cosmos DB から返された応答を調べることによってのみ測定できます。 SQL API を使用している場合、Azure Cosmos コンテナーに対する操作の RU 消費量をいくつかの方法で確認できます。

Azure ポータルの使用

  1. Azure portal にサインインします。

  2. 新しい Azure Cosmos アカウントを作成してデータを取り込むか、既にデータが存在する既存の Azure Cosmos アカウントを選択します。

  3. [データ エクスプローラー] ウィンドウに進み、操作の対象となるコンテナーを選択します。

  4. [新しい SQL クエリ] を選択します。

  5. 有効なクエリを入力し、[クエリの実行] を選択します。

  6. [Query Stats]\(クエリの統計\) を選択すると、実行した要求の実際の使用量が表示されます。

Azure portal で SQL クエリの要求の使用量を表示した画面のスクリーンショット

.NET SDK を使用する

.NET SDK v2 から返されたオブジェクトにより プロパティが公開されます。

ResourceResponse<Document> fetchDocumentResponse = await client.ReadDocumentAsync(
    UriFactory.CreateDocumentUri("database", "container", "itemId"),
    new RequestOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    });
var requestCharge = fetchDocumentResponse.RequestCharge;

StoredProcedureResponse<string> storedProcedureCallResponse = await client.ExecuteStoredProcedureAsync<string>(
    UriFactory.CreateStoredProcedureUri("database", "container", "storedProcedureId"),
    new RequestOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    });
requestCharge = storedProcedureCallResponse.RequestCharge;

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
    UriFactory.CreateDocumentCollectionUri("database", "container"),
    "SELECT * FROM c",
    new FeedOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    }).AsDocumentQuery();
while (query.HasMoreResults)
{
    FeedResponse<dynamic> queryResponse = await query.ExecuteNextAsync<dynamic>();
    requestCharge = queryResponse.RequestCharge;
}

Java SDK の使用

Java SDK から返されたオブジェクトにより メソッドが公開されます。

RequestOptions requestOptions = new RequestOptions();
requestOptions.setPartitionKey(new PartitionKey("partitionKey"));

Observable<ResourceResponse<Document>> readDocumentResponse = client.readDocument(String.format("/dbs/%s/colls/%s/docs/%s", "database", "container", "itemId"), requestOptions);
readDocumentResponse.subscribe(result -> {
    double requestCharge = result.getRequestCharge();
});

Observable<StoredProcedureResponse> storedProcedureResponse = client.executeStoredProcedure(String.format("/dbs/%s/colls/%s/sprocs/%s", "database", "container", "storedProcedureId"), requestOptions, null);
storedProcedureResponse.subscribe(result -> {
    double requestCharge = result.getRequestCharge();
});

FeedOptions feedOptions = new FeedOptions();
feedOptions.setPartitionKey(new PartitionKey("partitionKey"));

Observable<FeedResponse<Document>> feedResponse = client
    .queryDocuments(String.format("/dbs/%s/colls/%s", "database", "container"), "SELECT * FROM c", feedOptions);
feedResponse.forEach(result -> {
    double requestCharge = result.getRequestCharge();
});

詳細については、Azure Cosmos DB SQL API アカウントを使用して Java アプリケーションを構築するクイック スタートを参照してください。

Node.js SDK の使用

Node.js SDK から返されるオブジェクトは、 サブオブジェクトを公開します。基になる HTTP API から返されるすべてのヘッダーが、このサブオブジェクトによってマップされます。 要求の使用量は、x-ms-request-charge キーで得られます。

const item = await client
    .database('database')
    .container('container')
    .item('itemId', 'partitionKey')
    .read();
var requestCharge = item.headers['x-ms-request-charge'];

const storedProcedureResult = await client
    .database('database')
    .container('container')
    .storedProcedure('storedProcedureId')
    .execute({
        partitionKey: 'partitionKey'
    });
requestCharge = storedProcedureResult.headers['x-ms-request-charge'];

const query = client.database('database')
    .container('container')
    .items
    .query('SELECT * FROM c', {
        partitionKey: 'partitionKey'
    });
while (query.hasMoreResults()) {
    var result = await query.executeNext();
    requestCharge = result.headers['x-ms-request-charge'];
}

詳細については、Azure Cosmos DB SQL API アカウントを使用して Node.js アプリを構築するクイック スタートを参照してください。

Python SDK の使用

CosmosClientCosmosClient オブジェクトは、last_response_headers ディクショナリを公開します。直前に実行された操作に関して、基になる HTTP API から返されるすべてのヘッダーが、このディクショナリによってマップされます。 要求の使用量は、x-ms-request-charge キーで得られます。

response = client.ReadItem(
    'dbs/database/colls/container/docs/itemId', {'partitionKey': 'partitionKey'})
request_charge = client.last_response_headers['x-ms-request-charge']

response = client.ExecuteStoredProcedure(
    'dbs/database/colls/container/sprocs/storedProcedureId', None, {'partitionKey': 'partitionKey'})
request_charge = client.last_response_headers['x-ms-request-charge']

詳細については、「クイック スタート: Azure Cosmos DB SQL API アカウントを使用して Python アプリケーションを構築する」を参照してください。

次のステップ

RU 使用量を最適化する方法については、次の記事をご覧ください。