Encontre a taxa de unidade de solicitação para operações no Azure Cosmos DB para 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 pontuais 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 de banco de dados é normalizado pelo Azure Cosmos DB e é expresso por unidades de solicitação (RU). A taxa de solicitação é a unidade de solicitação consumida por todas as operações do banco de dados. Você pode pensar em RUs como uma moeda de desempenho abstraindo os recursos do sistema, como CPU, IOPS e memória, necessários para executar as operações de banco de dados com suporte do Azure Cosmos DB. Não importa qual API você use para interagir com seu contêiner, os custos são sempre medidos em RUs. Seja a operação da base de dados de escrita, de leitura de ponto ou de consulta, os custos são sempre medidos em RU. Para saber mais, consulte Unidades de solicitação no Azure Cosmos DB.

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

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

Utilizar o portal do Azure

  1. Inicie sessão no portal do Azure.

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

  3. Vá para o painel Data Explorer e selecione o contêiner no qual deseja trabalhar.

  4. Selecione Nova Consulta SQL.

  5. Insira uma consulta válida e selecione Executar consulta.

  6. Selecione Estatísticas de consulta para exibir a cobrança de solicitação real para a solicitação executada.

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

Utilizar o .NET SDK

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

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 Java SDK

Os objetos retornados do Java SDK expõem um getRequestCharge() método:

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, consulte Guia de início rápido: criar um aplicativo Java usando uma conta do Azure Cosmos DB para NoSQL.

Usar o SDK .js nó

Os objetos retornados do SDK .js nó expõem um headers subobjeto que mapeia todos os cabeçalhos retornados pela API HTTP subjacente. A taxa de solicitação está disponível sob a x-ms-request-charge chave:

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, consulte Guia de início rápido: criar um aplicativo .js nó usando uma conta do Azure Cosmos DB para NoSQL.

Utilizar o SDK Python

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

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, consulte Guia de início rápido: criar um aplicativo Python usando uma conta do Azure Cosmos DB para NoSQL.

Próximos passos

Para saber mais sobre como otimizar seu consumo de RU, consulte estes artigos: