为什么对Azure文档数据库的第一个请求比后续请求慢得多?

时间:2016-09-01 13:16:20

标签: c# performance azure azure-cosmosdb

我已阅读文档数据库performance guidance,但我仍然看到文档数据库的第一次请求慢得多。我们正在使用client.OpenAsync()提示并在Direct模式下与TCP进行关联。

我已经编写了一个示例程序来回复此问题(此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);     
}

Gateway上使用HTTPS模式,我看到了这些时间:

enter image description here

Direct模式超过TCP这些:

enter image description here

正如您所看到的,Direct模式超过TCP对于后续请求要快得多,但第一个请求仍然要慢得多。

这有什么理由吗?我们可以采取哪些措施来缩短初始响应时间?

更新

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

关闭代理,运行10次迭代(3次预热文档数据库和SDK,以及7次配置文件),我现在看到Gateway超过HTTPS的响应时间约为11毫秒Direct超过TCP约7毫秒。

2 个答案:

答案 0 :(得分:3)

就像上面提到的一张海报一样,to the BindingSelected event

已经涵盖了这一点

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

答案 1 :(得分:0)

DocumentDB在p99级别提供低延迟和高吞吐量。为此,建立连接和池化它们,下载元数据以进行有效的路由缓存以及大规模的许多其他优化都会产生摊销成本。这就是预付费用的原因。

相关问题