- Elasticsearch 指南其他版本
- 8.17 中的新功能
- Elasticsearch 基础
- 快速入门
- 设置 Elasticsearch
- 升级 Elasticsearch
- 索引模块
- 映射
- 文本分析
- 索引模板
- 数据流
- 摄取管道
- 别名
- 搜索您的数据
- 重新排名
- 查询 DSL
- 聚合
- 地理空间分析
- 连接器
- EQL
- ES|QL
- SQL
- 脚本
- 数据管理
- 自动缩放
- 监视集群
- 汇总或转换数据
- 设置高可用性集群
- 快照和还原
- 保护 Elastic Stack 的安全
- Watcher
- 命令行工具
- elasticsearch-certgen
- elasticsearch-certutil
- elasticsearch-create-enrollment-token
- elasticsearch-croneval
- elasticsearch-keystore
- elasticsearch-node
- elasticsearch-reconfigure-node
- elasticsearch-reset-password
- elasticsearch-saml-metadata
- elasticsearch-service-tokens
- elasticsearch-setup-passwords
- elasticsearch-shard
- elasticsearch-syskeygen
- elasticsearch-users
- 优化
- 故障排除
- 修复常见的集群问题
- 诊断未分配的分片
- 向系统中添加丢失的层
- 允许 Elasticsearch 在系统中分配数据
- 允许 Elasticsearch 分配索引
- 索引将索引分配过滤器与数据层节点角色混合,以在数据层之间移动
- 没有足够的节点来分配所有分片副本
- 单个节点上索引的分片总数已超过
- 每个节点的分片总数已达到
- 故障排除损坏
- 修复磁盘空间不足的数据节点
- 修复磁盘空间不足的主节点
- 修复磁盘空间不足的其他角色节点
- 启动索引生命周期管理
- 启动快照生命周期管理
- 从快照恢复
- 故障排除损坏的存储库
- 解决重复的快照策略失败问题
- 故障排除不稳定的集群
- 故障排除发现
- 故障排除监控
- 故障排除转换
- 故障排除 Watcher
- 故障排除搜索
- 故障排除分片容量健康问题
- 故障排除不平衡的集群
- 捕获诊断信息
- REST API
- API 约定
- 通用选项
- REST API 兼容性
- 自动缩放 API
- 行为分析 API
- 紧凑和对齐文本 (CAT) API
- 集群 API
- 跨集群复制 API
- 连接器 API
- 数据流 API
- 文档 API
- 丰富 API
- EQL API
- ES|QL API
- 功能 API
- Fleet API
- 图表探索 API
- 索引 API
- 别名是否存在
- 别名
- 分析
- 分析索引磁盘使用量
- 清除缓存
- 克隆索引
- 关闭索引
- 创建索引
- 创建或更新别名
- 创建或更新组件模板
- 创建或更新索引模板
- 创建或更新索引模板(旧版)
- 删除组件模板
- 删除悬挂索引
- 删除别名
- 删除索引
- 删除索引模板
- 删除索引模板(旧版)
- 存在
- 字段使用情况统计信息
- 刷新
- 强制合并
- 获取别名
- 获取组件模板
- 获取字段映射
- 获取索引
- 获取索引设置
- 获取索引模板
- 获取索引模板(旧版)
- 获取映射
- 导入悬挂索引
- 索引恢复
- 索引段
- 索引分片存储
- 索引统计信息
- 索引模板是否存在(旧版)
- 列出悬挂索引
- 打开索引
- 刷新
- 解析索引
- 解析集群
- 翻转
- 收缩索引
- 模拟索引
- 模拟模板
- 拆分索引
- 解冻索引
- 更新索引设置
- 更新映射
- 索引生命周期管理 API
- 推理 API
- 信息 API
- 摄取 API
- 许可 API
- Logstash API
- 机器学习 API
- 机器学习异常检测 API
- 机器学习数据帧分析 API
- 机器学习训练模型 API
- 迁移 API
- 节点生命周期 API
- 查询规则 API
- 重新加载搜索分析器 API
- 存储库计量 API
- 汇总 API
- 根 API
- 脚本 API
- 搜索 API
- 搜索应用程序 API
- 可搜索快照 API
- 安全 API
- 身份验证
- 更改密码
- 清除缓存
- 清除角色缓存
- 清除权限缓存
- 清除 API 密钥缓存
- 清除服务帐户令牌缓存
- 创建 API 密钥
- 创建或更新应用程序权限
- 创建或更新角色映射
- 创建或更新角色
- 批量创建或更新角色 API
- 批量删除角色 API
- 创建或更新用户
- 创建服务帐户令牌
- 委托 PKI 身份验证
- 删除应用程序权限
- 删除角色映射
- 删除角色
- 删除服务帐户令牌
- 删除用户
- 禁用用户
- 启用用户
- 注册 Kibana
- 注册节点
- 获取 API 密钥信息
- 获取应用程序权限
- 获取内置权限
- 获取角色映射
- 获取角色
- 查询角色
- 获取服务帐户
- 获取服务帐户凭据
- 获取安全设置
- 获取令牌
- 获取用户权限
- 获取用户
- 授予 API 密钥
- 具有权限
- 使 API 密钥失效
- 使令牌失效
- OpenID Connect 准备身份验证
- OpenID Connect 身份验证
- OpenID Connect 注销
- 查询 API 密钥信息
- 查询用户
- 更新 API 密钥
- 更新安全设置
- 批量更新 API 密钥
- SAML 准备身份验证
- SAML 身份验证
- SAML 注销
- SAML 失效
- SAML 完成注销
- SAML 服务提供商元数据
- SSL 证书
- 激活用户配置文件
- 禁用用户配置文件
- 启用用户配置文件
- 获取用户配置文件
- 建议用户配置文件
- 更新用户配置文件数据
- 具有用户配置文件权限
- 创建跨集群 API 密钥
- 更新跨集群 API 密钥
- 快照和还原 API
- 快照生命周期管理 API
- SQL API
- 同义词 API
- 文本结构 API
- 转换 API
- 使用情况 API
- Watcher API
- 定义
- 迁移指南
- 发行说明
- Elasticsearch 版本 8.17.0
- Elasticsearch 版本 8.16.1
- Elasticsearch 版本 8.16.0
- Elasticsearch 版本 8.15.5
- Elasticsearch 版本 8.15.4
- Elasticsearch 版本 8.15.3
- Elasticsearch 版本 8.15.2
- Elasticsearch 版本 8.15.1
- Elasticsearch 版本 8.15.0
- Elasticsearch 版本 8.14.3
- Elasticsearch 版本 8.14.2
- Elasticsearch 版本 8.14.1
- Elasticsearch 版本 8.14.0
- Elasticsearch 版本 8.13.4
- Elasticsearch 版本 8.13.3
- Elasticsearch 版本 8.13.2
- Elasticsearch 版本 8.13.1
- Elasticsearch 版本 8.13.0
- Elasticsearch 版本 8.12.2
- Elasticsearch 版本 8.12.1
- Elasticsearch 版本 8.12.0
- Elasticsearch 版本 8.11.4
- Elasticsearch 版本 8.11.3
- Elasticsearch 版本 8.11.2
- Elasticsearch 版本 8.11.1
- Elasticsearch 版本 8.11.0
- Elasticsearch 版本 8.10.4
- Elasticsearch 版本 8.10.3
- Elasticsearch 版本 8.10.2
- Elasticsearch 版本 8.10.1
- Elasticsearch 版本 8.10.0
- Elasticsearch 版本 8.9.2
- Elasticsearch 版本 8.9.1
- Elasticsearch 版本 8.9.0
- Elasticsearch 版本 8.8.2
- Elasticsearch 版本 8.8.1
- Elasticsearch 版本 8.8.0
- Elasticsearch 版本 8.7.1
- Elasticsearch 版本 8.7.0
- Elasticsearch 版本 8.6.2
- Elasticsearch 版本 8.6.1
- Elasticsearch 版本 8.6.0
- Elasticsearch 版本 8.5.3
- Elasticsearch 版本 8.5.2
- Elasticsearch 版本 8.5.1
- Elasticsearch 版本 8.5.0
- Elasticsearch 版本 8.4.3
- Elasticsearch 版本 8.4.2
- Elasticsearch 版本 8.4.1
- Elasticsearch 版本 8.4.0
- Elasticsearch 版本 8.3.3
- Elasticsearch 版本 8.3.2
- Elasticsearch 版本 8.3.1
- Elasticsearch 版本 8.3.0
- Elasticsearch 版本 8.2.3
- Elasticsearch 版本 8.2.2
- Elasticsearch 版本 8.2.1
- Elasticsearch 版本 8.2.0
- Elasticsearch 版本 8.1.3
- Elasticsearch 版本 8.1.2
- Elasticsearch 版本 8.1.1
- Elasticsearch 版本 8.1.0
- Elasticsearch 版本 8.0.1
- Elasticsearch 版本 8.0.0
- Elasticsearch 版本 8.0.0-rc2
- Elasticsearch 版本 8.0.0-rc1
- Elasticsearch 版本 8.0.0-beta1
- Elasticsearch 版本 8.0.0-alpha2
- Elasticsearch 版本 8.0.0-alpha1
- 依赖项和版本
调整索引速度
编辑调整索引速度
编辑使用批量请求
编辑批量请求比单文档索引请求的性能要好得多。为了了解批量请求的最佳大小,您应该在单个分片的单个节点上运行基准测试。首先尝试一次索引 100 个文档,然后 200 个,然后 400 个,等等,在每次基准测试运行时将批量请求中的文档数量加倍。当索引速度开始趋于平稳时,您就知道您已达到数据的批量请求的最佳大小。如果出现平局,最好在文档数量上偏少而不是偏多。请注意,当同时发送大量批量请求时,过大的批量请求可能会给集群带来内存压力,因此即使较大的请求看起来性能更好,也建议避免每个请求超过几十兆字节。
使用多个工作线程/线程向 Elasticsearch 发送数据
编辑单线程发送批量请求不太可能充分利用 Elasticsearch 集群的索引容量。为了使用集群的所有资源,您应该从多个线程或进程发送数据。除了更好地利用集群的资源外,这还有助于降低每次 fsync 的成本。
请务必注意 TOO_MANY_REQUESTS (429)
响应代码(Java 客户端中的 EsRejectedExecutionException
),这是 Elasticsearch 告诉您它无法跟上当前索引速率的方式。发生这种情况时,您应该在再次尝试之前暂停索引一段时间,理想情况下使用随机指数退避。
与调整批量请求大小类似,只有测试才能知道最佳的工作线程数量。可以通过逐步增加工作线程的数量来测试,直到集群上的 I/O 或 CPU 饱和为止。
取消设置或增加刷新间隔
编辑使更改对搜索可见的操作(称为刷新)是昂贵的,并且在进行索引活动时频繁调用它会影响索引速度。
默认情况下,Elasticsearch 每秒定期刷新索引,但仅限于在过去 30 秒内收到一个或多个搜索请求的索引。
如果您没有或只有很少的搜索流量(例如,每 5 分钟少于一个搜索请求)并且想要优化索引速度,这是最佳配置。此行为旨在在不执行任何搜索的默认情况下自动优化批量索引。为了选择退出此行为,请显式设置刷新间隔。
另一方面,如果您的索引有规律的搜索请求,则此默认行为意味着 Elasticsearch 将每 1 秒刷新您的索引。如果您可以接受索引文档和文档变得可见之间的时间间隔增加,则将index.refresh_interval
增加到一个更大的值(例如 30s
)可能会有助于提高索引速度。
禁用初始加载的副本
编辑如果您有大量数据想要一次性加载到 Elasticsearch 中,则将 index.number_of_replicas
设置为 0
可能会有利于加快索引速度。没有副本意味着丢失单个节点可能会导致数据丢失,因此重要的是数据存在于其他地方,以便在出现问题时可以重试初始加载。初始加载完成后,您可以将 index.number_of_replicas
设置回其原始值。
如果 index.refresh_interval
在索引设置中配置,则在此初始加载期间取消设置它,并在初始加载完成后将其设置回其原始值可能会进一步有所帮助。
禁用交换
编辑您应该确保操作系统没有通过禁用交换来换出 java 进程。
将内存分配给文件系统缓存
编辑文件系统缓存将用于缓冲 I/O 操作。您应该确保将运行 Elasticsearch 的机器至少一半的内存分配给文件系统缓存。
使用自动生成的 ID
编辑当索引具有显式 ID 的文档时,Elasticsearch 需要检查同一分片中是否已存在具有相同 ID 的文档,这是一个昂贵的操作,并且随着索引的增长而变得更加昂贵。通过使用自动生成的 ID,Elasticsearch 可以跳过此检查,从而使索引更快。
使用更快的硬件
编辑如果索引受 I/O 限制,请考虑增加文件系统缓存的大小(见上文)或使用更快的存储。Elasticsearch 通常会使用顺序写入创建单个文件。但是,索引涉及并发写入多个文件,以及随机和顺序读取的混合,因此 SSD 驱动器往往比旋转磁盘性能更好。
通过配置 RAID 0 阵列,将您的索引分散到多个 SSD 上。请记住,由于任何一个 SSD 的故障都会破坏索引,因此会增加故障的风险。但是,这通常是正确的折衷方案:优化单个分片以获得最大性能,然后跨不同节点添加副本,以便为任何节点故障提供冗余。您还可以使用快照和还原来备份索引以获得进一步的保险。
本地存储与远程存储
编辑直接连接的(本地)存储通常比远程存储性能更好,因为它更容易配置良好并避免通信开销。
某些远程存储的性能非常差,尤其是在 Elasticsearch 施加的负载下。但是,通过仔细调整,有时也可以使用远程存储实现可接受的性能。在提交到特定的存储架构之前,请使用实际工作负载对您的系统进行基准测试,以确定任何调整参数的影响。如果您无法获得预期的性能,请与您的存储系统供应商合作以找出问题。
索引缓冲区大小
编辑如果您的节点仅执行繁重的索引,请确保indices.memory.index_buffer_size
足够大,以便每个正在进行繁重索引的分片最多提供 512 MB 的索引缓冲区(超出此范围,索引性能通常不会提高)。Elasticsearch 将该设置(Java 堆的百分比或绝对字节大小)用作所有活动分片之间的共享缓冲区。非常活跃的分片自然会比执行轻量级索引的分片使用更多的此缓冲区。
默认值为 10%
,通常足够:例如,如果您给 JVM 10GB 的内存,它将给索引缓冲区 1GB,这足以容纳两个正在进行繁重索引的分片。
使用跨集群复制来防止搜索从索引中窃取资源
编辑在单个集群中,索引和搜索可能会争夺资源。通过设置两个集群,配置跨集群复制以将数据从一个集群复制到另一个集群,并将所有搜索路由到具有跟随者索引的集群,搜索活动将不再从托管领导者索引的集群上的索引中窃取资源。
避免热点
编辑热点会在节点资源、分片或请求分布不均匀时发生。Elasticsearch 通过跨节点同步来维护集群状态,因此持续出现热点的节点可能会导致整体集群性能下降。
其他优化
编辑调整磁盘使用率中概述的许多策略也提供了索引速度的提高。
On this page