统计口径:2026-09-13 00:00:00 ~ 23:59:59(Asia/Shanghai,即 UTC [2026-09-12T16:00:00Z, 2026-09-13T16:00:00Z))
环境:staging | 数据来源:MCPes_slow_logs(Top10)+es_search索引mysql_slow-*(高频模式,实际拉取 4,150 条)
生成时间:2026-09-14 10:0x +08:00 | 全程只读(connect / describe_schema / explain / es_search)
user=backup 的 mysqldump 全表导出(SELECT /*!40001 SQL_NO_CACHE */ * FROM 库.表),单条最长 2,183s(36 分钟,test.facebook_photo)。属备份窗口正常行为,不触发深度分析。tmp_cvd_t12(t591_new.house_ep_source_relate 反连接建临时表):144 次 × 平均 294s ≈ 累计 11.8 小时,全天最大耗时来源;FOR UPDATE):典型 innodb_lock_wait_timeout(默认 300s)锁等待超时,全天合计约 6.6 小时;SHOW ENGINE INNODB STATUS 出现 828 次、平均 1.46s,侧面反映实例存在锁/信号量压力。| # | 耗时(s) | 用户 | 实例(alias) | 表 | 扫描/返回行 | 慢因分类 |
|---|---|---|---|---|---|---|
| 1 | 2183.48 | backup | staging/tw591 | test.facebook_photo | 101,727 / 101,727 | 备份全表导出(mysqldump SQL_NO_CACHE) |
| 2 | 1420.42 | backup | staging/8891 | t8891.t_item_modi_histories | 5,693,964 / 5,693,964 | 备份全表导出(大表 570 万行) |
| 3 | 1132.85 | backup | staging/tw8591 | t8_game.t8_embeddings_cache | 79,835 / 79,835 | 备份全表导出 |
| 4 | 1099.97 | backup | staging/tw591 | t591_transcription.land_shape_coordinates | 15,616,508 / 15,616,508 | 备份全表导出(1,560 万行宽表,最重) |
| 5 | 899.23 | backup | staging/8891 | lighthouse.runs | 7,753 / 7,753 | 备份全表导出(单行宽,Byte 流大) |
| 6 | 837.25 | backup | staging/tw591 | t591_new.fetch_data_item | 398,940 / 398,940 | 备份全表导出 |
| 7 | 806.12 | backup | staging/tw8591 | game.t8_embeddings_cache | 55,291 / 55,291 | 备份全表导出 |
| 8 | 781.91 | backup | staging/8891 | t8891.t_sele_item_infos | 3,290,762 / 3,290,762 | 备份全表导出 |
| 9 | 774.41 | backup | staging/tw591 | t591_estate_data.rental_market_raw | 48,006 / 48,006 | 备份全表导出 |
| 10 | 606.28 | backup | staging/tw591 | t591_new.fetch_data | 27,022 / 27,022 | 备份全表导出 |
EXPLAIN 对上述导出 SQL 均为全表扫描(type=ALL),但这是 mysqldump 预期行为;rows_examined == rows_sent,无低效问题。唯一注意点:#2/#4/#8 三张大表(数百万~千万行)备份单表耗时超 12 分钟,建议核对备份窗口是否与业务定时任务(如 144 次的 cvd 任务)重叠造成 IO 争抢。
| # | 条数 | 平均(s) | 最大(s) | 累计 | 用户 | server | 模式(指纹摘要) |
|---|---|---|---|---|---|---|---|
| 1 | 828 | 1.46 | — | 20.1 min | jmysql | LAN_addcn_117/40/40_3308/46 | SHOW ENGINE INNODB STATUS(监控) |
| 2 | 288 | 9.02 | — | 43.3 min | t591 | LAN_addcn_117 | GetGoldenSourceCommunityIDRepairStreets(golden_source 三表 JOIN + GROUP BY) |
| 3 | 144 | 10.49 | — | 25.2 min | t591 | LAN_addcn_117 | CREATE TEMPORARY TABLE tmp_cvd_t1 AS SELECT ... JSON_EXTRACT(...) |
| 4 | 144 | 294.38 | 300 | 11.8 h | t591 | LAN_addcn_117 | CREATE TEMPORARY TABLE tmp_cvd_t12 ... NOT EXISTS (house_ep_source_relate 自反连接) ⚠️ |
| 5 | 144 | 2.01 | — | 4.8 min | t591 | LAN_addcn_117 | CREATE TEMPORARY TABLE tmp_cvd_t14 ... NOT EXISTS (house_source_ep_build_relate 自反连接) ⚠️ |
| # | 条数 | 平均(s) | 累计 | 用户 | server | 模式(指纹摘要) |
|---|---|---|---|---|---|---|
| 1 | 144 | 294.38 | 11.8 h | t591 | LAN_addcn_117 | tmp_cvd_t12 反连接(同上)⚠️ |
| 2 | 24 | 300.00 | 2.0 h | a8591 | LAN_addcn_27 | INSERT INTO telescope_entries (...大 JSON content...) 🔒 |
| 3 | 23 | 300.00 | 1.92 h | a8591 | LAN_addcn_27 | INSERT INTO t8_telescope_entries (...) 🔒 |
| 4 | 18 | 300.00 | 1.5 h | a8591 | LAN_addcn_27 | SELECT ... FROM dy_aigc_crawler_runs ... FOR UPDATE 🔒 |
| 5 | 15 | 300.00 | 1.25 h | a8591 | LAN_addcn_27 | INSERT INTO telescope_entries (...)(另一指纹变体)🔒 |
注:备份(user=backup)模式已从两表中按口径单独归入 Top10 明细;本日无备份模式条数/耗时异常环比。#4/#5 的 cvd 相关模式与 #1~#3 的 300s 精确整秒模式均触发深度分析(条数>100 或累计>30min),详见下节。
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)))KEY (type,post_id)、(out_id)、(ep_source_id)、(type,ep_source_id,score,post_id)idx(type,ep_source_id,score,post_id) 的 type 前缀(ref),rows_examined_per_scan ≈ 318,160——即 type=2 的 31.8 万行每行都要做一次相关子查询比较,144 次执行 ≈ 全天反复做 4,500 万次行比较。ROW_NUMBER() OVER (PARTITION BY ep_source_id ORDER BY score DESC, post_id DESC) 取 rn=1,一次扫描替代反连接;CREATE TEMPORARY TABLE tmp_cvd_t14 AS SELECT a.ep_build_id, a.source_id FROM t591_new.house_source_ep_build_relate a WHERE NOT EXISTS (SELECT 1 FROM ... b WHERE b.ep_build_id=a.ep_build_id AND (b.score>a.score OR (b.score=a.score AND b.source_id>a.source_id)))KEY (ep_build_id)、(out_id)、(source_id)、(relate_id) —— 均为单列索引,无 (ep_build_id, score, source_id) 组合索引ALTER TABLE t591_new.house_source_ep_build_relate ADD INDEX idx_build_score_source (ep_build_id, score, source_id); 可同时覆盖外层分组与子查询比较;同样建议窗口函数改写。innodb_lock_wait_timeout(默认 300s)超时,属锁等待而非缺索引。idx_claim(status,...) range 扫描仅 2 行,FOR UPDATE 领取任务的查询本身很快;慢是因为多 worker 并发 FOR UPDATE 争同一批 waiting 行,等锁至 300s 超时。content(整段事件 payload),单行体积大 + 高频写入,与大事务/锁争用叠加后批量超时。telescope.queue)、或降低采样;对历史表做定期 prune;SELECT ... FOR UPDATE 改为 SKIP LOCKED(ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED),worker 之间不再互相等锁,可消除全部 300s 超时;show_lock_waits 复核)。gs.community_bid、过滤键 (community_id, street_id, type) 疑似缺组合索引,建议补 golden_source(community_id, street_id, type, community_bid) 后复核。| 优先级 | 对象 | 动作 |
|---|---|---|
| P0 | t591_new.house_source_ep_build_relate | 加组合索引 (ep_build_id, score, source_id) |
| P0 | duyo.dy_aigc_crawler_runs 领取逻辑 | FOR UPDATE → FOR UPDATE SKIP LOCKED |
| P0 | telescope_entries(多库) | content 截断/队列异步写入/定期 prune |
| P1 | tmp_cvd_t12(house_ep_source_relate) | 窗口函数改写或结果物化 + 降频(当前 10 分钟一轮全量重算) |
| P1 | golden_source | 组合索引 (community_id, street_id, type, community_bid) 并复核 explain |
| P2 | 备份窗口 | 核对 mysqldump 大表(land_shape_coordinates 1560 万行等)与 cvd 定时任务是否重叠,错峰 |
| P2 | 监控 | SHOW ENGINE INNODB STATUS 采集降频,降低自身锁竞争 |
es_slow_logs(Top10, env=staging)、es_search(mysql_slow-*,4,150 docs)、connect/describe_schema/explain/disconnect(staging/tw591、staging/tw8591,全只读)。outputs/slow_report_20260913.json、outputs/slow_raw_20260913.json、outputs/slow_fixup_20260913.json。