Elm
#1
【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.2.1
【问题描述】OB查询慢,写的关联查询,关联字段加了索引,为啥还是慢?
【复现路径】
场景:使用 OMS 从阿里云 OceanBase_mysql 全量数据迁移到 机房_OceanBase社区版_mysql 。
问题:
目前 IDC_OceanBase_mysql 查询慢,阿里云上的OB执行很快。
写的关联查询,关联字段加了索引,就是查询慢,不知道为啥?
表之间的连接都建立了索引,id是主键索引
【附件及日志】
SELECT uid,eid FROM t_ent_change WHERE uid IN(
SELECT uid FROM t_ent_change WHERE eid IN(
SELECT uid FROM dh_uid_companyid LIMIT 1000
)
)
SELECT c.uid,c.eid FROM(
SELECT id,uid,company_id FROM dh_uid_companyid LIMIT 1000
) o INNER JOIN t_ent_change c on o.uid=c.eid
2 个赞
正向切换(传统意义上的系统割接流程的抽象化、标准化)不会操作业务应用连接的切换,是 OMS 社区版的数据迁移任务配合应用切换需要执行的任务流。
正向切换主要涉及的工作如下:
- 需要自行确认已完成数据迁移,并等待正向同步延迟被追平。
- OMS 社区版将会自动补充结构迁移阶段忽略的检查类约束、外键约束等对象。
- OMS 社区版将会自动删除迁移依赖的附加隐藏列及唯一索引。
该操作仅在 OceanBase 社区版之间的数据迁移任务存在,详情请参见 数据迁移服务隐藏列机制说明。
- 需要自行补充迁移源端触发器、函数、存储过程等其它 OMS 社区版不支持的数据库对象至目标端。
- 需要自行禁用源端的触发器和外键约束(仅数据迁移任务存在反向增量时需要)。
OceanBase分布式数据库-海量数据 笔笔算数
1 个赞
Elm
#5
在阿里云上执行快,在自己搭建的oceanbase执行慢,这个如何排查呢?
1 个赞
可以贴下sql的explain extended执行计划
1 个赞
五月
#7
可以先对比下计划,如果计划一样,大概率就是硬件的差距了,比如io/cpu算力/网络等原因
1 个赞
靖顺
#9
用obdiag 发一份Plan Monitor Report报告出来看看,下面两篇文档对你或许会有帮助:
文档一:OceanBase 社区
文档二:OceanBase 社区
1 个赞
辞霜
#10
可以使用obdiag gather ash命令生存ash报告,这边可以帮您分析一下报告
1 个赞
Elm
#11
配置被诊断集群信息
obdiag config -hxx.xx.xx.xx -uroot@sys -Pxxxx -p*****
这一步是连接集群sys系统租户,看不到其他租户下的库。执行sql查询不到。
1 个赞
两边的预估行数差很多呢,确认下数据量和统计信息是最新的吗
2 个赞
靖顺
#13
需要加env参数,env中是业务租户的连接串,省略env,obdiag会以为你是在sys租户下建的库
obdiag gather plan_monitor --trace_id YB420BA2D99B-0005EBBFC45D5A00-0-0 --env "{db_connect='-hxx -Pxx -uxx -pxx -Dxx'}"
1 个赞
两个环境的执行计划都不一样, 原环境使用的是nested-loop join, 而新环境使用的是hash join.
-
对比两个环境中的统计信息情况, 统计信息应该有很大的差别 ,才会导致这样。
-
也可以在新环境创建outline。
我们之前也遇到了类似的问题。
当你用 OMS 将 大量数据 迁移到 OB 时,迁移的当天,由于数据产生了大量变动( 因为所有数据都是迁移过来的 ),此时 OB 还没有收集到这些数据足够的统计信息,所以生成的执行计划,会和已经运行了多天的 OB 上的执行计划 有很大区别,查询也会慢不少 。
遇到这个情况,有以下两种办法:
- 数据迁移完成后,调用一下 OB 的存储过程,手动触发让OB收集整个数据库的统计信息【推荐】。
- 当数据变更较大时,OB 的执行计划可能会存在抖动( 一会 Plan A,一会 Plan B),这个时候就需要手动绑定执行计划(也就是他们说的 Outline ),让这个 SQL 固定使用 Plan A。
1 个赞