【发布时间】:2020-10-22 22:25:22
【问题描述】:
我想使用 Cosmos .NET SDK v3 从 Azure 函数向 Azure Cosmos DB 插入小文档(
插入代码是
await container.CreateItemAsync(
objectToAdd,
new PartitionKey(objectToAdd.PartitionKey),
new ItemRequestOptions { EnableContentResponseOnWrite = false })
查看诊断信息,大部分时间都花在了项目流式传输期间(请参阅最后的日志)。
Azure Function 和 Cosmos 都部署到同一个区域(北欧)。 Cosmos 允许通过启用服务端点的 vnet 访问 Azure Function。
我已通读https://blog.tdwright.co.uk/2019/06/29/aggressively-tuning-cosmos-db-the-long-way-round/ 和https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips-dotnet-sdk-v3-sql 尝试了以下操作:
- 同时使用 Direct 和 Gateway 连接模式(未发现显着差异)。
- 在写入操作时禁用内容响应(这会将写入时间减少到大约 250 毫秒到 500 毫秒)。
- 确保有一个单例
CosmosClient
我没试过:
- 增加数据库上的 RU,因为我只测试少量 7.6 RU 插入。
- 在文档单独到达时使用批量库
对于应该完全在单个数据中心内的东西来说,这似乎是一个很长的响应时间。
我的问题:
- 以上信息是否表明存在网络问题?
- 如果是这样,Cosmos 是否提供了一种类似于 TRACERT 的方式来跟踪 Azure 中的连接?
- Cosmos 是否记录它认为连接源自的 IP 地址?
- 或者是否有可能在代码级别进行进一步优化?
{
"Summary": {
"StartUtc": "2020-10-22T21:21:03.3520979Z",
"ElapsedTime": "00:00:01.0030109",
"UserAgent": "cosmos-netstandard-sdk/3.6.0|3.4.2|38128|X86|Microsoft Windows 10.0.14393 |.NET Core 4.6.29215.02|"
},
"Context": [
{
"Id": "ItemStream",
"ElapsedTime": "00:00:01.0030109"
},
{
"Id": "ItemSerialize",
"ElapsedTime": "00:00:00.0000212"
},
{
"Id": "ExtractPkValue",
"ElapsedTime": "00:00:00.0000402"
},
{
"Id": "BatchAsyncContainerExecutor.Limiter",
"ElapsedTime": "00:00:00.0000056"
},
{
"Id": "RequestInvokerHandler",
"ElapsedTime": "00:00:00.0071549"
},
{
"Id": "Microsoft.Azure.Cosmos.Handlers.RetryHandler",
"ElapsedTime": "00:00:00.0071272"
},
{
"Id": "Microsoft.Azure.Cosmos.Handlers.RouterHandler",
"ElapsedTime": "00:00:00.0070979"
},
{
"Id": "TransportHandler",
"ElapsedTime": "00:00:00.0070954"
},
{
"Id": "PointOperationStatistics",
"ActivityId": "...",
"StatusCode": 200,
"SubStatusCode": 0,
"RequestCharge": 7.62,
"RequestUri": "...",
"RequestSessionToken": null,
"ResponseSessionToken": "..",
"ClientRequestStats": {
"RequestStartTimeUtc": "2020-10-22T21:21:04.3479626Z",
"RequestEndTimeUtc": "2020-10-22T21:21:04.3548940Z",
"RequestLatency": "00:00:00.0069314",
"IsCpuOverloaded": false,
"NumberRegionsAttempted": 1,
"ResponseStatisticsList": [
{
"ResponseTime": "2020-10-22T21:21:04.354894Z",
"ResourceType": 2,
"OperationType": 40,
"StoreResult": "StorePhysicalAddress: rntbd://cdb-ms-prod-northeurope1-fd8.documents.azure.com:14173/apps/.../, LSN: 304, GlobalCommittedLsn: 303, PartitionKeyRangeId: 0, IsValid: True, StatusCode: 200, SubStatusCode: 0, RequestCharge: 7.62, ItemLSN: -1, SessionToken: ..., UsingLocalLSN: False, TransportException: null"
}
],
"AddressResolutionStatistics": [],
"SupplementalResponseStatistics": [],
"FailedReplicas": [],
"RegionsContacted": [
"<redacted>"
],
"ContactedReplicas": [
"rntbd://cdb-ms-prod-northeurope1-fd8.documents.azure.com:14173/apps/<redacted>/",
"rntbd://cdb-ms-prod-northeurope1-fd8.documents.azure.com:14387/apps/<redacted>/",
"rntbd://cdb-ms-prod-northeurope1-fd8.documents.azure.com:14215/apps/<redacted>/",
"rntbd://cdb-ms-prod-northeurope1-fd8.documents.azure.com:14064/apps/<redacted>/"
]
}
},
{
"Id": "BatchAsyncContainerExecutor.ToResponse",
"ElapsedTime": "00:00:00.0000295"
}
]
}
【问题讨论】:
标签: c# azure azure-functions azure-cosmosdb