我已阅读文档数据库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
模式,我看到了这些时间:
Direct
模式超过TCP
这些:
正如您所看到的,Direct
模式超过TCP
对于后续请求要快得多,但第一个请求仍然要慢得多。
这有什么理由吗?我们可以采取哪些措施来缩短初始响应时间?
更新
我忘记了我们代理了所有来自Azure VM的HTTPS流量,这就是为什么HTTPS
响应在初始测试中慢于TCP
的原因。
关闭代理,运行10次迭代(3次预热文档数据库和SDK,以及7次配置文件),我现在看到Gateway
超过HTTPS
的响应时间约为11毫秒Direct
超过TCP
约7毫秒。
答案 0 :(得分:3)
就像上面提到的一张海报一样,to the BindingSelected event
已经涵盖了这一点DocumentDB中的第一个操作需要更长的时间,因为SDK会执行其他设置工作,例如获取DocumentDB数据分区的物理地址。后续操作将按照一位数毫秒的顺序完成(对于屏幕截图中的写入大约需要7毫秒,通常在2毫秒内读取)。
答案 1 :(得分:0)
DocumentDB在p99级别提供低延迟和高吞吐量。为此,建立连接和池化它们,下载元数据以进行有效的路由缓存以及大规模的许多其他优化都会产生摊销成本。这就是预付费用的原因。