连载中 19/20

陷阱集:十个真实事故现场

2026-08-20 · 1099 阅读 · 0 评论 · 0 赞

事故合集,一次点名

前面十八篇把知识铺开了,这篇反过来:只讲事故。十个真实场景,每个给三句话——现场什么样、根因是什么、怎么修。建议当面试题库用,一条比一条眼熟。

十个现场

现场根因修法
对 text 用 term 查整句,零结果term 找词条,text 存的是碎片整句走 match,精确走 keyword 子字段
价格排序把 10 排在 9 前面动态 mapping 把数字字符串猜成 text显式 mapping 加 reindex(第 5 篇)
翻深页报 Result window too largefrom 加 size 成本线性放大search_after 或限页(第 10 篇)
写入后搜不到,以为丢数据refresh 一秒一次,近实时设计读链路等一秒或按 ID 直查(第 6 篇)
几十个小分片吃光内存每分片一个 Lucene 实例单分片 10-50GB,rollover 滚动(第 14 篇)
单节点集群常年 yellow副本没地方放本地环境副本归零(第 13 篇)
对 text 开 fielddata 后 OOM碎词条全装进堆内存永远用 keyword 子字段聚合(第 11 篇)
wildcard 星号打头拖垮集群倒排失效,遍历词典ngram 分词或改产品形态(第 17 篇)
MySQL 与 ES 数据悄悄漂移双写或同步链路静默失败定时对账加局部修复(第 15 篇)
列表页接口越来越慢_source 整包返回几千字详情_source 裁剪只取列表字段(第 17 篇)

事故背后的三个规律

十条事故摆在一起,能提炼出三条规律。规律一:一半的坑是「拿 MySQL 的直觉用 ES」——以为实时、以为行存、以为 LIKE 能用,世界观没切换(第 1-6 篇全部背锅)。规律二:三成的坑在建库那一刻埋下——mapping 和分片数都是定死不悔改的,建库多想十分钟,线上少熬十个夜。规律三:剩下的坑缺的是校验——数据漂移靠对账发现,慢查询靠慢日志发现,副本异常靠三色灯发现,没有监控的故障都是用户先发现的。

老王把这十条打印出来贴在工位,新人入职先对着读一遍,能少走他两个月的弯路。

小结

十个现场一句话总结:查不对先查 mapping,查得慢先查查询形态,查不准先查同步链路。事故不可怕,同一类事故踩两次才可怕。

20 篇走到最后一篇。下一篇收官:一张作战地图串起整个系列,外加十条上线检查清单。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#Elasticsearch#陷阱#事故排查#经验#避坑

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10100 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9872 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9293 阅读 · 21 评论 · 287 赞