oceanbase 4.2.1.8 相同的sql,数据库表八百万左右,有时候查询要二十多秒,有时候几毫秒就能返回

oceanbase 4.2.1.8 相同的sql,数据库表八百万左右,有时候查询要二十多秒,有时候几毫秒就能返回

集群架构,sql文本和执行计划发一下看看

收集SQL性能问题信息

obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-hxx -Pxx -uxx -pxx -Dxx’, trace_id=‘xx’}”
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001050341
–根据时间和执行语句查询AUDIT 信息
select query_sql,svr_ip,TRACE_ID,client_ip,TENANT_NAME,user_name,DB_NAME,ELAPSED_TIME,RET_CODE,FROM_UNIXTIME(ROUND(REQUEST_TIME/1000/1000),’%Y-%m-%d %H:%i:%S’) from GV$OB_SQL_AUDIT
WHERE REQUEST_TIME>=‘2024-04-05 14:34:00’ and lower(query_sql) like ‘%select%’;
–explain extended sql 执行计划放到一个文本里 这样方便查看

– c 表有 八百万数据, a表和b表 就只有几条数据 这个查询查不到三十秒
select
*

FROM a ham
INNER JOIN b hsm ON hsm.b_id = ham.id AND ham.dr = 0
INNER JOIN c hesr ON hesr.c_id = hsm.id AND hesr.dr = 0
WHERE ham.dr = 0
AND hesr.status IN (0, 2)
AND hsm.msg_type IN (1,2)
limit 10;

– c 表有 八百万数据, a表和b表 就只有几条数据 这个查询查不到1秒
select
*

FROM a ham
INNER JOIN b hsm ON hsm.b_id = ham.id AND ham.dr = 0
INNER JOIN c hesr ON hesr.c_id = hsm.id AND hesr.dr = 0
WHERE ham.dr = 0
AND hesr.status IN (0, 2)
limit 10;

你的两条sql不一样啊 :thinking:

最主要是,前两天我上面所发的查询sql,执行速度是查不多的,都是不到1秒

可是就只差一个条件呀,不加条件反而查得更快了,这不是也很奇怪吗,而且前两天,相同的数据量,不管什么条件,查询都很快啊

1、explain extended sql 执行计划放到一个文本里 这样方便查看
2、表结构信息发一下 索引信息发一下
3、可以用obdiag收集一下 具体看我上面发的信息


相同的sql用不同的客户端连接执行查询,一个查询要三十多秒,一个查询不到1秒,我用Java代码项目去执行的时候要十多秒

根据楼上淇铭老师说的,提供一下相关信息

可以尝试收集一下B表的统计信息
----收集 TEST 库中表 T_SUBPART1 所有的统计信息,只收集 50% 的数据
call dbms_stats.gather_table_stats(‘TEST’, ‘T_SUBPART1’, estimate_percent=> ‘50’, granularity=>‘ALL’);

‘相同的sql用不同的客户端连接执行查询,一个查询要三十多秒,一个查询不到1秒’ 你这个图的客户端是通过odp查询的么? 查询不到一秒的是用什么客户端查询的?是obclient直连的么


你发的那个sql,替换表名执行不了 :joy:


当然项目是用oceanbase-client依赖驱动去链接数据库的,查询十几秒

1、你们ob集群 有配置obproxy么?idea配置的数据库地址是通过直连还是走的obproxy 如果端口没有改的话 下面这个工具也是一样 是直连2881端口还是obproxy的2883端口 如果端口没有改的话
2、诊断信息查询 看看 语句注意字符转义
select query_sql,svr_ip,TRACE_ID,client_ip,TENANT_NAME,user_name,DB_NAME,ELAPSED_TIME,RET_CODE,FROM_UNIXTIME(ROUND(REQUEST_TIME/1000/1000),’%Y-%m-%d %H:%i:%S’) from GV$OB_SQL_AUDIT
WHERE REQUEST_TIME>=‘2024-04-05 14:34:00’ and lower(query_sql) like ‘%select%’;
3、查询一下这个信息 根据sql语句查询 注意字符转义
select HIT_COUNT,PLAN_ID,SQL_ID,OUTLINE_ID,FIRST_LOAD_TIME,LAST_ACTIVE_TIME from GV$OB_PLAN_CACHE_PLAN_STAT
where tenant_id= 1016 and query_sql != ‘’
and query_sql like ‘SELECT * FROM dwd_np_land_page_info_202408 WHERE%’
limit 20;

4、explain extended sql 执行计划放到一个文本里 这样方便查看

1.是2883
2,3 执行不了


eIMScreenShot20240927172219268

你上面的执行计划 信息太少了 没什么可以看的信息
1、发一个全的执行计划 用这个执行explain extended sql 执行计划放到一个文本里 这样方便查看
2、
语句文本.log (653 字节)

在业务租户下 用oceanbase的库

同一条SQL执行耗时稳定吗?
不同SQL的执行耗时不同甚至差别比较大 是预期现象,要结合详细的执行计划,统计信息分析,可以按楼上淇铭老师的要求发下相关信息