当前位置: 首页 > 知识库问答 >
问题:

如何解决从Azure函数向Azure Cosmos缓慢插入的问题

令狐翰
2023-03-14

我想插入小文件(

插入代码是

await container.CreateItemAsync(
                    objectToAdd,
                    new PartitionKey(objectToAdd.PartitionKey),
                    new ItemRequestOptions { EnableContentResponseOnWrite = false })

查看诊断,大部分时间是在项目流期间花费的(请参阅末尾的日志)。

Azure 函数和 Cosmo 都部署到同一区域(北欧)。Cosmos 允许通过启用了服务终结点的 vnet 访问 Azure 函数。

我已经通读了https://blog . TD Wright . co . uk/2019/06/29/aggressive-tuning-cosmos-db-the-long-way-round/和https://docs . Microsoft . com/en-us/azure/cosmos-db/performance-tips-dot net-SDK-v3-SQL尝试了以下内容:

  • 同时使用直接连接模式和网关连接模式(未发现显著差异)。
  • 禁用写入操作时的内容响应(这会将写入时间减少到大约 250ms-500ms)。
  • 确保存在单例 Cosmos 客户端

我没试过:

  • 增加数据库上的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"
            }
        ]
    }
    

共有1个答案

子车凯泽
2023-03-14

您似乎正在使用批量模式。请记住,批量模式是在发送大量操作时使RU饱和的模式。你提到你正在发送

另请检查:

  • 您是否正在使用辛格尔顿宇宙客户端?
  • 实例是否在与写入 Cosmos DB 区域相同的区域中运行?
  • 更新您的 SDK,您使用的是版本 3.6.0,在 3.11.0 中对批量(如果您仍要使用批量)进行了改进,以使其在低文档计数方案中更快。
 类似资料:
  • 尝试了所有方法来通过测试用例,但仍然只显示一个错误。我不知道如何纠正这个错误。 输入:1534236469 实际输出:1056389759 预期输出:0 我不知道为什么我的代码没有给出输出0。

  • 本文向大家介绍docker容器内网络请求缓慢问题解决,包括了docker容器内网络请求缓慢问题解决的使用技巧和注意事项,需要的朋友参考一下 在使用docker的过程中发现了几个问题,在docker里进行的网络请求经常会失败,比如npm install以及bundle install等操作,或者是作为中间层在应用中去获取api数据的过程经常会出现timeout等情况,所以开始探究docker的网络机

  • 本文向大家介绍解决keras使用cov1D函数的输入问题,包括了解决keras使用cov1D函数的输入问题的使用技巧和注意事项,需要的朋友参考一下 解决了以下错误: 1.ValueError: Input 0 is incompatible with layer conv1d_1: expected ndim=3, found ndim=4 2.ValueError: Error when che

  • 我是Java开发新手,不熟悉各种导入(Maven、Git等),所以我简单地说: 这两个没有在代码中解决我正在检查,我不知道我应该采取什么样的行动,也不知道我应该导入什么来解决它,但它可能是一些流行的库。 是否有完整的指南指导开发人员如何在eclipse中导入包(例如,C#开发人员使用Nuget,尽管有大量手工制作的包),或者他们真的使用所有这些巨大的导入选择器?

  • 我的出发点是一个HTTP触发的Azure函数。它从请求正文中收集一些JSON,并将该消息传递给Azure服务总线。 我在这里一定遗漏了一些东西(我以前在RabbitMQ中使用过控制台应用程序),但是我如何从HTTP触发的Azure函数向服务总线发布消息。 我找到了几个关于配置function.json的参考资料(在Visual Studio中就是-im构建)。 **更新**仍然无法使其工作。得到了

  • 1.项目是使用的若依的框架,vue2+elementui. 2.页面问题:在页面出示加载的时候,会有一个js特别慢,能有10M,加载8s,严重影响页面的体验. 在测试环境还行,但是升级到正式的环境之后就会出现这个问题。 排查之后发现js也是开启gzip的webpack配置 3.webpack的配置 1,删除一些预加载,放在了webpack中,但是不生效。 2,"report": "vue-cli-