Vyhledání poplatků za jednotku požadavku pro operace v rozhraní SQL API služby Azure Cosmos DB

PLATÍ PRO: ROZHRANÍ SQL API

Azure Cosmos DB podporuje mnoho rozhraní API, jako jsou SQL, MongoDB, Cassandra, Gremlin a Table. Každé rozhraní API má vlastní sadu databázových operací. Tyto operace se liší od čtení a zápisu jednoduchých bodů až po složité dotazy. Každá operace databáze využívá systémové prostředky na základě složitosti operace.

Náklady na všechny databázové operace jsou normalizovány službou Azure Cosmos DB a vyjadřuje se jednotkami žádostí (RU). Poplatky za požadavek jsou jednotky žádostí spotřebované všemi databázovými operacemi. Ru si můžete představit jako měnu výkonu, která abstrahuje systémové prostředky, jako je procesor, IOPS a paměť, které jsou potřeba k provádění databázových operací podporovaných službou Azure Cosmos DB. Bez ohledu na to, které rozhraní API používáte pro interakci s kontejnerem, se náklady vždy měří v RU. Bez ohledu na to, jestli je operace databáze zápis, čtení bodu nebo dotazu, se náklady vždy měří v ruách. Další informace najdete v tématu Jednotky žádostí ve službě Azure Cosmos DB.

Tento článek představuje různé způsoby, jak najít spotřebu jednotek požadavku pro jakoukoli operaci spuštěnou v kontejneru v rozhraní SQL API služby Azure Cosmos DB. Pokud používáte jiné rozhraní API, přečtěte si téma API pro MongoDB, Rozhraní API Cassandra, rozhraníGremlin API a rozhraní Table API.

V současné době můžete měřit spotřebu jenom pomocí webu Azure Portal nebo kontrolou odpovědi odeslané ze služby Azure Cosmos DB prostřednictvím jedné ze sad SDK. Pokud používáte rozhraní SQL API, máte několik možností pro vyhledání poplatku za žádost za operaci.

Použití webu Azure Portal

  1. Přihlaste se k webu Azure Portal.

  2. Vytvořte nový účet Azure Cosmos a nasílejte ho daty nebo vyberte existující účet Azure Cosmos, který už obsahuje data.

  3. Přejděte do podokna Průzkumník dat a vyberte kontejner, na který chcete pracovat.

  4. Vyberte Nový dotaz SQL.

  5. Zadejte platný dotaz a pak vyberte Spustit dotaz.

  6. Vyberte Statistiky dotazů, abyste zobrazili skutečné poplatky za požadavek, který jste provedli.

    Screenshot of a SQL query request charge in the Azure portal.

Použití sady .NET SDK

Objekty vrácené ze sady .NET SDK v2 zpřístupňují RequestCharge vlastnost:

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;
}

Použití sady Java SDK

Objekty vrácené ze sady Java SDK zpřístupňují metodu getRequestCharge() :

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();
});

Další informace najdete v tématu Rychlý start: Vytvoření aplikace v Javě pomocí účtu rozhraní SQL API služby Azure Cosmos DB.

Použití sady Node.js SDK

Objekty vrácené ze sadyNode.js SDK zpřístupňují headers dílčí objekt, který mapuje všechny hlavičky vrácené podkladovým rozhraním HTTP API. Poplatek za žádost je k dispozici v rámci x-ms-request-charge klíče:

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'];
}

Další informace najdete v tématu Rychlý start: Vytvoření aplikace Node.js pomocí účtu rozhraní SQL API služby Azure Cosmos DB.

Použití sady Python SDK

Objekt CosmosClient ze sady Python SDK zveřejňuje slovník, který mapuje last_response_headers všechny hlavičky vrácené podkladovým rozhraním HTTP API pro poslední spuštěnou operaci. Poplatek za žádost je k dispozici v rámci x-ms-request-charge klíče:

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']

Další informace najdete v tématu Rychlý start: Vytvoření aplikace v Pythonu pomocí účtu rozhraní SQL API služby Azure Cosmos DB.

Další kroky

Informace o optimalizaci spotřeby RU najdete v těchto článcích: