单个分区切分region失败

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
v5.2.2

【背景】 做过哪些操作
将单一分区切分失败

【现象】 业务和数据库现象

表结构


好像目前不能这么用, [partition] 和 [Region] 是两个概念

参考这个定义:
在 TiDB 中新建一个表后,默认会单独切分出 1 个 Region 来存储这个表的数据,这个默认行为由配置文件中的 split-table 控制。当这个 Region 中的数据超过默认 Region 大小限制后,这个 Region 会开始分裂成 2 个 Region。

这个表已经是聚簇索引了,会自动的切分region,也会自动打散插入的数据

2 个赞

可是官方文档 是有示例的,是我理解错了吗
https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region/#split-单个分区的-region-示例

2 个赞

不好意思,是我看漏了~ :rofl:

修改下

between ("2021-11-01") and ("2021-12-01")

为什么日期类型要用 varchar? 不用 date ,dateTime,TIMESTAMP

补下剩下的分区
image

加了也报错

ps: 历史遗留问题,开发建表上线不需要和我们沟通

1265警告

说明你的某个字段(错误中有提示)定义的长度不够,你存入的数据已经被截断

好的,谢谢

有点怪怪的,之前有试过这种切分的操作么?

第一次用,之前看报错 以为是类型转换的问题

我感觉还是类型不支持~
Range 必须是连续的,并且不能有重叠,通过使用 VALUES LESS THAN 进行定义。

你现在定义的 Partition 存储的数据,是想要的么? 可以查一下

分区的数据 是对的,难道split 操作只能是int 型吗, 官方示例是int

时间类型也可以,还可以支持函数转换

请问能把建表语句和切分语句粘贴为文本的形式么,我试试我这里的环境能不能复现

CREATE TABLE synads_tt_creative (
creative_id bigint(63) NOT NULL COMMENT ‘创意ID’,
creative_title varchar(500) NOT NULL COMMENT ‘创意素材标题’,
ad_id bigint(63) DEFAULT NULL COMMENT ‘广告ID’,
advertiser_id bigint(63) DEFAULT NULL COMMENT ‘广告主ID’,
creative_word_ids varchar(500) DEFAULT NULL COMMENT ‘动态词包列表’,
status varchar(100) DEFAULT NULL COMMENT ‘创意素材状态’,
opt_status varchar(100) DEFAULT NULL COMMENT ‘创意素材操作状态’,
image_mode varchar(100) DEFAULT NULL COMMENT ‘创意素材类型’,
image_ids varchar(500) DEFAULT NULL COMMENT ‘图片素材id列表’,
image_id varchar(100) DEFAULT NULL COMMENT ‘视频素材封面’,
video_id varchar(100) DEFAULT NULL,
third_party_id varchar(100) DEFAULT NULL COMMENT ‘第三方id’,
metarials varchar(2048) DEFAULT NULL COMMENT ‘素材信息列表’,
creative_create_time varchar(100) DEFAULT NULL COMMENT ‘广告创意创建时间’,
creative_modify_time varchar(100) DEFAULT NULL COMMENT ‘广告创意更新时间’,
Synch_Time varchar(25) NOT NULL COMMENT ‘格式:yyyy-mm-dd HH:MM:SS,同步调用时候时间’,
Synch_Create_Date varchar(25) NOT NULL COMMENT ‘格式:yyyy-mm-dd’,
Synch_Create_Hour int(11) NOT NULL COMMENT ‘小时值范围:0~23’,
PRIMARY KEY (creative_id,Synch_Create_Date) /*T![clustered_index] NONCLUSTERED */,
KEY index_creative_id (creative_id),
KEY index_advertiser_id (advertiser_id),
KEY status (status,advertiser_id),
KEY creative_create_time (creative_create_time),
KEY creative_modify_time (creative_modify_time),
KEY idx_aid_aid_cid (advertiser_id,ad_id,creative_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin /*T! SHARD_ROW_ID_BITS=4 */ COMMENT=‘同步头条创意’
PARTITION BY RANGE COLUMNS(synch_create_date) (
PARTITION p201905 VALUES LESS THAN (“2019-06-01”),
PARTITION p201906 VALUES LESS THAN (“2019-07-01”),
PARTITION p201907 VALUES LESS THAN (“2019-08-01”),
PARTITION p201908 VALUES LESS THAN (“2019-09-01”),
PARTITION p201909 VALUES LESS THAN (“2019-10-01”),
PARTITION p201910 VALUES LESS THAN (“2019-11-01”),
PARTITION p201911 VALUES LESS THAN (“2019-12-01”),
PARTITION p201912 VALUES LESS THAN (“2020-01-01”),
PARTITION p202001 VALUES LESS THAN (“2020-02-01”),
PARTITION p202002 VALUES LESS THAN (“2020-03-01”),
PARTITION p202003 VALUES LESS THAN (“2020-04-01”),
PARTITION p202004 VALUES LESS THAN (“2020-05-01”),
PARTITION p202005 VALUES LESS THAN (“2020-06-01”),
PARTITION p202006 VALUES LESS THAN (“2020-07-01”),
PARTITION p202007 VALUES LESS THAN (“2020-08-01”),
PARTITION p202008 VALUES LESS THAN (“2020-09-01”),
PARTITION p202009 VALUES LESS THAN (“2020-10-01”),
PARTITION p202010 VALUES LESS THAN (“2020-11-01”),
PARTITION p202011 VALUES LESS THAN (“2020-12-01”),
PARTITION p202012 VALUES LESS THAN (“2021-01-01”),
PARTITION p202101 VALUES LESS THAN (“2021-02-01”),
PARTITION p202102 VALUES LESS THAN (“2021-03-01”),
PARTITION p202103 VALUES LESS THAN (“2021-04-01”),
PARTITION p202104 VALUES LESS THAN (“2021-05-01”),
PARTITION p202105 VALUES LESS THAN (“2021-06-01”),
PARTITION p202106 VALUES LESS THAN (“2021-07-01”),
PARTITION p202107 VALUES LESS THAN (“2021-08-01”),
PARTITION p202108 VALUES LESS THAN (“2021-09-01”),
PARTITION p202109 VALUES LESS THAN (“2021-10-01”),
PARTITION p202110 VALUES LESS THAN (“2021-11-01”),
PARTITION p202111 VALUES LESS THAN (“2021-12-01”),
PARTITION p202112 VALUES LESS THAN (“2022-01-01”),
PARTITION p202201 VALUES LESS THAN (“2022-02-01”),
PARTITION p202202 VALUES LESS THAN (“2022-03-01”),
PARTITION p202203 VALUES LESS THAN (“2022-04-01”)
)

split PARTITION TABLE synads_tt_creative PARTITION (p202111) BETWEEN (‘2021-11-01’) AND (‘2021-12-01’) regions 2;

非int主键时,里面的值是rowid,不是实际的数据
按照官方文档建表,插入一条数据15555,该数据落在分区p2,p2包含2个region 1700267、1700239(t_2162_xxxx)



可以查看插入行记录的mvcc信息里的regin_id位于 1700267,key范围 t_2162_r --t_2162_r_15000
image

1 个赞

报错是因为这个表是 NONCLUSTERED 非聚簇表,tidb rowid 是表的隐藏主键,是 bigint 类型,而 split region 输入的 ‘2021-11-01’ 转换后不是 int 类型,所以无法根据 rowid 进行打散,可以考虑改成 CLUSTERED 聚簇表。

2 个赞

意思是分区字段只能是int ,或者手动查询 rowid进行切分?这样对于分区表的操作太麻烦了。

1 个赞

已经做了 shard row id bits 还有明显的热点问题吗,shard row id 后手动查询 rowid 也是打散的,不好切分

1 个赞

有的,会定期把数据批量写入 单一分区。现在加了load base split 有缓解
image

1 个赞

如果是读热点可以开 load base split 缓解的,或者通过 tidb_hot_regions 定位到读热点有哪些 region,然后通过 pd-ctl > operator add split-region region-id 来打散

1 个赞