tidb 分区表使用tispark越跑越慢,怎么回事?

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【概述】 按天分区,每天千万级数据量,使用tispark读取,越跑越慢

【应用框架及开发适配业务逻辑】tispak 方式连接到tidb ,通过写sql获取tidb数据表取数。tidb数据表使用默认方式。

【背景】 该tidb数据表,使用spark jdbc append方式写入。并使用tispark方式读取使用。写入与读取是两套代码。

【现象】 spark管理页面的task 由一开始的2000个,逐步上升到9000个。在资源不变的情况下,越跑越慢。
1亿条数据,大概25G的样子,使用tisprark 写sql 读取到spark中 现在大概需要12分钟。

【问题】 每10分钟读一次,大概不到两天的数据量,使用时间字段取数(不超过两天,最近两天),跑了半年,为啥spark的计算任务(task),越来越多?

【业务影响】

【TiDB 版本】 5.7.25-TiDB-v5.2.1

【附件】
tidb 建表语句:
CREATE TABLE final_result_tabl1 (
col1 varchar(100) DEFAULT NULL,
col2 varchar(100) DEFAULT NULL,
col3 varchar(100) DEFAULT NULL,

createTime timestamp NULL DEFAULT NULL,
KEY index_a (createTime),
KEY index_b (createTime,col1),
KEY index_c (createTime,col2),
KEY index_d (createTime,col1,col2)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT=‘********’
PARTITION BY RANGE ( UNIX_TIMESTAMP(createTime) ) (
PARTITION 20220201_09 VALUES LESS THAN (1643677200),
PARTITION 20220202_09 VALUES LESS THAN (1643763600),
PARTITION 20220203_09 VALUES LESS THAN (1643850000),

PARTITION 20230101 VALUES LESS THAN (1672588800),
PARTITION 20230102 VALUES LESS THAN (1672675200),
PARTITION 20230103 VALUES LESS THAN (1672761600)
)
;

spark 可以看执行计划的,估计是没有走分区裁剪。
tispark 当前分区表能走分区裁剪的非常少,需要 tispark 支持的,最好有研发能接收到你的这个请求。

每10分钟读一次,大概不到两天的数据量,使用时间字段取数(不超过两天,最近两天),跑了半年,为啥spark的计算任务(task),越来越多?

是不是spark 设定的计算模型 没达到预期? 严格上来说,tikv 只提供数据而已

哪要判断很简单,到底是读慢,还是计算慢?

如果是读慢,参考tidb slow query,很容易定位到慢查询了…
后续参考执行计划下,做优化即可…

1,读慢。写的sql 为select * from tidb_db.reuslt_tab where createtime>=‘’ and createtime <=‘’
2,tidb 慢查询看不到这个语句。因为tispak直接从tikv中获取,所以无法从tidb的慢查询中找到。

explain select * from tidb_db.reuslt_tab

EXPLAIN ANALYZE select * from tidb_db.reuslt_tab

可以对比下计划结果…

还没有支持 unix_timestamp 的分区裁剪。
https://github.com/pingcap/tispark/blob/master/docs/userguide_3.0.md#partition-table-support
image

可以到 https://github.com/pingcap/tispark/issues 提一个 feature request

好的,感谢!

感谢!~

感谢!

感谢各位大佬,问题解决了,原因是tispark分区裁剪不支持 UNIX_TIMESTAMP ! 通过删不要的历史数据,程序计算速度飙升~~

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。