ابحث عن رسوم وحدة الطلب للعمليات المنفذة في Azure Cosmos DB SQL API

ينطبق على: واجهة برمجة تطبيقات SQL

تدعم قاعدة بيانات Azure Cosmos العديد من واجهات برمجة التطبيقات، مثل SQL وMongoDB وCassandra وGremlin وTable. كل واجهة من واجهات برمجة التطبيقات لديها مجموعة خاصة بها من عمليات قاعدة البيانات. تتراوح هذه العمليات من القراءة والكتابة النقطية البسيطة إلى الاستعلامات المعقدة. تستهلك كل عملية قاعدة بيانات موارد النظام استناداً إلى تعقيد العملية.

يتم تسوية تكلفة جميع عمليات قاعدة البيانات بواسطة Azure Cosmos DB ويتم التعبير عنها بواسطة Request Units (أو وحدات البحث السريع، باختصار). تكلفة الطلب هي وحدات الطلب التي تستهلكها جميع عمليات قاعدة البيانات الخاصة بك. يمكنك التفكير في وحدات الطلب على أنها عملة أداء تستخلص موارد النظام مثل CPU وIOPS والذاكرة المطلوبة لتنفيذ عمليات قاعدة البيانات التي يدعمها Azure Cosmos DB. بغض النظر عن واجهة برمجة التطبيقات التي تستخدمها للتفاعل مع حاوية Azure Cosmos، يتم دائماً قياس التكاليف عبر وحدات الطلب. سواء كانت عملية قاعدة البيانات عبارة عن كتابة أو قراءة نقطة أو استعلام، يتم دائماً قياس التكاليف بوحدات RUs. لمعرفة المزيد، راجع مقالة وحدات الطلب واعتباراتها.

تقدم هذه المقالة الطرق المختلفة التي يمكنك من خلالها العثور على استهلاك وحدة الطلب (RU) لأي عملية يتم تنفيذها على حاوية في Azure Cosmos DB SQL API. إذا كنت تستخدم واجهة برمجة تطبيقات مختلفة، فراجع مقالات API for MongoDBو Cassandra APIو Gremlin APIو Table API للعثور على رسوم RU / ثانية.

حالياً، يمكنك قياس هذا الاستهلاك فقط باستخدام مدخل Azure أو بفحص الاستجابة المرسلة من Azure Cosmos DB عبر إحدى حزم SDK. إذا كنت تستخدم واجهة برمجة تطبيقات SQL، فلديك خيارات متعددة للعثور على استهلاك RU لعملية مقابل حاوية Azure Cosmos.

استخدام مدخل Microsoft Azure

  1. تسجيل الدخول إلى ⁧⁩مدخل Azure⁧⁩.

  2. إنشاء حساب Azure Cosmos جديد وتزويده بالبيانات، أو تحديد حساب Azure Cosmos الحالي الذي يحتوي على بيانات بالفعل.

  3. انتقل إلى جزء Data Explorer، ثم حدد الحاوية التي تريد العمل عليها.

  4. حدد New SQL Query.

  5. أدخل استعلاماً صالحاً، ثم حدد Execute Query.

  6. حدد Query Stats لعرض رسوم الطلب الفعلية للطلب الذي نفذته.

Screenshot of a SQL query request charge in the Azure portal

استخدم .NET عدة تطوير البرامج

تعرض الكائنات التي تم إرجاعها من .NET SDK v2 خاصية 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;
}

استخدم Java SDK

تعرض الكائنات التي تم إرجاعها من Java SDK طريقة 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();
});

لمزيد من المعلومات، راجع Quickstart: إنشاء تطبيق Java باستخدام حساب Azure Cosmos DB SQL API.

استخدم Node.js SDK

تعرض الكائنات التي تم إرجاعها من Node.js SDK كائناً فرعياً headers يقوم بتعيين جميع الرؤوس التي تم إرجاعها بواسطة واجهة برمجة تطبيقات HTTP الأساسية. رسوم الطلب متاحة تحت المفتاح 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'];
}

لمزيد من المعلومات، راجع Quickstart: إنشاء تطبيق Node.js باستخدام حساب Azure Cosmos DB SQL API.

استخدم Python SDK

يكشف الكائن CosmosClient من Python SDK عن قاموس last_response_headers يعيّن جميع الرؤوس التي تم إرجاعها بواسطة واجهة برمجة تطبيقات HTTP الأساسية لآخر عملية تم تنفيذها. رسوم الطلب متاحة تحت المفتاح 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']

لمزيد من المعلومات، راجع Quickstart: إنشاء تطبيق Python باستخدام حساب Azure Cosmos DB SQL API.

الخطوات التالية

لمعرفة المزيد حول تحسين استهلاك وحدة الطلب، راجع هذه المقالات: