【发布时间】:2018-05-14 11:12:29
【问题描述】:
我有一个使用 5 位成员代码作为其分区键的分区集合。集合中可能有数千个分区键。
我在其中插入了大约 32K 文档。使用Partition Stats 示例:
Summary:
partitions: 1
documentsCount: 32,190
documentsSize: 0.045 GB
但是只有一个物理分区!如果我使用门户指标,我会看到类似的情况:
这是否意味着我的所有查询都针对单个物理分区? Cosmos 什么时候添加更多物理分区?
我问的原因是因为我看到性能非常差,当我加载测试时会严重恶化。例如,这种简单的计数方法在轻量级测试中开始很快,然后在系统处于压力下时需要几秒钟(忽略handler 的东西):
private async Task<int> RetrieveDigitalMembershipRefreshItemsCount(string code, string correlationId)
{
var error = "";
double cost = 0;
var handler = HandlersFactory.GetProfilerHandler(_loggerService, _settingService);
handler.Start(LOG_TAG, "RetrieveDigitalMembershipRefreshItemsCount", correlationId);
try
{
if (this._docDbClient == null)
throw new Exception("No singleton DocDb client!");
// Check to see if there is a URL
if (string.IsNullOrEmpty(_docDbDigitalMembershipsCollectionName))
throw new Exception("No Digital Memberships collection defined!");
FeedOptions queryOptions = new FeedOptions { MaxItemCount = 1, PartitionKey = new Microsoft.Azure.Documents.PartitionKey(code.ToUpper()) };
return await _docDbClient.CreateDocumentQuery<DigitalMembershipDeviceRegistrationItem>(
UriFactory.CreateDocumentCollectionUri(_docDbDatabaseName, _docDbDigitalMembershipsCollectionName), queryOptions)
.Where(e => e.CollectionType == DigitalMembershipCollectionTypes.RefreshItem && e.Code.ToUpper() == code.ToUpper())
.CountAsync();
}
catch (Exception ex)
{
error = ex.Message;
throw new Exception(error);
}
finally
{
handler.Stop(error, cost, new
{
Code = code
});
}
}
这是此方法的日志,因为测试按最长持续时间排序。最初只需要几毫秒:
我尝试了大多数性能技巧,即直接模式、相同区域、单例。任何帮助将非常感激。
谢谢。
【问题讨论】:
标签: azure azure-cosmosdb