пытаюсь понять почему запись на сервер забирает 20% cpu сервера, это нормально?
_nodes/hot_threads ничего интересного не показали
сервер находится в google cloud
Hot threads at 2015-09-22T04:02:49.774Z, interval=500ms, busiestThreads=3, ignoreIdleThreads=true:
3.5% (17.5ms out of 500ms) cpu usage by thread 'elasticsearch[elasticsearch2-elasticsearch-1-vm][refresh][T#1]'
2/10 snapshots sharing following 2 elements
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
При записи происходит индексация данных, что является достаточно интенсивной с точки зрения CPU операцией. Сколько вы данных пишите в секунду? Пробуйте hot_threads 5 раз запустить с параметром threads=1000, залейте результаты в gist.github.com и пришлите сюда ссылку.
Похоже, что elasticsearch сливает сегменты, и на это действительно уходит CPU и I/O. А что, это вызывает какие-то проблемы? Вы новые записи добавляете или старые обновляете?
У нас есть три таблицы , допустим A,B,C
в таблице "A" данных всегда больше чем в таблице "В" или "C" примерно в 10 раз.
В таблицу "A" в основном записываются новые данные с периодичностью примерно 1 новый документ в секунду-две
в таблице "А" могут происходить обновления документов - но тоже не очень часто
В таблицу "B" документы в основном обновляются с периодичностью 1 новая запись в секунду-две
Так же в таблицу "B" записываются новые документы , но это не очень часто: 1 новый документ в 30сек-60сек.
В таблицу "С" запись и обновление происходят намного реже чем в других таблицах
-------на данный момент:
A -- 2.5 М документов (590Mb)
B и С -- по 200к документов , B(300MB) C(250MB)
индексируем мы только те поля которые действительно нам нужны
Очень хочется понять в какую сторону стоит двигаться если все данные будут записываться/обновляться в 10-20 раз чаще?
Видел. Никаких очевидных проблем не заметил, кроме того, что у вас несколько больших полей not_analyzed (bio например), что само по себе странно и может привезти к проблемам.
Я бы посоветовал протестировать систему под реальной нагрузкой. Я думаю, что предполагать, что увеличение потока документов в 10 раз увеличит нагрузку на CPU в 10 раз в вашем случае не верно.
Немного не понятно что не так с "not_analyzed" это же не
что иное как "не индексировать" , или я просто что-то не правильно понял
Не совсем, если не надо индексировать поле совсем (по полю нельзя искать), то надо выставлять "index: no", а "not_analyzed" - индексируем "как есть", сохраняя возможность поиска (см. линк)
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.