Session处理性能过慢的问题排查与优化 📅 发布时间:2026/7/9 3:36:38 👁️ 浏览次数: 处理性能过慢的问题排查与优化一、问题现象某业务场景设备发送DurableOutBindAllRequest消息后DurableOutBindAllRequestProcessor.postProcessing()执行缓慢主要卡在两个地方1.coldPlateBindApi.deleteAll(...)逐条删除慢两条删除之间间隔约 2.5 秒15:22:58.741 delete [ColdPlateBind(...2660030335/M03)] ← 第 1 条删完 15:23:01.189 doWork PK[ColdPlateBindPk(...2660031491/M03)] ← 第 2 条才开始隔了 ~2.5s 15:23:01.191 delete [ColdPlateBind(...2660031491/M03)]另一份日志里deleteAll整体OUT elapse[5551]5.5 秒删 2 条。2.generateEapBindRealtionBySql(...)里的update慢assingCarrier内部调用的名称生成update前有约 8 秒空档13:11:10.947 IN : invoke[EventApiImpl.update] args[[NameRuleSerialDef(...preFixP10)]] 13:11:18.725 doWork PK[NameRuleSerialDefPk(...preFixP10)] ← 隔了 ~8s 才开始 doWork 13:11:18.727 update [NameRuleSerialDef(...preFixP10)]二、根因分析2.1deleteAll不是批量删除而是逐条循环ColdPlateBindApiImpl没有自己的实现直接继承 Core JAR 里的EventApiImpl。反编译EventApiImpl.deleteAll(List)可见它只是把 List 拿出来一条条循环调用delete(D)// EventApiImpl.deleteAll 反编译for(EventDatad:list){delete(d);// 每条都走完整流程}单条delete(D)每条要执行getClaims();em.getMetamodel().entityPersister(...).getEntityTuplizer().getIdentifier(...);repo.findById(id);// 一次 DB 查询event(id,taskInfo,postAction);// doWork / postAction / addHistory 整套 EventTask 流程repo.delete(entity);日志里的doWork → postAction → addHistory → delete正是这一条的处理过程。2.2 真正的瓶颈大事务导致的 Hibernate autoflushpostProcessing()整体包在一个PROPAGATION_REQUIRES_NEW的大事务里从getTransaction(def)到commit(status)之间的所有操作trackOut、mergeLot、qrCodeRelation/product 的 event、deleteAll、assingCarrier全部跑在同一个事务、同一个 Hibernate Session持久化上下文里。问题链路事务内没有中途 flush/clear实体只增不减地累积在持久化上下文里全是 dirty 状态。delete/update/find这类操作执行前Hibernate 的FlushMode.AUTO会对整个膨胀的 Session做 dirty check flush。Session 越大每次 autoflush 越重。deleteAll循环每一圈都会重复触发这个重 flush → 两条删除之间隔了 2.5 秒generateEapBindRealtionBySql的update前同理隔了 8 秒。结论慢不是 SQL 本身慢而是每一步操作前的 autoflush 在反复扫描肥大的持久化上下文。这和事务传播类型REQUIRES_NEW无关换成REQUIRED也一样根因是大事务 → 大 Session → 每次 autoflush 都重。2.3 补充一处冗余查询postProcessing()开头已用coldPlateBindApi.findAllWithEquals(query)查出待删实体但delete(D)内部又对每条重新findById查一遍查询重复本次未针对该点改动因其耗时占比小。三、解决方案保留历史记录ColdPlateBindHist的前提下逐条 event 流程不能省但可以在进入deleteAll/assingCarrier之前主动清空持久化上下文让后续每步的 autoflush 面对一个干净、轻量的 Session。核心两行entityManager.flush();// 先把前面累积的 dirty 变更一次性写库该写的还是要写不亏entityManager.clear();// 再清空持久化上下文后续操作的 autoflush 不必再扫这堆实体放在if外面、deleteAll和assingCarrier之前保证无论coldPlateBindResult是否有数据assingCarrier里的update都能受益。为什么有效flush()把前面所有 dirty 实体一次性写库。这次写省不掉commit 时也要写但集中做一次。clear()把这些实体从 Session detach。之后deleteAll每条findById、以及generateEapBindRealtionBySql的update触发 autoflush 时面对的是一个空 Sessiondirty check 立刻返回。每条delete的addHistory照常执行历史记录不受影响。关于事务与顺序的注意点顺序必须 flush 在前、clear 在后。clear()会丢弃尚未 flush 的变更先 flush 保证前面 trackOut/merge/event 的改动已落到数据库再 clear 只是 detach不会丢数据。对 commit 无负面影响。flush()只改变何时发 SQL不改变何时提交异常时rollback(status)仍会把 flush 出去的 SQL 一起回滚原子性不变。assingCarrier保持在 commit 之前的 try 块内。曾尝试把它移到 commit 之后会脱离事务、异常时无法回滚已否决并还原。clear()会 detach 所有实体含modingBodyLotList。改动后assingCarrier只读getLotName()/getFactoryName()等已加载字段内部用new LotPk(...)/new DurablePk(...)重新按主键操作不依赖托管态安全。
高压线下吊装作业太危险,电磁探测预警设备如何保命 轰鸣的基建工地上,吊车司机老李正全神贯注盯着下方起吊的沉重钢材。他没注意到,随着几十米长的吊臂缓缓扬起,金属臂尖正一点点逼近上方潜伏的“毒蛇”——高压输电线。在复杂的施工现场,这种视觉盲区就是悬在司机头顶的催命符&… 2026/7/9 3:34:33
OpenSSH 9.3p2 高危漏洞修复对比:源码编译 vs RPM 包升级的 5 项关键指标 OpenSSH 9.3p2 高危漏洞修复方案深度对比:源码编译与 RPM 包升级的五大核心维度 当OpenSSH曝出CVE-2023-38408高危漏洞时,技术团队面临的关键决策往往不是"是否修复",而是"如何修复"。两种主流方案——源码编译升级与RPM… 2026/7/9 3:32:32
这款设备将使用自有操作系统和高通骁龙芯片 作为那个被戏称为「被网友怂恿着买下 Twitter」的男人,埃隆马斯克总能在新产品方面给大家出点新花样。这种新花样也一直持续到了如今 SpaceX 和 xAI 的时代。前几天,《华尔街日报》报出了一条有趣的爆料:SpaceX 据称向投资者展示了一款「形态… 2026/7/9 3:32:32
零基础如何快速制作海报?秒出设计工具助力高效设计 伴随着生成式AI的爆发,Image-2模型凭其在画面细节、光影质感以及文字渲染上的惊艳表现,在各大社交媒体上引发了广泛讨论,甚至被不少业内人士评价“超越普通设计师”。然而,这款海外顶尖工具对国内普通用户而言,却存在着… 2026/7/9 5:03:05
自然语言处理技术对客服准确率影响大吗?广州鲲界科技解析 引言:客服准确率——企业竞争力的新标尺在客户体验决定品牌忠诚度的时代,客服的响应准确率直接影响转化率与客户留存。传统客服依赖人工,面临响应滞后、标准不一、疲劳误判等痛点;而随着自然语言处理技术的成熟,企业开… 2026/7/9 5:01:04
大数据毕设项目:基于 Python 爬虫数据建模的智能书籍推荐系统的设计与实现 基于分布式爬虫的海量图书个性化推荐系统 (源码+文档,讲解、调试运行,定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 4:59:04
AI搜索优化公司排名:年度服务商综合评测 2025年,AI大模型驱动的搜索变革正在重塑数字营销版图。据Statista数据,全球超过67%的网民已开始使用AI搜索工具,DeepSeek、豆包、Kimi等主流AI平台日活用户突破数亿量级。企业品牌在AI答案中的曝光与否,直接关系到商业机会的获取。… 2026/7/9 4:59:04
为什么要学习 USB 协议 、为什么要学习 USB 协议USB 是 Universal Serial Bus 的缩写,中文通常叫通用串行总线。它是电脑、手机、工控机、单片机开发板和各种外设之间最常见的连接方式之一。在嵌入式开发中,USB 常用于:虚拟串口通信U 盘读写键盘、鼠标、按键板固件升… 2026/7/9 4:55:00
个人微信API二次开发,抓到的长连接包缺字少码?难道不知道HTTP/2的HPACK动态表机制吗? 在个人微信API二次开发的过程中,一些试图在网络层直接复刻微信协议的开发者会遇到一个极其诡异的现象。当他们成功破解了底层的 TLS 或者 QUIC 拿到明文流后,发现在解析 HTTP/2 格式的长连接报文时,抓到的 Request Header(请求头&… 2026/7/9 4:53:00
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08