首页 » 网站推广 » PHP索引调优技巧_Elasticsearch调优索引速度最佳实践

PHP索引调优技巧_Elasticsearch调优索引速度最佳实践

访客 2024-11-08 0

扫一扫用手机浏览

文章目录 [+]

下面是针对Elasticsearch索引性能进行调优的建议。

一、利用批量要求(bulk requests)

批量要求将产生比单文档索引要求好得多的性能。

PHP索引调优技巧_Elasticsearch调优索引速度最佳实践

为了知道批量要求的最佳大小,考试测验在具有单个分片的单个节点上运行基准测试。
首先考试测验索引100个文档,然后是200,然后是400,等等。
当索引速率开始稳定时,就达到了数据批量要求的最佳大小。

PHP索引调优技巧_Elasticsearch调优索引速度最佳实践
(图片来自网络侵删)

一样平常而言,宁肯批量索引文档少一些,而不是在太多文档的方向上犯错。
请把稳,如果批量要求文档太大,可能会使Elasticsearch集群受到内存压力,因此建议避免每个要求超出几十兆字节,纵然较大的要求看起来效果更好。

二、利用多个事情者(workers)或线程向Elasticsearch发送数据

发送批量要求的单个线程不太可能将Elasticsearch集群的索引容量最大化。
为了利用集群的所有资源,可以从多个线程或进程发送数据。
除了更好地利用集群的资源,这该当有助于降落每个fsync的本钱。

请把稳TOO_MANY_REQUESTS(429)相应代码(Java客户真个EsRejectedExecutionException),这是Elasticsearch提示无法跟上当前索引速率的办法。
发生这种情形时,该当再次考试测验停息索引,空想情形下利用随机策略调度索引并发量。

与调度批量要求(bulk request)大小类似,只有测试才能确定最佳的worker数量。
这可以通过逐渐增加事情者数量来测试,直到集群上的I/O或CPU饱和。

三、调大refresh interval参数

为了让索引文档对查询可见,须要实行refresh操作,该操作是有本钱的。
当正在进行索引时,不断地实行refresh操作,将影响索引速率。

默认的index.refresh_interval是1s,这迫使Elasticsearch每秒创建一个新的分段。
增加这个参数值(比如说30s)将提升索引速率。

PUT INDEX-NAME/_settings

{

"refresh_interval" : "30s"

}

四、初始化数据加载临时禁用refresh和replicas

如果须要一次加载大量数据,则该当将index.refresh_interval设置为-1,并将index.number_of_replicas设置为0,来禁用刷新(refresh)。
这会暂时使索引处于危险之中,由于任何分片的丢失都将导致数据丢失,但是同时索引将会更快,由于文档只被索引一次。
初始加载完成后,可以将index.refresh_interval和index.number_of_replicas设置回其原始值。

五、禁用swapping交流内存

通过禁止swap交流内存,确保操作系统不会交流出Java进程。

详细禁用swapping的操作,可以参考下面链接:

https://www.elastic.co/guide/en/elasticsearch/reference/7.0/setup-configuration-memory.html

六、供应内存给filesystem cache

文件系统缓存(filesystem cache)将用于缓冲I/O操作。
确保运行Elasticsearch的节点得到至少一半的主机内存,供应给filesystem cache。

七、利用自动天生的id(auto-generated ids)

索引具有显式id的文档时,Elasticsearch须要检讨具有相同id的文档是否已经存在于相同的分片中,这是费时的操作,并且随着索引增长而变得更加费时。
通过利用自动天生的ID,Elasticsearch可以跳过这个检讨,这使索引更快。

PUT test-index

{

"settings":{

"number_of_shards": 3,

"number_of_replicas": 1

}

}

POST test-index/_doc

{

"sku": "002",

"title": "bbb"

}

GET test-index/_search

八、利用更快的硬件

一样平常而言,索引是I/O密集的,须要准备如下硬件:

(1)为filesystem cache分配更多的内存;

(2)利用SSD硬盘;

(3)利用local storage(不要利用NFS、SMB 等remote filesystem)

(此处已添加圈子卡片,请到今日头条客户端查看)

九、索引缓存区(Indexing buffer size)

如果节点只做大量的索引,确保index.memory.index_buffer_size足够大,每个分片最多可以供应512 MB的索引缓冲区。
超过这一设置,索引性能常日也不会提升。

Elasticsearch采取该设置(Java堆的百分比,或者绝对字节大小),并将其作为所有活动分片(active shards)的共享缓冲区。
非常生动的分片自然比实行轻量级索引的分片,更多地利用这个缓冲区。

默认设置为 10%,常日是足够的。
如我们给JVM 10GM内存,索引缓冲区将为1GB,这足以两个索引很重的分片。

(此处已添加圈子卡片,请到今日头条客户端查看)

相关文章

今日头条算法引领个化信息时代的变革

信息爆炸时代已经到来。每个人都是信息的接收者和传播者。面对海量的信息,人们往往感到无所适从。为了解决这一问题,各大互联网公司纷纷推...

网站推广 2025-01-31 阅读1 评论0

今日头条算法信息推荐的秘密武器

信息爆炸的时代已经来临。人们每天都会接触到大量的信息,而如何从这些信息中筛选出有价值的内容,成为了亟待解决的问题。今日头条算法作为...

网站推广 2025-01-31 阅读1 评论0

今日头条算法精准推荐背后的技术奥秘

信息爆炸的时代已经来临。我们每天都要面对海量的信息,如何从这些信息中筛选出自己感兴趣的内容,成为了每个人都关心的问题。今日头条作为...

网站推广 2025-01-31 阅读1 评论0