c# - 为什么对 Azure Document DB 的第一个请求比后续请求慢得多?

标签 c# performance azure azure-cosmosdb

我已阅读文档 DB performance guidance ,但我仍然看到对文档数据库的首次请求要慢得多。我们使用 client.OpenAsync() 技巧并通过 TCPDirect 模式进行连接。

我编写了一个示例程序来重现此问题(此 gist 具有包括录制时间在内的完整源代码):

var endpoint = "";
var key = "";

var connectionPolicy = new ConnectionPolicy 
{
    ConnectionMode = ConnectionMode.Direct,
    ConnectionProtocol = Protocol.Tcp
};

var client = new DocumentClient(new Uri(endpoint), key, connectionPolicy);
var collection = UriFactory.CreateDocumentCollectionUri("test", "TestCollection");

await client.OpenAsync();

for (int i = 0; i < 5; i++)
{
    var test = new Test { Foo = $"Test doc {i}" };
    await client.CreateDocumentAsync(collection, test);     
}

通过HTTPS使用网关模式我看到这些时间:

enter image description here

Direct 模式下,通过 TCP 这些:

enter image description here

如您所见,通过 TCPDirect 模式对于后续请求来说要快得多,但第一个请求仍然慢得多。

这有什么原因吗?我们可以采取什么措施来缩短初始响应时间?

更新

我忘记了我们代理了 Azure VM 之外的所有 HTTPS 流量,这就是为什么在我的初始测试中 HTTPS 响应比 TCP 慢得多的原因。

关闭代理并运行 10 次迭代(3 次用于预热文档数据库和 SDK,7 次用于分析),我现在看到 Gateway 的响应时间约为 11 毫秒(Gateway 超过 ) HTTPS 和通过 TCPDirect 约为 7 毫秒。

最佳答案

就像提到的其中一张海报一样,这已在 DocumentDB performance issues 中进行了介绍。

DocumentDB 中的第一个操作需要更长的时间,因为 SDK 会执行额外的设置工作,例如获取 DocumentDB 数据分区的物理地址。后续操作将以个位数毫秒的速度完成(对于屏幕截图中的写入大约需要 7 毫秒,读取通常低于 2 毫秒)。

关于c# - 为什么对 Azure Document DB 的第一个请求比后续请求慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39272563/

相关文章:

c# - 如何在 metroUI 的 webview 上显示下载的内容

c# - 使用 Microsoft.office.Interop.Excel 读取 Excel 时性能下降

ASP.NET Core 应用程序中的 Azure SignalR 服务

c# - "in"运算符和简单值传递 c# 之间的区别

c# - TimeOut Expired 自带 SetResultTransformer() 方法

performance - 网络流量模拟测试

java - 减少 Java 程序相同连续运行的执行时间

c# - 通过混合连接从客户端连接到 Azure Web 作业

azure - Azure AD 中的 FIDO2 key 是否需要 P1/P2 许可

c# - Linq 中的 DataLayer 具有不同版本的数据模型