ES优化总结

标签: es 优化 | 发表时间:2018-09-13 14:33 | 作者:java-007
出处:http://www.iteye.com
最近一直在研究ES集群,也看了很多篇前辈们总结的博客,同事借鉴了官方给出的一些建议,做了一下几点总结,希望对后来者有用:



1、内存交换。为了防止ES进程的内存被置换到磁盘上(会导致在检索的时候发生内存交换导致检索速度迟缓)引起性能急速下降。在启动ES的时

候可以把config/elasticsearch.yml中的bootstrap.mlockall设置为true就可以了。



2、节点的细分。在官方文档中,主要定义了master node 、data node 、client node 、tribe node、coordinating node,他们之间的协调工作,才能使

集群节点更好的工作。(需要仔细研究,多搭建几个节点测试下)。

master node:配置 node.master : true     node.data : false

1)当master为false,而data为true时,会对该节点产生严重负荷;

2)当master为true,而data为false时,该节点作为一个协调者;

3)当master为false,data也为false时,该节点就变成了一个负载均衡器。



3  索引刷新。每次在进行一次document操作的时候,有两个可选项,在索引(动词,理解为插入一条document)之后刷新,在查询(同上)之前刷

新,在索引之后刷新,会牺牲索引的效率(每次插入document都额外的进行刷新),在查询之前刷新会牺牲查询的效率(查询之前会额外的进行刷新)。这两种方式虽然都可以让我们每次查到的数据都是实时性的,但是效率特别的低下,因此我们正常情况可以采用定时刷新的方式,即每次间隔一秒刷新一次(时间可以自己定)。在创建构建客户端的时候,设置index.refresh_interval为想要的数值即可。如:1s,也可以在elasticsearch中配置index.refresh_interval:1s



4 内存分配。es在内存分配上官方给的内存最大不超过32G(和os有关,超过32G,指针会变长,增加cpu压力),一般为机器内存的50%即可,剩下

的会交给lucene,Lucene的设计目的是把底层OS里的数据缓存到内存中。Lucene的段是分别存储到单个文件中的,这些文件都是不会变化的,所以很利于缓存,同时操作系统也会把这些段文件缓存起来,以便更快的访问。



5  分片数量。ES在创建索引的时候默认的分片大小是5。我们可以在创建索引的时候指定分片数量。注意:分片一旦确定,就没法更改。这是因为

Es在创建分片之后,每次索引(动词)都会使用一个算法

shard= hash(routing) % number_of_primary_shards

来确定存储在哪一个分片上,如果更改分片的数量,那么之前所有的document都将无效。没法被routing。

官方给的建议:每个node上的分片数量不超过3个,因此我们如果想要更多的分片只能通过增加节点的方式。

分片不宜过大,也不宜过小。具体可以参考官网的文档和压力测试的结果来设定大小。

为了导入数据更快,可以在创建索引的时候把复制分片设置为0.导入数据结束之后再设置为想要的值。



6  routing。Elasticsearch的路由机制和它的分片机制有相似的地方,他们都是使用的hash算法。将具有相同hash值得文档放在一起。

情景分析:如果poi将全国所有的店面的信息放在es中,如果我们不指定路由,es会随机的将所有的文档存入分片中(数据很大,所以我们需要不止5个分片),现在我们想要查询上海地区所有的poi信息,es的做法是master收到请求,然后广播,每个节点查询数据,然后将数据交给通道节点合并,排序交给用户。这个会严重增加es的节点压力,网络负载。如果我们在查询的时候能明确的知道上海的poi数据在某一个节点上,我们只需要在查询的时候指定routing,es就会在routing指定的节点上查询,就可以避免不必要的资源浪费。也可以提高查询的速度。

我们可以在添加数据的时候指定某一个相同值得字段放在一起,比如上海的cityid=1,我们可以使用以下命令

Curl -XPUT localhost:9200/store/poi?routing=cityId -d '{

"cityId":"1",

"cityName":"上海"

}'

PUT test/_settings
{
"index.routing.allocation.include.size":"big,medium" #这个是把test索引的数据全部分配到big和medium节点
}

PUT test/_settings
{
"index.routing.allocation.exclude.size": "small" #与上面相反,把test索引的数据全部移除small节点
}





7  导入。在导入数据的时候建议先把副本设置为0.待导入完毕之后再设置为需要的数据。

curl -XPUT '192.168.5.112:9200/qinzi/_settings?pretty' -d '
{
    "index" : {
        "number_of_replicas" : 1
    }
}'

导入的时候先把刷新的时间设置为-1(这样在索引的时候,数据对搜索不可见,就是在索引的时候,数据是没法实时查询的),等到索引结束之后,在设置为想要的时间,这个值可以可以通过api设置

curl -XPUT localhost:9200/test/_settings-d '{
    "index" : {
        "refresh_interval" :"-1"
    }
}'

记得在索引之后改回来,不然之前索引的数据都没法查询。



8  节点状态监控。



9    segments优化 ES是基于lucene的,

curl -XPOST192.168.5.112:9200/baidu/_forcemerge?max_num_segments=1(强制性的把segments变为1)在合并的时候需要预留足够的磁盘空间,因为segments合并时候是采用一定的策略,把segments合并,但是旧的还会暂时存在的。

curl -XPOST 192.168.5.112:9200/baidu/_optimize?max_num_segments=1

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [es 优化] 推荐:

ES优化总结

- - 非技术 - ITeye博客
最近一直在研究ES集群,也看了很多篇前辈们总结的博客,同事借鉴了官方给出的一些建议,做了一下几点总结,希望对后来者有用:. 为了防止ES进程的内存被置换到磁盘上(会导致在检索的时候发生内存交换导致检索速度迟缓)引起性能急速下降. 候可以把config/elasticsearch.yml中的bootstrap.mlockall设置为true就可以了.

ES性能优化总结

- - 互联网 - ITeye博客
    Elasticsearch是目前大数据领域最热门的技术栈之一,经过近8年的发展,已从0.0.X版升级至6.X版本,虽然增加了很多的特性和功能,但是在主体架构上,还是没有太多的变化. 下面就把我对于ES使用实践的一些经验总结一下,供大家参考;也请大家拍砖. 如果有条件,尽可能使用SSD硬盘, 不错的CPU.

es的连接查询

- - 行业应用 - ITeye博客
在一般的关系型数据库中,都支持连接操作. 在ES这种分布式方案中进行连接操作,代价是十分昂贵的. 不过ES也提供了相类似的操作,支持水平任意扩展,实现连接的效果. 其他内容, 参考Elasticsearch官方指南整理. 在ES中支持两种连接方式:嵌套查询 和 has_child、has_parent父子查询.

MySQL InnoDB 與 PostgreSQL 的 Partial Index(es) 是不一樣的東西…

- - Gea-Suan Lin's BLOG
MySQL InnoDB 指的 Partial Index 是:. An index that represents only part of a column value, typically the first N characters (the prefix) of a long VARCHAR value..

索引表和ES的一点点思考 - CSDN博客

- -
在电商项目中,物理库存系统是个极其重要的系统,订单支付后,就会开始来占用物理库存. 一般情况下,库存系统都是要分库的,因为主要的操作是写操作,例如占用/释放/取消等写操作. 使用分库可以降低数据库写的压力. 尽管写操作为主,但是读操作也是有的. 比如说,库存占用的时候,得先查询是否有库存,而这个查询操作并不都会带上分库因子(用于路由到具体的某个数据库),而是一些比较宽松的查询条件,这些查询条件对应的数据可能分布在不同的数据库上.

存储优化

- - CSDN博客推荐文章
定期对存储设备的固件和驱动程序做升级. 选择合适的磁盘阵列,RAID可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率,还能提供容错,冗余的功能,最常用的有raid10和raid5.. 使用主动多路径(Active Multipathing)技术.

mysql优化

- - 数据库 - ITeye博客
公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL  的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库系统,不可能指望 MySQL  默认的系统参数能够让 MySQL运行得非常顺畅. 在Apache, PHP,  MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分.

sql优化

- - 数据库 - ITeye博客
是对数据库(数据)进行操作的惟一途径;. 消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;. 可以有不同的写法;易学,难精通. 固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高. 应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致.

ORACLE:plsql优化

- - CSDN博客数据库推荐文章
 1、登录后默认自动选中My Objects. 设置方法:Tools菜单--Brower Filters会打开Brower Filters的定单窗口,把“My Objects”设为默认即可. 同理,可以在Tools菜单--Brower Filters中把你经常点的几个目录(比如:tables Views Seq Functions Procedures)移得靠上一点,并加上颜色区分,这样你的平均寻表时间会大大缩短,试试看.

hive 优化 tips

- - CSDN博客推荐文章
一、     Hive join优化. 也可以显示声明进行map join:特别适用于小表join大表的时候,SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key. 2.     注意带表分区的join, 如:.