MySQL 慢查询日报 2026-08-31

环境:staging(192.168.8.27 LANaddcn27,实例 staging/tw8591 3306 / staging/hk8591 3307)
统计区间:2026-08-31 00:00:00 ~ 23:59:59(Asia/Shanghai,ES @timestamp 按 UTC 换算为 [2026-08-31T00:00:00+08:00, 2026-09-01T00:00:00+08:00))

一、统计概览

指标数值
昨日慢查询总数1104 条
Top10 门槛耗时300.0 秒
最长单条耗时1119.3 秒(约 18.7 分钟)
Top10 涉及实例staging/tw8591(LANaddcn27:3306,按 hostname 匹配)
Top10 涉及库表t8_game.t8_embeddings_cache、game.t8_embeddings_cache、t8_extends.telescope_entries
慢因分布大结果集传输(backup 全量导出)×2;超时/阻塞(精确卡 300s 阈值)×8

总体结论:昨日 Top10 无一来自业务高峰期的普通慢查询,全部集中在凌晨 01:00~01:30 的备份窗口:

  1. #1、#2 为 mysqldump(backup@192.168.8.82)带 SQL_NO_CACHE 全量导出 embeddings 缓存表,慢因是宽行大结果集顺序传输(JSON 向量列,单表数据量 70M/43M),属备份期预期行为;
  2. #3~#10 全部精确卡在 300.00 秒(rows_examined/rows_sent 均为 0、lock_time 为 0),是 telescope_entries 的 INSERT 与 Prepare 语句在备份窗口被阻塞至 5 分钟超时,属备份期间的锁/元数据锁等待超时,非 SQL 本身执行慢。

二、Top10 明细

#耗时(s)锁时间(s)扫描行返回行用户库SQL(摘要)慢因类型
11119.300.00037179,83579,835backupt8_yySELECT SQL_NO_CACHE * FROM t8_game.t8_embeddings_cache大结果集传输
2797.500.03827355,29155,291backupa8591SELECT SQL_NO_CACHE * FROM game.t8_embeddings_cache大结果集传输
3300.010008591a8591administrator command: Prepare超时/阻塞
4300.00000a8591t8_extendsINSERT INTO telescope_entries ...(batch a2a0a96a…)超时/阻塞
5300.00000a8591t8_extendsINSERT INTO telescope_entries ...(batch a2a0a96f…)超时/阻塞
6300.00000a8591t8_extendsINSERT INTO telescope_entries ...(batch a2a0a96a…)超时/阻塞
7300.00000a8591t8_extendsINSERT INTO telescope_entries ...(batch a2a0a9be…)超时/阻塞
8300.00000a8591t8_extendsINSERT INTO telescope_entries ...(batch a2a0a96f…)超时/阻塞
9300.00000a8591t8_extendsINSERT INTO telescope_entries ...(batch a2a0a9be…)超时/阻塞
10300.00000a8591t8_extendsINSERT INTO telescope_entries ...(batch a2a0a96b…)超时/阻塞

三、逐条分析与优化建议

#1 / #2 — backup 全量导出 t8_embeddings_cache(缺索引不适用,大结果集传输)

EXPLAIN(等价短查询 SELECT * FROM t8_game.t8_embeddings_cache WHERE 1):access_type=ALL 全表扫描,rows≈70,796,data_read_per_join≈70M(t8_game 库);game 库 rows≈44,105、≈43M。表结构:仅 key(PK, varchar 255) + vector(json, 向量) + expired(datetime),无二级索引。

  1. t8_embeddings_cache 是缓存表,建议备份脚本排除该表(mysqldump --ignore-table)或改用可重建策略,直接省去 19 分钟备份时长;
  2. 若必须备份,将备份窗口与 Telescope 清理任务错开,并考虑 --single-transaction 已具备的一致性读下用 nice/限速(--max-allowed-packet、throttle)降低 I/O 冲击;
  3. expired 字段可加索引并定期清理过期向量,压缩表体积(当前 70k 行 × JSON 向量,长期只增不减)。

#3 ~ #10 — telescope_entries INSERT / Prepare 精确 300s 超时

表结构(t8_extends.telescope_entries):PK sequence,UNIQUE uuid,索引 batch_id、(type,should_display_on_index)、family_hash;AUTO_INCREMENT=230,415,669 —— 历史写入量超 2.3 亿条,当前仅保留约 1 小时数据(实测 9,936 行,09:00~10:01),说明存在高频写入+定期清空的删改 churn。

  1. 错峰:Laravel Telescope 的批量写入若能与 01:00 备份窗口错开(或备份期间暂停 Telescope 采集),可消除整批 300s 超时;
  2. 降噪:staging 环境 Telescope 建议 TELESCOPE_ENABLED=false 或缩短保留期/降低采样,减少凌晨批量的写入压力(AUTO_INCREMENT 2.3 亿说明写入量巨大);
  3. 定位超时来源:确认 300s 阈值来源(应用 PDO timeout / 代理 kill),若是备份 FTWRL 阻塞,可改 --single-transaction 备份避免全局读锁;
  4. 该表现有索引已覆盖常用查询,无需新增索引。

四、数据来源与生成时间