📋 目录一、统计概览二、Top10 明细(按单条耗时)三、高频慢查询模式(指纹聚合)四、逐条优化建议汇总(按收益排序)五、数据来源与口径

MySQL 慢查询日报 2026-09-17

统计范围:2026-09-17 00:00:00 ~ 23:59:59(Asia/Shanghai),staging 环境 ES 慢日志(索引 mysql_slow-*,按 @timestamp UTC 换算)。
数据来源:MCP addcn(es_slow_logs / es_search / connect→describe_schema→explain→disconnect,全程只读)。
生成时间:2026-09-18 10:0x CST;分析脚本:.agents/scripts/slow_report_20260917*.py。

一、统计概览

二、Top10 明细(按单条耗时)

#耗时(s)库.表实例行扫描/返回慢因类型
12373.77test.facebook_photostaging/tw591101,727 / 101,727大结果集传输(含 base64 longtext,单次 join 数据量 119M)
21377.87t8891.t_item_modi_historiesstaging/88915,693,964 / 5,693,964大结果集传输(569 万行、data_read 14G)
31135.02t591_transcription.land_shape_coordinatesstaging/tw59115,616,508 / 15,616,508大结果集传输(1,562 万行、json coordinate 列 10G)
41130.58t8_game.t8_embeddings_cachestaging/tw859179,835 / 79,835大结果集传输(仅 8 万行但 vector json 宽行,70M/次)
51038.40t591_new.fetch_data_itemstaging/tw591398,940 / 398,940大结果集传输(longtext 抓取原文,576M/次)
6897.60t591_estate_data.rental_market_rawstaging/tw59148,006 / 48,006大结果集传输(raw_html/raw_json 宽行,372M/次)
7868.19lighthouse.runsstaging/88917,753 / 7,753大结果集传输(lhr longtext 全量报告 JSON)
8795.66game.t8_embeddings_cachestaging/tw859155,291 / 55,291大结果集传输(同 #4,43M/次)
9693.23t591_new.fetch_datastaging/tw59127,022 / 27,022大结果集传输(body longtext)
10687.04t8891.t_sele_item_infosstaging/88913,290,762 / 3,290,762大结果集传输(329 万行、20G/次)

判定依据(已逐条 EXPLAIN):全部 access_type=ALL 且 rows_examined == rows_sent、Lock_time 均 < 0.03s——是 mysqldump 的预期全表扫描,不缺索引、无锁问题,慢因纯属"全量宽行导出传输"。

建议(backup 类,不触发深度分析):

  1. 备份错峰:facebook_photo(base64 图床)、t8_embeddings_cache(向量 json)、rental_market_raw(原始 HTML)这类"非核心可重建数据"建议从每日全量 dump 中剔除,单独低频备份或直接不入备份(数据可从源站重抓)。
  2. t_item_modi_histories / t_sele_item_infos(1400 万/330 万行、14~20G)建议改为分库分文件 dump 或用 mydumper 并行 + 压缩流。
  3. 昨日 backup 模式条数与常规持平(未环比翻倍),无异常。

三、高频慢查询模式(指纹聚合)

指纹归一化规则:字符串/数字/IN 列表 → ?,保留库表与 SQL 骨架。共聚合出高频模式,Top5 如下。

3.1 按条数 Top5

#条数平均(s)最大(s)累计实例用户指纹
110481.535.5826.7min117/37/40/40_3308/46jmysqlSHOW ENGINE INNODB STATUS
22809.2211.8843.0min117t591SELECT gs.street_id, COUNT(*) FROM golden_source JOIN market_community_building cb … GROUP BY gs.street_id(GetGoldenSourceCommunityIDRepairStreets)
31491.664.174.1min117t591select * from market_ep_build force index (idx_area) where regionid=? and sectionid=? and addr_num1=? and addr_num2=? and status=?
414410.5611.3825.4min117t591CREATE TEMPORARY TABLE tmp_cvd_t1 AS SELECT … JSON_EXTRACT(viewing_targets …)(带视图目标 JSON 展开联查)
5144294.49308.7111.78h117t591CREATE TEMPORARY TABLE tmp_cvd_t12 AS SELECT … FROM house_ep_source_relate a WHERE type=? AND NOT EXISTS (SELECT 1 FROM … b WHERE … b.score > a.score) 🔥

3.2 按累计耗时 Top5

#条数平均(s)累计实例用户指纹
1144294.4911.78h117t591CREATE TEMPORARY TABLE tmp_cvd_t12 … NOT EXISTS …score > a.score(同上 #5)🔥
294300.007.83h27a8591insert into telescope_entries (batch_id, content, …) values (…)(精确 300.00s)🔒
324300.002.00h27a8591insert into t8_telescope_entries (…)(精确 300.00s)🔒
424300.002.00h27a8591SELECT * FROM dy_aigc_crawler_runs WHERE status IN (?) AND available_at<=? ORDER BY id LIMIT 1 FOR UPDATE(精确 300.00s)🔒
516300.001.33h27a8591UPDATE dy_aigc_news_raw_text_jobs SET status=?, lease_until=NULL …(精确 300.00s)🔒

3.3 触发深度分析的模式(条数>100 或 累计>30min,非 backup)

🔥 P1:tmp_cvd_t12 临时表构建 —— 昨日累计最重的模式(144 条 / 平均 294.5s / 累计 11.78 小时)

  CREATE TEMPORARY TABLE tmp_cvd_t12 AS
  SELECT a.ep_source_id, a.post_id
  FROM t591_new.house_ep_source_relate a
  WHERE a.type = 2
    AND NOT EXISTS (SELECT 1 FROM t591_new.house_ep_source_relate b
                    WHERE b.type = 2 AND b.ep_source_id = a.ep_source_id
                      AND b.score > a.score);

KEY idx_post_id_type(type,post_id)、KEY idx_ep_source_id(ep_source_id)、KEY idx_type_ep_score_post(type,ep_source_id,score,post_id)

  1. 改写为「按 ep_source_id 取最大 score 再回连」:
  CREATE TEMPORARY TABLE tmp_cvd_t12 AS
  SELECT a.ep_source_id, a.post_id
  FROM t591_new.house_ep_source_relate a
  JOIN (SELECT ep_source_id, MAX(score) AS max_score
        FROM t591_new.house_ep_source_relate WHERE type = 2
        GROUP BY ep_source_id) m
    ON m.ep_source_id = a.ep_source_id AND a.score = m.max_score
  WHERE a.type = 2;

聚合走覆盖索引 idx_type_ep_score_post(type,ep_source_id,score),一次索引扫描完成,预期从 294s → 秒级。

  1. 若 MySQL ≥ 8.0.16 可保留 NOT EXISTS 写法(已自动转 anti-join),但当前实测仍是 dependent subquery,优先改写。
  2. 该 job 全天 144 次(每 10 分钟),先降频到每小时(累计耗时立减 5/6)作为止血。

🔒 P2:tw8591(LAN_addcn_27)批量精确 300.00s 锁等待(158 条 / 累计 ~13.2h)

涉及 5 个模式,全部 Query_time = 300.00x(= innodb_lock_wait_timeout 到期被杀):

模式条数表EXPLAIN 结论
INSERT telescope_entries(Laravel Telescope)94a8591.telescope_entries插入被唯一键 uuid / 二级索引阻塞
INSERT t8_telescope_entries24t8_time.t8_telescope_entries同上
SELECT … FOR UPDATE dy_aigc_crawler_runs24duyo.dy_aigc_crawler_runs走 idx_claim(status,…) range,本身 cost 5.48,不缺索引
UPDATE dy_aigc_news_raw_text_jobs …16duyo.dy_aigc_news_raw_text_jobs走 idx_raw_text_claim(status,…),不缺索引
UPDATE dy_user_logins SET last_login_time … WHERE user_id=?11duyo.dy_user_loginsconst 级、单行唯一键更新,执行计划零问题
  1. 核查 tw8591 备份命令,确保 mysqldump --single-transaction --no-lock-tables;备份窗口与 Telescope 批量写入、AIGC 任务队列错开。
  2. Telescope 是调试观测组件:staging 上将 telescope_entries 改为队列异步写入并缩短保留期(prune),94 条 300s 大部分可消失。
  3. dy_* 任务队列表的 FOR UPDATE 抢占改为 SKIP LOCKED(MySQL 8.0+):… ORDER BY id ASC LIMIT 1 FOR UPDATE SKIP LOCKED,避免 worker 互相等锁。

⚠️ P3:GetGoldenSourceCommunityIDRepairStreets(280 条 / 平均 9.2s / 累计 43 分钟)

⚠️ P4:market_ep_build FORCE INDEX (idx_area) 地址匹配(149 条 / 平均 1.66s)

  ALTER TABLE t591_new.market_ep_build
    ADD INDEX idx_area_addr (regionid, sectionid, addr_num1, addr_num2, status);

去掉 SQL 中的 FORCE INDEX (idx_area)(或改为 FORCE 新索引),预期 rows_examined 从 15.6 万 → 个位/百位级,单条 1.66s → 毫秒级,全天节省 ~4 分钟 DB 时间。

ℹ️ P5:SHOW ENGINE INNODB STATUS(1048 条 / 平均 1.53s / 26.7min)

四、逐条优化建议汇总(按收益排序)

  1. 改写 tmp_cvd_t12(MAX(score) 聚合改写 + 降频) —— 收益最大:全天减少 ~11 小时 DB 耗时(P1)。
  2. 核查 tw8591 备份参数(--single-transaction)+ Telescope 异步化 + SKIP LOCKED —— 消灭 158 条 300s 锁等待(P2)。
  3. market_ep_build 加 (regionid,sectionid,addr_num1,addr_num2,status) 索引 —— 149 条/天降到毫秒级(P4)。
  4. GetGoldenSourceCommunityIDRepairStreets 结果缓存/落表 —— 去掉 280 次/天重复聚合(P3)。
  5. 备份集瘦身:facebook_photo(base64)、t8_embeddings_cache(向量)、rental_market_raw(原始 HTML) 移出每日全量 dump(Top10 全部为备份导出,合计 3 小时+ IO)。
  6. SHOW ENGINE INNODB STATUS 监控降频(P5)。

五、数据来源与口径