我遇到了使用.NET NEST客戶端和ElasticSearch的批量索引性能隨着時間的推移而隨着索引和文檔數量的不斷下降。elasticsearch批量索引隨着時間的推移變得越來越慢,具有不變的索引和文檔數量
我們使用Ubuntu Server 12.04.1 LTS 64位和Sun Java 7在m1.large Amazon實例上運行ElasticSearch Version: 0.19.11, JVM: 23.5-b02
。除了與Ubuntu安裝配合使用的情況外,此實例上沒有其他任何內容在運行。
亞馬遜M1大實例:從http://aws.amazon.com/ec2/instance-types/
7.5 GiB memory
4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each)
850 GB instance storage
64-bit platform
I/O Performance: High
EBS-Optimized Available: 500 Mbps
API name: m1.large
ES_MAX_MEM設置爲4G和ES_MIN_MEM設置爲2克
每天晚上我們的索引/重新索引〜15000個使用NEST文件在我們的.NET應用。在任何給定的時間,只有一個索引< = 15000個文檔。
當第一次安裝服務器時,前幾天索引和搜索速度很快,然後索引開始變得越來越慢。一次批量索引索引100個文檔,過了一段時間,批量操作完成需要15秒。之後,我們開始看到很多以下例外情況,並且索引打磨停止。
System.Net.WebException: The request was aborted: The request was canceled.
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization) :
的builk索引實現看起來像這樣
重新啓動elasticsearch守護進程似乎並沒有做任何任何區別,但刪除索引和重新索引一切一樣。但幾天後,我們會有相同的緩慢索引問題。
我剛剛刪除的指數,後重新啓用刷新間隔的希望,這可能保持從有辱人格的索引中的各散貨指數運行後添加的優化。
...
...
finally
{
EnableRefreshInterval();
elasticClient.Optimize("products");
}
我在這裏做了什麼可怕的錯誤?
15000應該是微風都爲NEST和Elasticsearch,什麼是幾天後的實際文件數和索引大小? –
你是如何在ES配置中解決這個問題的?我注意到有一件事絕對需要解決;您已將最大和最小ES堆內存設置爲不同的值。他們應該是一樣的;佔系統可用總內存的50%到60%之間。我目前使用NEST作爲客戶端的回填應用程序每分鐘批量處理100,000個文檔的批量索引,因此15,000應該是微不足道的。你也是一個非常老的ES版本 - 它自19.11以來有了很大的改進(當前爲0.20.4) –