【Spring错误笔记】spring.jpa.hibernate.ddl-auto=update造成删除索引的线上事故
spring.jpa.hibernate.ddl-auto=update造成删除索引的线上事故 事故背景 技术习惯 业务背景 事故回放 事故起因 事故起因 为什么Hibernate会执行删除索引再重建索引的操作? 事故结论 事故原因 事故结论 事故背景 技术习惯 公司技术习惯,无论是线上环境,还是预线上,测试环境,都习惯使用 Spring Data Jpa 作为ORM工具 为了快速迭代,通常对于表的更新的DDL语句,都依赖JPA的自动更新机制,包括线上环境,即使用 spring.jpa.hibernate.ddl-auto=update 配置 业务背景 重构项目,需要迁移数据,进行合库 重构项目的部分接口 QPS 峰值为5k级别 ,日查询流量上亿 重构项目涉及数据库,多个单表数据达百万,部分单表数据为千万级 区别于旧服务,新建一个新的服务,迁移接口,沿用旧数据库 事故回放 第一波 重构服务,新服务准备0流量上线,线上环境配置为 spring.jpa.hibernate.ddl-auto=update ,数据库实体映射关系未修改 服务上线之后,旧服务高QPS接口出现抖动,接口可用率下滑,延迟攀升,出现服务告警。 简单查询后,发现是数据库使用率超百分百, 正常情况下CPU使用率为百分之10左右 相关人员排查问题,没有发现具体原因,后续没有发现原因,一段时间后,服务可用率自行恢复