oceanbase使用count(*)查询单表1.2亿数据24秒,速度慢

oceanbase使用select count(*) from tb_order_info;查询单表1.2亿数据24秒,速度慢。oceanbase设置了行列混存。相比doris慢很多。

你试试使用count(1)呢

区别不大,好像是oceanbase的列存方式性能不足

您看一下,数据分布。是不是打散了

数据没有建分区,就一张表

select * from __all_virtual_meta_table
您看__all_tenant视图的primary_zone这列,是怎么分布的。
我之前也是这样测试,的单表主副本在一台机器上,查询就是慢。试试建分区表,doris 数据是分桶了,数据已经是打散了

这个有趣。
数据导入后有没有对租户发起一次合并?

另外看一下 租户资源

select t1.name resource_pool_name, t2.`name` unit_config_name, 
	t2.max_cpu, t2.min_cpu, 
	round(t2.memory_size/1024/1024/1024,2) mem_size_gb,
	round(t2.log_disk_size/1024/1024/1024,2) log_disk_size_gb, t2.max_iops, 
	t2.min_iops, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,
	t4.tenant_id, t4.tenant_name
from __all_resource_pool t1
	join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
	join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
	left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;

查看一下表大小

SELECT /*+ read_consistency(weak) query_timeout(1000000000) */ t1.tenant_id, t1.database_name,  t1.table_name, round(sum(s.size)/1024/1024/1024) data_size_gb, count(*) cnt
FROM oceanbase.CDB_OB_TABLE_LOCATIONS t1 
  JOIN oceanbase.cdb_ob_tablet_replicas t2 ON (t1.tenant_id=t2.tenant_id and t1.tablet_id=t2.tablet_id AND t1.ls_id=t2.ls_id and t1.svr_ip=t2.svr_ip and t1.SVR_PORT=t2.svr_port )
  JOIN oceanbase.GV$OB_SSTABLES s ON (t1.tenant_id=s.tenant_id AND t1.ls_id=s.ls_id AND t1.svr_ip=s.svr_ip and t1.SVR_PORT =s.svr_port AND t1.tablet_id=s.tablet_id)
WHERE t1.tenant_id in (1004) AND t1.ROLE='LEADER' AND s.table_type <> 'MEMTABLE'
GROUP BY t1.tenant_id, t1.database_name, t1.table_name
;

1、explain extended sql 执行计划保存在文本里 发一下
2、 收集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-obdiag-cn-1000000001768178
3、使用 DBMS_XPLAN 包配合 sql_audit 查看执行计划。
select /*+ parallel(15) */query_sql,sql_id,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%’;
select dbms_xplan.display_cursor(sql_id, ‘all’);