【DevOps】怎么提升Elasticsearch 的搜索性能
一、怎么提升Elasticsearch 搜索性能
提升 Elasticsearch (ES) 的搜索性能可以从多个角度进行优化,包括硬件选择、配置调整、查询优化等。以下是一些具体的方法和建议:
1. 硬件优化
- 使用 SSDs: 使用固态硬盘(SSD)而非机械硬盘(HDD),因为 SSD 在随机读写和低延迟方面表现更好。
- 增加内存: 增加服务器的内存可以让更多的数据保留在内存中,减少磁盘 I/O 操作。Elasticsearch heavily relies on the operating system's filesystem cache, so more RAM can improve performance.
- 合理的 CPU 配置: 确保有足够的 CPU 资源来处理查询和索引操作。虽然 ES 是 I/O 密集型的,但在高并发查询时,CPU 也会成为瓶颈。
2. Elasticsearch 配置优化
- 合理设置
index.refresh_interval: 默认为 1s。对于写入密集型应用,可以适当增加这个值;对于读密集型,应保持较低。 - 使用
doc_values: 对于聚合、排序等操作,确保字段是doc_values启用的,这样可以减少内存使用并提高性能。 - 调整堆内存(Heap Size): 堆内存不宜过大也不宜过小,一般建议设置为物理内存的 50%,但不超过 32GB(因为 JVM 会使用压缩指针)。
- 索引分片和副本: 合理设置索引的分片(shards)和副本(replicas)数量。分片过多或过少都会影响性能。副本数可以根据读取压力调整以提高读取性能。
3. 映射和索引设计
- 避免使用高基数字段进行聚合: 高基数字段(字段中唯一值非常多的字段)进行聚合会消耗大量资源。
- 使用合适的字段类型: 比如,使用
keyword类型而非text类型进行精确匹配查询。 - 禁用
_all字段: 如果不需要,可以在映射中禁用_all字段来节省空间和提高索引效率。 - 使用
index_options和norms: 对于不需要全文搜索的字段,可以在映射中设置index_options为docs,并禁用norms。
4. 查询优化
- 利用 filter context: 对于不需要计分的查询,使用 filter context(如
bool/filter),这样可以利用缓存,提高查询效率。 - 避免深分页: 使用
search_after或游标(scroll/cursor)来替代深分页,因为深分页会随着分页深度的增加而变得非常慢。 - 使用
bool查询优化: 尽量使用bool查询合并多个查询条件,而不是多次单独查询。 - 预计算重复查询: 对于重复的、不经常变化的查询结果,可以考虑预计算和缓存结果。
5. 监控与调整
- 使用 Elasticsearch 监控工具: 如 Elastic Stack 的 X-Pack、Elasticsearch-head、Kibana 的 Monitoring 功能来监控集群状态和性能。
- 定期查看慢查询日志: 分析并优化慢查询,找出性能瓶颈。
6. 其他技巧
- 批量处理: 使用批量 API (
_bulk) 进行数据的批量插入、更新和删除。 - 避免脚本: 尽量避免在查询中使用脚本,因为脚本会显著降低查询速度。
- 合理使用缓存: 利用 Elasticsearch 的请求缓存和字段数据缓存,但也需要注意不要过度依赖缓存,以免造成内存压力。
根据您的具体使用场景(如文本搜索、日志分析、数据聚合等),优化策略会有所不同。理解并监控您的具体负载是制定有效优化策略的关键。
二、怎么查看当前的分片数
在 Elasticsearch 中,查看当前的分片数可以通过多种方式实现,包括使用 Elasticsearch 的 REST API、Kibana Dev Tools 或者其他管理工具。以下是几种常用的方法来查看索引的分片信息:
1. 使用 Elasticsearch REST API
查看集群中所有索引的分片数
要查看集群中所有索引的分片配置,可以使用 _cat/indices API 并添加 v 参数使输出更易于阅读。例如:
curl -X GET "http://localhost:9200/_cat/indices?v"
这个命令会列出所有索引及其相关信息,包括每个索引的分片数(pri 表示主分片数,rep 表示每个主分片的副本数)。
查看特定索引的分片数
如果你只对某个特定索引的分片信息感兴趣,可以使用 _settings API 来获取详细信息。如下所示:
curl -X GET "http://localhost:9200/<index_name>/_settings?pretty"
这里 <index_name> 替换为你的索引名。这个请求将返回该索引的设置信息,包括分片数。输出中 "number_of_shards" 和 "number_of_replicas" 分别表示主分片数和副本分片数。
2. 使用 Kibana Dev Tools
如果你使用 Kibana,可以通过 Kibana 的 Dev Tools 来执行上述 API 调用。
- 打开 Kibana
- 点击左侧菜单中的 "Dev Tools"
- 在 Console 中输入以下命令查看所有索引的分片信息:
GET /_cat/indices?v
或者查看特定索引的分片数:
GET /<index_name>/_settings
这里 <index_name> 是你想查看的索引名称。
3. 查看集群的整体分片状态
你还可以查看集群的整体分片状态,包括每个分片是主分片还是副本分片,以及它们的健康状态等信息:
curl -X GET "http://localhost:9200/_cat/shards?v"
或在 Kibana Dev Tools 中:
GET /_cat/shards?v
这将列出所有分片的详细信息。
4. 使用 Elasticsearch-head 或其他插件
如果你安装了 Elasticsearch-head 插件或其他类似的 Elasticsearch 管理和监控插件,你可以通过这些插件的 GUI 查看分片信息。这通常包括:
- 打开 Elasticsearch-head
- 导航到对应的索引信息页面
- 查看索引的分片配置和状态
小结
- 查看所有索引的分片信息:使用
_cat/indicesAPI。 - 查看特定索引的分片信息:使用
<index_name>/_settingsAPI。 - 查看详细分片状态:使用
_cat/shardsAPI。
根据你的需求,选择合适的方法来查看分片信息。这些信息有助于你评估当前的 Elasticsearch 设置,并进一步优化配置。
相关文章:
【DevOps】怎么提升Elasticsearch 的搜索性能
一、怎么提升Elasticsearch 搜索性能 提升 Elasticsearch (ES) 的搜索性能可以从多个角度进行优化,包括硬件选择、配置调整、查询优化等。以下是一些具体的方法和建议: 1. 硬件优化 使用 SSDs: 使用固态硬盘(SSD)而…...
启动任何类型操作系统:不需要检索 ISO 文件 | 开源日报 No.243
netbootxyz/netboot.xyz Stars: 7.7k License: Apache-2.0 netboot.xyz 是一个方便的平台,可以不需要检索 ISO 文件就能启动任何类型操作系统或实用工具磁盘。它使用 iPXE 提供用户友好的 BIOS 菜单,让您轻松选择所需的操作系统以及特定版本或可引导标志…...
Linux——综合实验
要求 按照上面的架构部署一个简单的web节点所有的服务器使用DNS服务器作为自己的DNS服务器 就是/etc/reslov.conf 中nameserver的值必须是途中dns服务器的地址所有的数据库都是用mysql应用 nfs共享导出在客户端(web服务器上)使用autofs在自动挂载,或者写入/etc/fsta…...
oracle数据库用户名修改
在Oracle数据库中,修改用户名通常涉及一系列步骤。以下是修改Oracle数据库用户名的详细步骤: 修改前准备工作: 使用ssh工具以root身份连接服务器。 切换到oracle用户:su - oracle(回车) 使用sqlplus连接数…...
2024年开抖音小店需要多少钱?你真的知道吗?最新入驻条件及费用
大家好,我是电商花花。 现在仍然有很多想开抖店,想做抖音小店,但是很多人都不知道投资一家抖音小店需要多少钱,今天花花就给大家讲一下做一家抖音小店需要投入多少资金,以及具体投入到哪些方面。 我们就说一下个体店…...
Vue创建todolist
电子书 第三章: https://www.dedao.cn/ebook/reader?idV5R16yPmaYOMqGRAv82jkX4KDe175w7xRQ0rbx6pNgznl9VZPLJQyEBodb89mqoO 没有使用VUE CLI创建项目。 创建步骤: 1, 用Vite 创建项目 2, npm run dev 运行程序 参照之前的文…...
了解Ansible Playbook
在现代IT运维中,自动化部署成为了提高效率、降低错误率的重要手段之一。而Ansible作为一种强大的自动化工具,其Playbook机制为自动化部署提供了灵活、可扩展的解决方案。本文将深入介绍Ansible Playbook的概念、结构、语法和常见用法,帮助读者…...
nginx 负载均衡、反向代理实验
nginx 负载均衡、反向代理实验 实验目的 理解概念:明确反向代理和负载均衡的基本概念及其在网络架构中的作用。 掌握技能:学习如何配置Nginx以实现反向代理和负载均衡功能。 实践应用:通过实际操作,体验Nginx如何提升Web服务的可…...
Linux信号捕捉
要处理信号, 我们进程就得知道自己是否收到了信号, 收到了哪些信号, 所以进程需要再合适的时候去查一查自己的pending位图 block 位图 和 hander表, 什么时候进行检测呢? 当我们的进程从内核态返回到用户态的时候&…...
【Leetcode】 top100 round2 需要加强版
知识补充 python赋值的执行顺序: 在41中,对于测试案例[-1,4,3,1] 当i1时,以下两条语句的执行结果不一致: “nums[nums[i]-1], nums[i] nums[i], nums[nums[i]-1]” “nums[i], nums[nums[i]-1] nums[nums[i]-1], nums[i]” 解析…...
ElasticSearch知识点汇总
1、ES中的倒排索引是什么。 倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典映射表即为倒排索引 2、ES是如何实现master选举的。 选举过程主要包括以下几个步骤: 心跳检测: 每个节点…...
phpize +Visual Studio + MSYS2 + bison 草稿记录并未正常完成
phpize Visual Studio MSYS2 bison 先安装 Visual Studio https://visualstudio.microsoft.com/zh-hans/vs/ 在安装过程中,选择安装工作负载。确保选择了 C 工作负载以及适用于 C 开发的相关组件,例如 MSVC v142 - VS 2022 C x64/x86 build tools。 …...
网络安全与IP地址的关联
网络安全与IP地址之间存在着密不可分的关系。IP地址作为网络通信的基础,对于网络安全的保障具有至关重要的作用。以下将详细探讨网络安全与IP地址之间的关联,以及IP地址在网络安全中的应用。 一、IP地址与网络安全的关系 IP地址是网络通信的基础&#x…...
罗德与施瓦茨 SMC100A信号发生器9kHz至3.2 GHz
罗德与施瓦茨 SMC100A信号发生器,9 kHz - 3.2 GHz 罗德与施瓦茨 SMC100A 以极具吸引力的价格提供出色的信号质量。它覆盖的频率范围为 9 kHz 至 1.1 GHz 或 3.2 GHz。输出功率为典型值。> 17 dBm。所有重要功能(AM/FM/φM/脉冲调制)均已集…...
新能源汽车充电站智慧充电电能服务综合解决方案
安科瑞薛瑶瑶18701709087/17343930412 ★解决方案 ✔目的地充电-EMS微电网平台 基于EMS解决方案从设备运维的角度解决本地充电的能量管理及运维问题,与充电管理平台打通数据,为企业微电网提供源、网、荷、储、充一体化解决方案。 ✔运营场站--电能服务…...
pytest(二):关于pytest自动化脚本编写中,初始化方式setup_class与fixture的对比
一、自动化脚本实例对比 下面是一条用例,使用pytest框架,放在一个类中,两种实现方式: 1.1 setup_class初始化方式 1. 优点: 代码结构清晰,setup_class 和 teardown_class 看起来像传统的类级别的 setup 和 teardown 方法。2. 缺点: 使用 autouse=True 的 fixture 作为…...
项目中遇到的问题
web项目中请求线程到service层的时候远程调用服务之前是串行化执行每个任务都要get阻塞等待任务完成,举例当用户在购物车页面点击去结算就会请求后台toTrade请求获取订单确认的详情数据并渲染到订单详情页,现在在toTrade请求中使用异步任务编排Completab…...
Deeplab的复现(pytorch实现)
DeepLab复现的pytorch实现 本文复现的主要是deeplabv3。使用的数据集和之前发的文章FCN一样,没有了解的可以移步到之前发的文章中去查看一下。 1.该模型的主要结构 对于代码部分,主要只写了模型部分的,其他部分内容基本和FCN的一致…...
input上添加disabled=“true“,点击事件失效处理办法
当我们给input标签上添加disabled"true"时,再添加点击事件,点击事件会不生效,处理办法如下: 给input标签添加样式style"pointer-events: none;" 代码如下: <input style"pointer-event…...
精酿啤酒的魅力:啤酒的与众不同风味
啤酒,作为世界上古老的酒精饮品之一,一直以来都以其与众不同的魅力吸引着无数人的味蕾。而精酿啤酒,作为啤酒中的佼佼者之一,更是以其丰富的口感和多样的风格,成为了啤酒爱好者的心头好。在这其中,Fendi cl…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
