云平台统计的执行时间和我在客户端执行的时间差距有点大

SELECT
i.id,
i.area_id,
i.data_source_id,
i.tag_id,
i.refresh_answer_group,
i.item_category,
(
SELECT
GROUP_CONCAT(
CONCAT(
g.answer_group_id,
‘-’,
g.bind_rule_flag,
g.bind_rel_flag,
g.bind_user_flag,
g.black_flag
)
)
FROM
b_base_data_to_answer_group_bind g
WHERE
i.id = g.base_data_id
AND g.type = ?
) AS answer_group_id_and_flag,
(
SELECT
GROUP_CONCAT(b_base_data_to_industry.industry_id)
FROM
b_base_data_to_industry
WHERE
b_base_data_to_industry.base_data_id = si.id
AND b_base_data_to_industry.type = ?
AND b_base_data_to_industry.industry_id IS NOT NULL
) AS industry_id
FROM
g_enforcement_item i
INNER JOIN g_same_item_to_item ti ON ti.item_id = i.id
LEFT JOIN g_same_item si ON ti.same_item_id = si.id
WHERE
i.use_flag = ?
AND i.virtual_item_flag = ?
AND i.id > ?
AND i.id <= ? 这个 sql 客户端执行时间为7s 云平台统计时间


请问这个是什么原因造成的?

3 个赞

OCP上统计的“响应时间”是平均时间,看图中展示的是执行了4次。差距大有两种可能:

  1. 在程序中执行的时间确实很久,但手动在客户端执行只花了7s,客户端和程序端因为执行计划差异很大导致的,或者有重试、等待等等;
  2. 偶发性的,正好你在客户端执行的时候资源空闲点,所以执行快,程序中执行的时候任务繁忙,所以平均下来时间长。(多执行几次,看看是不是偶发性的)

要进一步确认到底是什么原因导致的,可以去看慢SQL的明细,那个是有原始采样和执行计划的。

4 个赞

两次执行计划确实不同,为什么会有产生执行计划的不同这种现象呢?

3 个赞

还有就是我们是刚开始用 OB,对于 OB的执行计划现在还是很难读懂,有没有什么文档或者相关的文章呢?

3 个赞

我们现在在进行 mysql 到 OB 的工作,这种问题现在十分影响我们的工作进度,希望解惑一下

3 个赞

https://open.oceanbase.com/blog/1100214
可以看一下庆涛老师关于执行计划的博客文章。(包含执行计划不一致如何绑定sql的执行计划outline方法)
你这里执行计划不一致导致的,需要使用outline绑定一下执行计划即可

4 个赞

可以看下我这个绑定outline是否正确吗

sql.txt (11.4 KB)

2 个赞

没问题的,USING 后边少一个HINT关键字。可以参考下面的文档进行确认outline是否生效
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016227

3 个赞

想问下除了绑定执行计划,还有的别的解决方式吗?类似的场景比较多,一个一个绑定对我们来说时间成本太高

2 个赞

你们业务上有大量sql都存在执行计划有问题么

1 个赞

优化水平不同

学习学习