Elasticsearch性能优化思路和最全优化细节

Elasticsearch性能优化思路

Elasticsearch是个非常依赖文件缓存的一个数据库,优化主要有两个思路,一个是优化搜索的逻辑,一个优化缓存。
搜索逻辑的优化,可以考虑使用合理的索引设置,合理的搜索方法,使得搜索的路径短、返回快、消耗资源少
缓存的优化就比较多了,首先是文件缓存,就是服务器除了jvm之外的缓存,这部分需要预留的充足,然后就是存储的体积,存储的体积越小,文件缓存能缓存的部分就越多,读磁盘的次数就越少,相应的性能就能起飞。然后是jvm内的缓存,这个就涉及到了优化缓存的淘汰时间,缓存的结构等方向,如何提高缓存的命中率,合理延长缓存的生命周期就很重要了

优化方向与细节

分片数量

分片数量:合理的分片很重要,例如一台机是4核cpu,一共有3台机子,那么理论上分片数量在3*4=12个左右会有比较好的一个性能的利用,如果有副本的话,可以适当减少一些分片数量,不过实际上一个分片可能会有几个大的段存储,所以一个节点的分片数量比节点的cpu线程数少一些会比较好。

副本数量:

设置副本可以提高数据的一个安全性,最大的作用是防止数据丢失,同时提高一些搜索的性能和可用性,但是在源数据不在es即es的数据是从别的数据库同步过来的情况下,其实不用担心数据的丢失。es的副本是比较吃磁盘性能的,集群环境下拥有副本会增加磁盘的读写压力,当磁盘性能不够的时候,可以考虑不要副本。

段合并相关

es的段是不可变的,一个分片拥有一个或者多个段,取决于数据的更新和刷新,对于插入的数据,首先是落在内存缓冲区,形成一个内存的段,然后定时刷入磁盘形成一个磁盘的段(默认是1s),当段数量多的时候,es会合并多个段为一个段,这时候会吃磁盘性能。同时如果段太多,也会影响查询的性能。而es高版本有对段合并进行限流,默认是20M/s。对于段优化来说,主要是刷入时间的设置,如果es的插入是持续不断的,那建议设置大一些的刷新时间,避免持续产生大量的段。同时在手动导入大批量数据的时候也可以调大这个刷新时间,然后导入完成后手动调用api强制进行段合并,可以获得一个良好的初始性能。

字段设置

对于不搜索的只读字段,设置不索引,如果字段只需要排序聚合分组,也可以不索引,这些依赖的是正排索引;当一个字段不需要聚合、排序、分组时候,可以禁用doc_value;text类型的field会存储norm值,用来计算doc的相关度分数,如果我们需要对一个text field进行搜索,但是不关心这个field的分数,那么可以禁用norm值;如果 field 只需要提供搜索,不需要返回则将 stored 设为 false。一般来说,在保证功能的前提下把数据使用的存储空间压的越小,性能越好。除此之外可以考虑使用best_compression压缩算法来压缩索引,比默认的lz4有更高的压缩比,可以通过减少磁盘的总大小来提高性能,但是同时插入的性能会降低一些

内存

内存对于es的搜索来说是非常重要的,一个是文件缓存,一个是应用内存,应用内存就是es的jvm使用的内存,文件缓存就是free命令里面cache使用的内存,一般来说,建议预留一般以上的内存给文件缓存,这样能确保性能。

排序

对于一个搜索功能如果不是按分数排序而是有一个字段的默认排序,则在建立索引的时候设置索引的排序为这个字段,这样设置可以大大的降低大部分搜索请求的性能消耗。同时如果不要求返回总数量可以请求里track_total_hits设置为false,这样es不会尝试搜索所有数据来计算返回总量。

es缓存优化

这里主要指的jvm内的缓存,主要有节点查询缓存、字段数据缓存(排序)、分片请求缓存和索引缓存。而这里面很多缓存的整体生命周期是较短的,和数据的刷新频率有关。这些缓存有一部分是会集体失效的,因为不是长期缓存,所以即使是热词搜索,也不能保证数据一定在内存里。所以,可以针对这些缓存的特征,以及业务日常搜索的特征,进行预热优化,比如,对一些热词进行定时任务预热,可以优化es的缓存结构以及大部分用户的查询体验。

客户端优化

es查询是使用http协议,客户端使用http请求,需要设置合理的连接池,或者使用开源框架并设置合理的连接池配置。以java的spring自带的es客户端来说,http的客户端连接池和超时的配置就过于保守了,如果出现一些请求慢或者卡死的情况,很容易影响所有请求。

索引别名

业务尽量使用索引的别名,在es一个别名可以对应多个索引,业务使用别名,在很多情况下可以很方便的无缝切换索引,提高可用性。

机器配置

对于机器配置,内存>磁盘性能>cpu>其他。内存是最重要的,特别是文件缓存filesystem cache能用的内存。然后是磁盘性能,当内存不足以缓存全部数据,请求就会比较吃磁盘性能,包括es 的一些段合并也会使用到磁盘的性能。然后是cpu主要影响排序聚合以及正则的一些计算。一般来说总体来说的优化思路是,减少数据的磁盘占用,提高可用内存的容量,优化缓存的命中率。(对于查询频率不高,但是数据量很多的业务,可以考虑降低一些jvm的内存,把更多的内存给filesystem cache)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容