压测分页接口?时常会出现1.5s左右的请求,每次的执行计划都一样。优化后效果不佳,求助

【TiDB 使用环境】生产环境 /测试/ Poc

SELECT
  puOder.id,
  created_by,
  created_time,
  updated_by,
  updated_time,
  auditor,
  audit_time,
.......
FROM
  AAA puOder
  INNER JOIN (
    SELECT
      DISTINCT o.id,
      i.sku_id,
      i.id order_item_id
    FROM
      pu_order o
      LEFT JOIN AAA_item i ON o.id = i.pu_order_id
      LEFT JOIN AAA_task t ON o.process_instance_id = t.process_instance_id
      LEFT JOIN DB1.BBB_view bov ON o.created_org_id = bov.org_id
    WHERE
      o.is_deleted = 0
      AND i.is_deleted = 0
      AND (
        bov.tree_path LIKE CONCAT('/1957734668423237632/', '%')
      )
      AND o.order_mode = '10081001'
  ) tmp ON puOder.id = tmp.id
ORDER BY
  order_time DESC
LIMIT
  10;

从执行计划来看这两项耗时严重
IndexHashJoin_40 time:3.81s, loops:17, inner:{total:12.8s, concurrency:5, task:9, construct:8.61ms, fetch:12.8s, build:1.72ms, join:42.9ms}
└─TableReader_35(Probe) time:12.8s, loops:25, cop_task: {num: 35, max: 551.9ms, min: 2.08ms, avg: 364.9ms, p95: 519.3ms, max_proc_keys: 2016, p95_proc_keys: 1376, tot_proc: 341.9ms, tot_wait: 77.5ms, copr_cache_hit_ratio: 0.00, build_task_duration: 941.9µs, max_distsql_concurrency: 1, max_extra_concurrency: 1}, rpc_info:{Cop:{num_rpc:35, total_time:12.8s}}
└─TableRangeScan_34 tikv_task:{proc max:544ms, min:0s, avg: 359.1ms, p80:502ms, p95:511ms, iters:127, tasks:35}, scan_detail: {total_process_keys: 15891, total_process_keys_size: 8437531, total_keys: 15913, get_snapshot_time: 354.2µs, rocksdb: {block: {cache_hit_count: 81141}}}, time_detail: {total_process_time: 341.9ms, total_suspend_time: 12.3s, total_wait_time: 77.5ms, total_kv_read_wall_time: 12.6s, tikv_wall_time: 12.7s}

将tidb_replica_read设置为leader-and-follower后缓解了。但是还是会时不时出现1.5s左右的慢SQL。执行计划耗时还是上面两项。

有没有优化建议?

1 个赞

减小结果集

1 个赞

是不是sqll问题?

1 个赞

万一是java代码慢呢

2 个赞

分段测试

1 个赞

先明确慢在哪一步了

1 个赞

多次测试,找出共同点

1 个赞

LIMIT 10
还这么慢 一看就是业务sql问题优化吧

2 个赞

TableRangeScan_34 是耗时源头(扫描 1.5 万 + 行,KV 读取耗时 12.6s),需针对 pu_order 和关联表的过滤条件建组合索引,避免全表扫描

1 个赞

是啊,也不知道用没有用连接池

1 个赞

嗯,应该是优化问题

1 个赞

继续优化, :grinning:

1 个赞

分段测试…

1 个赞

业务sql问题优化吧

1 个赞

分段测试

1 个赞

打印详细日志测试记录

1 个赞

单点测试

2 个赞

分段压力测试

1 个赞

输出debug日志

2 个赞

单点测试是啥?