Localizar o encargo da unidade de solicitação para operações no Azure Cosmos DB for NoSQL

APLICA-SE A: NoSQL

O Azure Cosmos DB dá suporte a muitas APIs como SQL, MongoDB, Cassandra, Gremlin e Table. Cada API tem seu próprio conjunto de operações de banco de dados. Essas operações variam de simples leituras e gravações de pontos a consultas complexas. Cada operação de banco de dados consome recursos do sistema com base na complexidade da operação.

O custo de todas as operações do banco de dados é normalizado pelo Azure Cosmos DB e expresso por unidades de solicitação (RU). Encargo de solicitação é a cobrança por unidades de solicitação consumidas por todas as operações de banco de dados. Você pode encarar as RUs como uma moeda de desempenho que abstrai os recursos do sistema (como CPU, IOPS e memória) necessários para executar as operações de banco de dados compatíveis com o Azure Cosmos DB. Independentemente da API usada para interagir com o contêiner, os custos sempre serão medidos em RUs. Independentemente da operação de banco de dados ser uma gravação, uma leitura pontual ou uma consulta, os custos serão sempre medidos em RUs. Saiba mais sobre Unidades de Solicitação no Azure Cosmos DB.

Este artigo apresenta as diferentes maneiras de localizar o consumo de unidades de solicitação para qualquer operação executada em um contêiner no Azure Cosmos DB for NoSQL. Se você estiver usando uma API diferente, veja API para MongoDB, API para Cassandra, API para Gremlin e API para Tabela.

Atualmente, somente é possível medir o consumo usando o portal do Azure ou inspecionando a resposta enviada do Azure Cosmos DB por meio de um dos SDKs. Se estiver usando a API for NoSQL, você terá várias opções para localizar o encargo de solicitação para uma operação.

Use o Portal do Azure

  1. Entre no portal do Azure.

  2. Crie uma conta do Azure Cosmos DB e alimente-a com alguns dados ou selecione uma conta do Azure Cosmos DB existente que já contenha dados.

  3. Acesse o painel do Data Explorer e, em seguida, selecione o contêiner no qual deseja trabalhar.

  4. Selecione Nova Consulta SQL.

  5. Insira uma consulta válida e, em seguida, selecione Executar Consulta.

  6. Selecione Estatísticas da Consulta para exibir o preço de solicitação real da solicitação executada.

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

Usar o SDK .NET

Os objetos retornados do SDK do .NET v2 expõem uma propriedade RequestCharge:

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

Usar o SDK do Java

Os objetos retornados do SDK do Java expõem um método 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();
});

Para obter mais informações, veja Início Rápido: criar um aplicativo do Java usando uma conta do Azure Cosmos DB for NoSQL.

Usar o SDK do Node.js

Os objetos retornados do SDK do Node.js expõem um subobjeto headers que mapeia todos os cabeçalhos retornados pela API HTTP subjacente. O preço de solicitação está disponível na chave 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'];
}

Para obter mais informações, veja Início Rápido: criar um aplicativo Node.js usando uma conta do Azure Cosmos DB for NoSQL.

Usar o SDK do Python

O objeto Container do SDK do Python expõe um dicionário last_response_headers que mapeia todos os cabeçalhos retornados pela API HTTP subjacente para a última operação executada. O preço de solicitação está disponível na chave x-ms-request-charge:

new_item = {
    "id": "70b63682-b93a-4c77-aad2-65501347265f",
    "partition_key": "61dba35b-4f02-45c5-b648-c6badc0cbd79",
    "name": "Yamba Surfboard"
}
container.create_item(new_item)

request_charge = container.client_connection.last_response_headers["x-ms-request-charge"]
existing_item = container.read_item(
    item="70b63682-b93a-4c77-aad2-65501347265f"
    partition_key="61dba35b-4f02-45c5-b648-c6badc0cbd79"
)

request_charge = container.client_connection.last_response_headers["x-ms-request-charge"]

Para obter mais informações, veja Início Rápido: criar um aplicativo Python usando uma conta do Azure Cosmos DB for NoSQL.

Próximas etapas

Para saber mais sobre como otimizar o consumo de RU, confira estes artigos: