📋 目录一、统计概览二、Top10 慢查询明细三、高频慢查询模式(指纹归一化聚合,4,707 四、触发深度分析的模式详情五、逐条优化建议汇总六、数据来源与生成时间

MySQL 慢查询日报 2026-09-15

一、统计概览

项目值
统计范围2026-09-15 00:00:00 ~ 23:59:59(Asia/Shanghai,ES 查询按 UTC [09-14T16:00Z, 09-15T16:00Z))
环境staging
慢日志文档数(es_search 拉取)4,707 条(单页 5000 内,无翻页)
Top10 门槛单条 ≥ 685s
慢因分布Top10 全部为 backup 用户 mysqldump 全表导出;高频模式集中在定时任务 CTAS、telescope 写入、锁等待超时
最大单条耗时2,231.85s(test.facebook_photo 备份导出)

二、Top10 慢查询明细

全部 10 条均为 SELECT /*!40001 SQL_NO_CACHE */ * FROM 库.表;(mysqldump 全表导出,user=backup),分类统一为「大结果集传输(备份导出,SELECT * 宽行、rows_sent=rows_examined)」。

#耗时(s)实例库.表rows_sent慢因分类
12231.85staging/tw591test.facebook_photo101,727备份导出·大结果集传输
21395.60staging/8891t8891.t_item_modi_histories5,693,964备份导出·大结果集传输
31145.61staging/tw8591t8_game.t8_embeddings_cache79,835备份导出·大结果集传输(含大字段)
41115.80staging/tw591t591_transcription.land_shape_coordinates15,616,508备份导出·大结果集传输(行数最大)
5935.75staging/tw591t591_new.fetch_data_item398,940备份导出·大结果集传输
6863.90staging/tw591t591_estate_data.rental_market_raw48,006备份导出·大结果集传输
7855.59staging/8891lighthouse.runs7,753备份导出·大结果集传输
8821.48staging/8891t8891.t_sele_item_infos3,290,762备份导出·大结果集传输
9810.37staging/tw8591game.t8_embeddings_cache55,291备份导出·大结果集传输(含大字段)
10685.88staging/tw591t591_new.fetch_data27,022备份导出·大结果集传输
Top10 全部来自例行备份(user=backup),非业务故障;但备份窗口的磁盘/IO 压力会放大同时段业务写入延迟(见第三节 telescope 插入模式)。

三、高频慢查询模式(指纹归一化聚合,4,707 条文档)

3.1 按条数 Top5

#模式(指纹摘要)条数平均(s)最大(s)累计userserver
1SHOW ENGINE INNODB STATUS;(监控采集)1,0551.533.3326.9minjmysql多台
2golden_source JOIN market_community(_building) 修复统计(GetGoldenSourceCommunityIDRepairStreets)2889.0411.5143.4mint591tw591(117)
3CTAS tmp_cvd_t12:house_ep_source_relate 反连接去重144293.61303.6811.7ht591tw591(117)
4CTAS tmp_cvd_t1:agent_customer_viewing JSON 展开透视14410.5112.6925.2mint591tw591(117)
5CTAS tmp_cvd_t14:house_source_ep_build_relate 反连接1441.992.874.8mint591tw591(117)

3.2 按累计耗时 Top5

#模式(指纹摘要)条数平均(s)累计userserver
1CTAS tmp_cvd_t12:house_ep_source_relate 反连接去重144293.6111.7ht591tw591(117)
2INSERT telescope_entries(多行 values,Laravel Telescope)85222.065.2ha8591tw8591(27)
3INSERT t8_telescope_entries 单行(telescope:prune 定时)23300.001.9ha8591tw8591(27)
4INSERT telescope_entries(另一多行批次指纹)28237.941.9ha8591tw8591(27)
5SELECT ... FOR UPDATE 领取任务(dy_aigc_news_raw_text_jobs,status IN + available_at <= now)18300.001.5ha8591tw8591(27)
backup 用户模式(mysqldump 导出,约 4,700 条中占比最高)按口径单独标注、不触发深度分析;本日各备份表导出条数与耗时无异常翻倍迹象。

四、触发深度分析的模式详情

4.1 tmp_cvd_t12 — house_ep_source_relate 反连接(144 次 × 293.6s ≈ 11.7 小时)⚠️ 本日头号问题

代表 SQL(每 10 分钟执行一次的定时任务):

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 OR (b.score = a.score AND b.post_id > a.post_id)));

表结构(~85 万行):已有索引 idx_post_id_type(type,post_id)、idx_ep_source_id、idx_type_ep_score_post(type,ep_source_id,score,post_id)。

EXPLAIN:外层走 idx_type_ep_score_post 仅用到 type 前缀,rows_examined_per_scan=322,956(覆盖索引,using_index=true);子查询为相关子查询(dependent,每次 2 行,索引命中良好)。

根因:反连接(取每个 ep_source_id 下 score/post_id 最大的一条)本质是对 type=2 的 ~32 万行做 O(N×log) 的逐行相关子查询判断,单次近 5 分钟,且任务每 10 分钟全量重算一遍 → 全天 11.7 小时数据库时间。索引已覆盖,属于计算模式问题而非缺索引。

建议:

  1. 改写为窗口函数单趟扫描:ROW_NUMBER() OVER (PARTITION BY ep_source_id ORDER BY score DESC, post_id DESC) 取 rn=1,MySQL 8.0 可把 32 万行相关子查询降为单次索引扫描 + 排序,预期单次从 ~294s 降到秒级;
  2. 或增量维护:任务内先记水位(上次最大 id/更新时间),只处理新增/变更的 ep_source_id;
  3. 现有 idx_type_ep_score_post(type,ep_source_id,score,post_id) 已是窗口函数改写的理想索引,无需新增。

4.2 telescope_entries 写入迟滞(85×222s + 23×300s + 28×238s,合计 ~9 小时)⚠️

现象:tw8591(192.168.8.27)上 INSERT INTO telescope_entries ...(content 为 longtext,含完整异常/命令 payload)平均 222~238s,多条精确卡在 300.00s —— 与 innodb_lock_wait_timeout 典型值 300 吻合,判定为锁等待超时(与同时段 tw8591 大表 mysqldump 备份的 IO/锁竞争叠加)。

建议:

  1. Laravel Telescope 属调试面板,staging 建议关闭或只采样(TELESCOPE_ENABLED=false 或按 type 过滤),telescope:prune --hours=1 已在跑但写入量仍大;
  2. 该表 content longtext 无压缩、AUTO_INCREMENT 已到 1547 万,建议缩短 prune 周期/限流写入;
  3. 将备份窗口与 crond 高频任务错峰。

4.3 dy_aigc_news_raw_text_jobs 领取/回收任务锁等待(18×300.00s + 12×300.00s)

代表 SQL:SELECT ... WHERE status IN (...) AND available_at <= ? ORDER BY id ASC LIMIT ? FOR UPDATE 与租约逾期回收 UPDATE。EXPLAIN 显示 idx_raw_text_claim(status,available_at,id) 命中良好(rows=1),不是缺索引;平均耗时精确 300.00s → 锁等待超时。任务表仅 ~900 行,属于工作线程数 > 可领任务数时的 FOR UPDATE 排队。

建议:领取任务加 SKIP LOCKED/NOWAIT(MySQL 8.0:LIMIT 1 FOR UPDATE SKIP LOCKED),避免 worker 空转排队占锁 300s。

4.4 h8_finance_account_logs 余额汇总(17 次 × 131.3s)

SQL:SELECT sum(after_amount - before_amount) FROM h8_finance_account_logs WHERE user_id = 1010158 AND sub_account = 11;

表(~1,359 万行):索引 asacca(user_id,sub_account,course,created_at)、idx_user_sub_account_id(user_id,sub_account,id DESC)。

EXPLAIN:仅用到 user_id 前缀(key_len=8),sub_account 走 ICP 回表过滤,rows_examined_per_scan=1,099,006。

根因:类型不匹配——sub_account 是 char(2),SQL 传的是整数 11,隐式类型转换使复合索引第二列无法用于定位,单次扫描 ~110 万行。

建议:SQL 改为 sub_account = '11'(应用侧绑定参数按字符串传),可立即把扫描量从百万级降到该用户实际分账户行数,预期 131s → 毫秒级。这是一行改动、收益最大的修复。

4.5 其他高频模式(未达深度分析阈值或已由上覆盖)

五、逐条优化建议汇总

优先级对象建议预期收益
P0h8_finance_account_logs 查询sub_account = 11 → sub_account = '11'单次 131s → ms 级
P0tmp_cvd_t12 定时任务NOT EXISTS 改 ROW_NUMBER() 窗口函数或增量计算全天 -11h 数据库时间
P1dy_aigc 任务领取FOR UPDATE SKIP LOCKED消除 300s 锁排队
P1tw8591 Telescopestaging 关闭/采样 + prune 限流 + 与备份错峰消除 ~9h 写入迟滞
P2golden_source 修复统计加覆盖索引 (type, community_bid, street_id)288×9s 明显下降
P3备份窗口t_item_modi_histories(570万行)、land_shape_coordinates(1560万行) 等 giant 表考虑分块导出/增量备份降低备份时段 IO 峰值

六、数据来源与生成时间