如何在DocumentDB中测量RU?

时间:2016-02-06 12:07:05

标签: azure query-performance azure-cosmosdb

鉴于Azure DocumentDB使用请求单位作为吞吐量的度量,我希望确保我的查询尽可能使用最少量的RU来提高吞吐量。是否有工具可以告诉我查询将采用多少个RU以及查询是否实际使用了索引?

3 个答案:

答案 0 :(得分:2)

正如您所发现的,某些工具将在完成查询后提供RU。这也可以通过编程方式获得,因为响应中返回了var queryIterator = client.queryDocuments(collLink, querySpec ); queryIterator.executeNext(function (err, results, headers) { if (err) { // deal with error... } else { // deal with payload... var ruConsumed = headers['x-ms-request-charge']; } }); 标头,并且可以通过DocumentDB SDK轻松检索。

例如,这是一个使用JS / node显示RU检索的片段:

dbs/<databaseId>/colls/<collectionId>

关于索引的问题,以及确定属性是否已编入索引(然后应该使用或不使用索引回答有关查询的问题):您可以查询集合,该集合返回响应中的索引详细信息报头中。

例如:给定一些路径var collLink = 'dbs/' + databaseId+ '/colls/'+ collectionId; client.readCollection(collLink, function (err, coll) { if (err) { // deal with error } else { // compare indexingPolicy with your property, to see if it's included or excluded // this just shows you what these properties look like console.log("Included: " + JSON.stringify(coll.indexingPolicy.includedPaths)) console.log("Excluded: " + JSON.stringify(coll.indexingPolicy.excludedPaths)) } });

includedPaths

您会看到excludedPathsIncluded: [{"path":"/*","indexes":[{"kind":"Range","dataType":"Number","precision":-1},{"kind":"Hash","dataType":"String","precision":3}]}] Excluded: [] 看起来像这样,然后您可以以任何您认为合适的方式搜索您的指定财产:

.travis.yml

答案 1 :(得分:0)

我发现DocumentDb Studio显示了为每个查询提供RU的响应标头。

enter image description here

答案 2 :(得分:0)

另一个选项是使用启用了跟踪收集选项的模拟器。 https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator

我试图分析LINQ聚合查询,目前c#SDK似乎不可能。

使用模拟器的跟踪输出,我能够识别请求费用和许多其他指标。有很多数据需要通过。 我发现请求费用存储在此事件密钥下 DocDBServer/Transport_Channel_Processortask/Genericoperation

示例输出:
ThreadID="141,928" FormattedMessage="EndRequest DocumentServiceId localhost, ResourceType 2, OperationType 15, ResourceId 91M7AL+QPQA=, StatusCode 200, HRESULTHex 0, ResponseLength 61, Duration 70,546, HasQuery 1, PartitionId a4cb495b-38c8-11e6-8106-8cdcd42c33be, ReplicaId 1, ConsistencyLevel 3, RequestSessionToken 0:594, ResponseSessionToken 594, HasContinuation 0, HasPreTrigger 0, HasPostTrigger 0, IsFeedUnfiltered 0, IndexingDirective 5, XDate Fri, 09 Jun 2017 08:49:03 GMT, RetryAfterMilliseconds 0, MaxItemCount -1, ActualItemCount 1, ClientVersion 2017-02-22, UserAgent Microsoft.Azure.Documents.Common/1.13.58.2, RequestLength 131, NetworkBucket 2, SubscriptionId 00000000-0000-0000-0000-000000000000, Region South Central US, IpAddress 192.168.56.0, ChannelProtocol RNTBD, RequestCharge 51.424, etc...

然后可以将其与来自包含查询信息的另一个事件的数据相关联: DocDBServer/ServiceModuletask/Genericoperation

请注意,您需要perfview来查看ETL日志文件。有关详情,请参阅此处: https://github.com/Azure/azure-documentdb-dotnet/blob/master/docs/documentdb-sdk_capture_etl.md