繁体   English   中英

ElasticSearch Nest 2.x-性能问题,如何禁用审核跟踪?

[英]ElasticSearch Nest 2.x - Performance issue, how to disable audit trail?

我正在使用Elasticsearch Client NEST 2运行搜索查询。查询运行良好,但是检查响应我可以看到,在ES操作本身快速完成的同时,审计查询花费了大量时间。

这是一个请求/响应的示例:

在POST上成功进行低级调用:/ document / ElasticDocument / _search

此API调用的审核跟踪:-HealthyResponse:节点: http ://my-ES-server.com:9200/接收时间:00:00:00.3040912
请求:{“ from”:0,“ size”:1,“ query”:{“ term”:{“ Id”:{“ value”:1568}}}}
响应:{ “ took”:16 ,“ timed_out”:false,“ _ shards”:{“ total”:5,“ successful”:5,“ failed”:0},“ hits”:{“ total”:1, “MAX_SCORE”:9.345218, “点击”:[{ “_指数”: “文件”, “_类型”: “ElasticDocument”, “_ ID”: “1568”, “_分数”:9.345218, “_源”:{... .....}}]}}

我们可以看到,审核花费了304毫秒,而ES搜索仅花费了16毫秒。

我的问题是,是否仍要禁用此审计跟踪或调整配置以有效地提高性能?

我查看了源代码,发现审计跟踪操作是由ElasticsearchResponse的属性DebugInformation触发的,但是找不到如何禁用它。

我的配置非常简单:

var node = new Uri("http://my-ES-server.com:9200/");

var settings = new ConnectionSettings(node);

settings.DefaultIndex("document");
settings.DefaultTypeNameInferrer(p => p.Name);
settings.DefaultFieldNameInferrer(p => p);

settings.DisableDirectStreaming(); 

this.elasticClient = new ElasticClient(settings);

然后我的嵌套调用:

var response = this.elasticClient.Search<ElasticDocument>(s => s
    .Query(q => q.Term("Id", documentId))
    .From(0)
    .Take(1)
);

有关信息,当我针对本地ES商店(填充相同数据)运行查询时,审计跟踪大约需要60毫秒,这比ES搜索操作更好,但仍然很大。

非常感谢,

迈克尔

访问.DebugInformation属性时,将构建审核跟踪信息

took响应是Elasticsearch在集群上执行搜索所花费的时间并且不包括

  1. 时间序列化请求
  2. 到达所选Elasticsearch节点的网络延迟
  3. 来自选定的Elasticsearch节点的网络延迟
  4. 时间反序列化响应

Contrastly中, Took你在审计跟踪中看到的时间是一个粗略的 (在它与计算感IDateTimeProvider使用实施DateTime默认精度) 之间的总时间

  1. IConnectionPool获取节点
  2. 序列化请求
  3. 发送请求到节点
  4. Elasticsearch节点上花费的时间
  5. 从节点接收回响应
  6. 反序列化响应

由于网络延迟的差异,审核跟踪中报告的数量在不同的环境中可能会有所不同。 此外,由于json序列化程序用于成员访问的缓存的初始化,因此在第一个请求上它可能更高。

.DisableDirectStreaming() ,查看您的配置,除非您需要访问请求或响应主体字节, 否则不要调用.DisableDirectStreaming() ; 这会将请求和响应内部复制到MemoryStream以便使字节可用。

我有类似的问题,这与审核跟踪无关。 关键是NEST默认使用Accept: application/json标头。 当您在客户端上设置EnableHttpCompression()时,NEST开始使用Accept-Encoding: gzip, deflate标头,这是正确的。

这是我的客户端初始化代码:

var node = new Uri("http://localhost.:9200");
var settings = new ConnectionSettings(node)
    .EnableHttpCompression()
    .PrettyJson();
var client = new ElasticClient(settings);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM