[英]Elasticsearch improve query performance
我正在嘗試提高查詢性能。 對於甚至沒有觸及嵌套文檔的簡單查詢,平均需要大約3秒,並且有時更長。
curl "http://searchbox:9200/global/user/_search?n=0&sort=influence:asc&q=user.name:Bill%20Smith"
即使沒有那種,也需要幾秒鍾。 以下是群集的詳細信息:
1.4TB index size.
210m documents that aren't nested (About 10kb each)
500m documents in total. (nested documents are small: 2-5 fields).
About 128 segments per node.
3 nodes, m2.4xlarge (-Xmx set to 40g, machine memory is 60g)
3 shards.
Index is on amazon EBS volumes.
Replication 0 (have tried replication 2 with only little improvement)
我沒有看到任何明顯的CPU /內存等峰值。任何想法如何改進?
Garry關於堆空間的觀點是正確的,但這可能不是堆空間問題。
使用當前配置,對於1.5 TB索引,您可以使用少於60 GB的頁面緩存。 如果頁面緩存中的索引少於4.2%,那么在大多數搜索中,您很可能需要訪問磁盤。
您可能希望為群集添加更多內存,並且您還需要仔細考慮分片數量。 堅持默認會導致分布不均勻。 如果你在這種情況下有五個分片,你就有兩台機器,每台40%的數據,第三台機器只有20%。 在任何一種情況下,在進行分布式搜索時,您將始終等待最慢的機器或磁盤。 關於Elasticsearch in Production的這篇文章在確定適當的內存量方面有了更多的深入。
對於這個確切的搜索示例,您可以使用過濾器。 您正在排序,因此忽略查詢計算的分數。 使用過濾器,它將在第一次運行后進行緩存,后續搜索將很快。
好的,這里有幾件事:
但要考慮的一件事是,分片可能會提高搜索性能,但它也會對索引時間產生巨大影響。 分片越多,索引文檔所需的時間越長......
您也存儲了相當多的數據,也許您應該查看自定義路由 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.