簡體   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