三副本集群执行TPC-H测试查不出数据,单表Select count(1)也不行

数据库版本:
OceanBase_CE-v4.3.5.3

集群配置:
租户资源配置:10核32G

TPCH数据量:80G

执行SQL:

select count(1) from supplier

经常性查不出数据(1000秒也查不出),有时候0.2秒出数据。集群还没正式在业务启用,新的集群

数据量:507100

6 个赞

表是否有主键 索引。手动收集下统计信息再试试呢?

5 个赞
CREATE TABLE `partsupp` (
  `ps_partkey` bigint(20) NOT NULL,
  `ps_suppkey` bigint(20) NOT NULL,
  `ps_availqty` bigint(20) DEFAULT NULL,
  `ps_supplycost` bigint(20) DEFAULT NULL,
  `ps_comment` varchar(199) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  PRIMARY KEY (`ps_partkey`, `ps_suppkey`)
) ORGANIZATION INDEX DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 TABLEGROUP = 'tpch_tg_partsupp_part'
 partition by key(ps_partkey)
(partition `p0`,
partition `p1`,
partition `p2`,
partition `p3`,
partition `p4`,
partition `p5`,
partition `p6`,
partition `p7`,
partition `p8`,
partition `p9`)



使用的是官方提供的TPCH建表语句:https://github.com/oceanbase/obdeploy/blob/master/plugins/tpch/3.1.0/create_tpch_mysql_table_part.ddl

3 个赞

如果遇到查询不出情况参考下面方法提供一下相关信息,或使用obdiag采集一下异常sql
1)设置trace信息
SET ob_enable_show_trace=‘ON’;

2)执行sql。

3)获取上个命令的trace
select last_trace_id();

4)获取trace对应的节点
select query_sql,svr_ip from gv$ob_sql_audit where trace_id=‘第三步获取的trace信息’;

5)取对应的svr_ip节点 过滤日志
grep “第三步获取的trace信息” observer.log*
grep “第三步获取的trace信息” rootservice.log*

SQL 执行出错, 此处env中的trace_id对应gv$ob_sql_audit的trace_id

obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-hxx -Pxx -uxx -pxx -Dxx’, trace_id=‘xx’}”

4 个赞

有一点疑问:

2)执行sql。

3)获取上个命令的trace
select last_trace_id();

我的SQL一直跑不完执行中。 如何执行select last_trace_id()呢?

2 个赞

count(1)语句50w行数据查不出来感觉数据库存在问题,先发一份observer日志看看

3 个赞

:smiley: :smiley: :smiley: :smiley: :smiley:

1 个赞

A机器上装的OBD,并且安装OBProxy
三个ServerZone的机器是B、C、D。
应该贴哪个Server的observer.log呢

执行SQL使用A机器的OBProxy 的方式连接

还有个线索:

select count(1) from partsupp  -- 查不出
select count(1) from partsupp  PARTITION(p2,p5,p8,p1,p3,p4,p6,p7,p9,p0); -- 秒出(0.3秒)
select count(1) from partsupp  PARTITION(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9); -- 查不出
2 个赞

统计信息问题吧

1 个赞

explain select count(1) from partsupp ; 执行计划看下 这个不会执行,秒出

2 个赞
explain select count(1) from partsupp ;

秒出

1 个赞

可不可能 丢 包 ??? 这么小的数据量,explain 看着收集统计信息了。

select /*+ parallel(8) */ count(1) from partsupp ;

2 个赞

增加并行指令也不行,丢包? 从何看起,你指的是我本地到OBProxy之间,还是OBProxy到OBServer之间? 按说不至于。

select 'partsupp',count(1) from partsupp PARTITION(p2,p5,p8,p1,p3,p4,p6,p7,p9,p0)

为什么这个就秒出。 只是增加了强制从所有分区读取数据(结合前贴,表被分成了10个分区),他就没事

select count(1) from partsupp  PARTITION(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9); -- 查不出

这样就不行,区别仅仅是前者我是按照Server分组的顺序来(结合前贴我贴的标分布图),后置是按分区号的顺序来

还有个线索,我新建了DB,还利用TPCH生成了partsupp这张表,但是建表的时候不再设置分区策略(对比之下之前那张表50W数据分了3个Server总计10个分区),填充了24000000行数据,select count(1)秒出

1 个赞

学习了。但是没有明白造成问题的原因。

1 个赞
  1. 在执行 select count(1) 的时候,换个窗口查询 select * from gv$ob_processlist; 获取到trace_id

  2. gv$sql_plan_monitor 根据trace_id 查看各个执行计划的算子 耗时 -物理执行计划

  3. 查看逻辑执行计划
    set ob_query_timeout=1000000;
    SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(3221668463,‘typical’,‘172.28.15.212’,‘2882’) --mysql模式

截图看下

2 个赞

gv$sql_plan_monitor在业务租户下是个空视图,在系统租户有数据,但是根据
select * from gv$ob_processlist查出的trace_id没有数据。

SVR_IP SVR_PORT SQL_PORT ID USER HOST DB TENANT COMMAND TIME TOTAL_TIME STATE INFO PROXY_SESSID MASTER_SESSID USER_CLIENT_IP USER_HOST RETRY_CNT RETRY_INFO SQL_ID TRANS_ID THREAD_ID SSL_CIPHER TRACE_ID TRANS_STATE ACTION MODULE CLIENT_INFO LEVEL SAMPLE_PERCENTAGE RECORD_POLICY LB_VID LB_VIP LB_VPORT IN_BYTES OUT_BYTES USER_CLIENT_PORT PROXY_USER SERVICE_NAME TOTAL_CPU_TIME TOP_INFO MEMORY_USAGE
192.168.3.2 2882 2881 2098472941 root 192.168.0.242:56306 tpchtest tpch Query 5.123369 416.381605 ACTIVE select count(1) from partsupp 13882346890940579955 117.158.147.195 % 96 -4265 E25990F47499EBFBC20C482A6C1FE399 0 3706606 YB42C0A80302-000640CA6DDE6AD0-0-0 1 10 SAMPLE_AND_SLOW_QUERY 0 0 60324 5

查询语句:

	select * from gv$sql_plan_monitor where TRACE_ID='YB42C0A80302-000640CA6DDE6AD0-0-0'

没有结果

查看逻辑执行计划

SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(2098472941,'typical','192.168.3.2','2882') -- mysql模式

结果:

==================================================================================================================
|ID|OPERATOR                     |NAME    |EST.ROWS|EST.TIME(us)|REAL.ROWS|REAL.TIME(us)|IO TIME(us)|CPU TIME(us)|
------------------------------------------------------------------------------------------------------------------
|0 |SCALAR GROUP BY              |        |1       |10555       |0        |0            |0          |0           |
|1 |└─PX COORDINATOR             |        |1       |10555       |0        |0            |0          |0           |
|2 |  └─EXCHANGE OUT DISTR       |:EX10000|1       |10555       |0        |0            |0          |0           |
|3 |    └─MERGE GROUP BY         |        |1       |10554       |0        |0            |0          |0           |
|4 |      └─PX PARTITION ITERATOR|        |507100  |1364        |0        |0            |0          |0           |
|5 |        └─TABLE FULL SCAN    |partsupp|507100  |1364        |0        |0            |0          |0           |
==================================================================================================================

Outputs & filters:
-------------------------------------
  0 - output([T_FUN_COUNT_SUM(T_FUN_COUNT_SUM(T_FUN_COUNT(*)))]), filter(nil), rowset=256
      group(nil), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT_SUM(T_FUN_COUNT(*)))])
  1 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256
  2 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256
      dop=1
  3 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256
      group(nil), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT(*))])
  4 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256
      force partition granule
  5 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256
      access(nil), partitions(p[0-9])
      is_index_back=false, is_global_index=false, 
      range_key([partsupp.ps_partkey], [partsupp.ps_suppkey]), range(MIN,MIN ; MAX,MAX)always true, 
      pushdown_aggregation([T_FUN_COUNT(*)])


1 个赞

这样查一下
SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(2098472941,‘all’,‘192.168.3.2’,‘2882’) – mysql模式
如果不使用obproxy的话 直连的时候 是否有这样的问题 有时候查不出来数据

1 个赞

集群三个服务器分别直连的结果:

192.168.0.158 秒出
192.168.2.221 20秒
192.168.3.2 查不出

当我使用OBProxy的时候观察ob_processlist,有时候SVR_IP会是192.168.3.2,结果就是查不出,有时候会是192.168.2.221 ,很慢,几十秒,能查出。

1 个赞

学习了

SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(3222062055,'all','192.168.3.2','2882')
==================================================================================================================
|ID|OPERATOR                     |NAME    |EST.ROWS|EST.TIME(us)|REAL.ROWS|REAL.TIME(us)|IO TIME(us)|CPU TIME(us)|
------------------------------------------------------------------------------------------------------------------
|0 |SCALAR GROUP BY              |        |1       |10555       |0        |0            |0          |0           |
|1 |└─PX COORDINATOR             |        |1       |10555       |0        |0            |0          |0           |
|2 |  └─EXCHANGE OUT DISTR       |:EX10000|1       |10555       |0        |0            |0          |0           |
|3 |    └─MERGE GROUP BY         |        |1       |10554       |0        |0            |0          |0           |
|4 |      └─PX PARTITION ITERATOR|        |507100  |1364        |0        |0            |0          |0           |
|5 |        └─TABLE FULL SCAN    |partsupp|507100  |1364        |0        |0            |0          |0           |
==================================================================================================================

Outputs & filters:
-------------------------------------
  0 - output([T_FUN_COUNT_SUM(T_FUN_COUNT_SUM(T_FUN_COUNT(*)))]), filter(nil), rowset=256
      group(nil), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT_SUM(T_FUN_COUNT(*)))])
  1 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256
  2 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256
      dop=1
  3 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256
      group(nil), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT(*))])
  4 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256
      force partition granule
  5 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256
      access(nil), partitions(p[0-9])
      is_index_back=false, is_global_index=false, 
      range_key([partsupp.ps_partkey], [partsupp.ps_suppkey]), range(MIN,MIN ; MAX,MAX)always true, 
      pushdown_aggregation([T_FUN_COUNT(*)])

Used Hint:
-------------------------------------
  /*+
      
  */
Qb name trace:
-------------------------------------
  stmt_id:0, SEL$1 > SEL$EA493D33

Outline Data: 
-------------------------------------
  /*+
      BEGIN_OUTLINE_DATA
      GBY_PUSHDOWN(@"SEL$EA493D33")
      PQ_GBY(@"SEL$EA493D33"  LOCAL)
      FULL(@"SEL$EA493D33" "tpchtest"."partsupp"@"SEL$1")
      SIMPLIFY_GROUP_BY(@"SEL$1")
      OPTIMIZER_FEATURES_ENABLE('4.3.5.3')
      END_OUTLINE_DATA
  */
Optimization Info:
-------------------------------------
  partsupp:
      table_rows:507100
      physical_range_rows:507100
      logical_range_rows:507100
      index_back_rows:0
      output_rows:507100
      table_dop:1
      dop_method:Table DOP
      avaiable_index_name:[partsupp]
      stats info:[version=1970-01-01 08:00:00.000000, is_locked=0, is_expired=0]
      dynamic sampling level:0
      estimation method:[DEFAULT, STORAGE]

  Plan Type:
      DISTRIBUTED

  Parameters:
      :0 => 1

  Note:
      Degree of Parallelisim is 1 because of table property

  Const Parameter Constraints:
      :0 = 1