OB版本升级后,select语句不会默认走索引

【 使用环境 】生产环境
【 OB or 其他组件 】Oceanbase
【 使用版本 】4.2.1.6
【问题描述】使用select语句查询ob,同一条sql,表结构也相同,但是在3.1.1版本上可以默认走索引,4.2.1不行
【SQL语句】select * from tableA where a >= xx and a <= yy ; , 其中a是主键也有自己的索引
【备注】这个是用4.2.1版本查询的执行计划,没有显示索引


这个是3.1.1版本查询的执行计划,显示用到索引,

而且很奇怪的是执行计划显示用时高版本更快一些,但实际上高版本更慢,而且如果不加force index就是不会走索引 ,并且!server节点的cpu使用率会标高!

怀疑是升级后,优化器的某些默认参数值发生了变化 。

  1. 将两个版本中所有的系统配置项的当前值进行对比,看哪些系统配置项的默认值发生了变化?

  2. 将两个版本中所有的系统变量的当前值进行对比,看哪些系统变量的默认值发生了变化?

检查下统计信息呢,是不是统计信息比较老了

1 个赞

估行差那么多,一个24W 一个2500W,先把统计信息对比下呢

1 个赞

rows估行差很多,建议先收集统计信息
– 收集 TEST 库中表 T_SUBPART1 所有的统计信息,只收集 50% 的数据
call dbms_stats.gather_table_stats(‘TEST’, ‘T_SUBPART1’, estimate_percent=> ‘50’, granularity=>‘ALL’);

1 个赞

ob凌晨会有merge操作,刚刚同样的sql查询预估行数已经降到一个量级了,这个是4.2.1.6版本,我修改了tenant_freeze_trigger_percentage(4.2.1原先是20 我调成了50,3.1.1是60)

感谢 我这边尝试收集一下统计信息,目前新旧ob都没有更新统计信息的操作

我修改了tenant_freeze_trigger_percentage(4.2.1原先是20 我调成了50,3.1.1是60),还有昨天不打印info的操作,会不会是这个变量导致的呢

文档有说明 不支持force index

与 MySQL 兼容性对比

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000818347

嗯嗯 感谢大佬回答,但之前我用4.2.1版本加上force index 确实会走索引,而且查询效率也会变快不少 :joy:

生产环境 禁止使用 不支持force index 看一下这个

DML 语句编写规范

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000820841

哦哦好的大佬,还是想请教一下,目前使用了force index没有报错可以批量查询,但是是会存在一些未知的风险嘛

会的 因为不是ob标准的语法 都是有风险的 不建议生产环境

1 个赞

感谢,不过目前我生产环境需要批量查询多个sql,可能qps大概是500左右每秒,刚我用不强制索引的方式执行sql,发现cpu使用率拉满然后差不到数据,加上force index后没有该问题可以查到数据

那使用index(table index)使用这种方式呢 ob使用index的方式呢
库的统计信息有收集么?

index(table index)是指use index(idxxx)这样的形式嘛,刚刚我尝试用use index 可以正常执行,没有上述异常,库里的统计信息目前不太能查到,也没有设置过自动更新统计信息

这个参数是合并转储的参数,和执行计划没关系,预估行数差这么多,应该还是统计信息的问题,还有就是ob不支持force index

index(table index)这个和mysql的force index 类似和use index不一样 如果指定了强制走索引

1.这里提供的统计信息数据确实差别较大,可以和表的实际数据量对比上,看统计信息是否准确?哪个准确?
2.可以使用obdiag工具
a)一键场景化信息收集,搜集下报告,例如:
obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}” [SQL performance problem] [SQL性能问题]

b)使用obdiag一键诊断分析,分析sql耗时详情,例如
obdiag analyze flt_trace --flt_trace_id 000605b1-28bb-c15f-8ba0-1206bcc08aa3

obdiag具体使用可参考 OceanBase分布式数据库-海量数据 笔笔算数

哦哦了解,不过确实是修改这个参数后查询性能有改善,还会默认走索引了,统计信息每天ob 做merge的时候会更新一下