已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景 15 年测开,现在负责一条订单+库存链路的性能压测(JDK17 + Spring Boot 3.1,MySQL 8.0 InnoDB 单主,k6 压测)。每个接口压测前会造一批"前置依赖数据"(用户/商品/库存,量级 20 万~500 万行),压测后由 teardown 阶段调删除接口 + 定时批量清理兜底。近期出现"同一套脚本,今天 p99 干净、明天 p99 尾巴变长",怀疑和造数/清理没闭环有关。
现象
已尝试的排查与结果
SELECT COUNT(*) 确认目标表行数归零——能归零,但 p99 仍偶发偏长,说明"行数清干净"≠"引擎状态清干净";SHOW ENGINE INNODB STATUS 的 History list length,清理刚跑完时几千~几万,压测前又涨回去——但我没建立"多少算安全"的判断基线;OPTIMIZE TABLE 强制回收,单表 400 万行要跑 20+ 分钟且锁表现差,不敢放进自动化流程;期望得到的答案形态
COUNT(*),还应看哪些指标(History list length、innodb_history_list_length 阈值、SHOW BINARY LOGS 的 undo 空间、磁盘水位、SHOW TABLE STATUS 的 Data_free 等),以及各自的"安全基线"怎么定;引用依据