为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
v5.2.2
【背景】 做过哪些操作
将单一分区切分失败
【现象】 业务和数据库现象
表结构
好像目前不能这么用, [partition] 和 [Region] 是两个概念
参考这个定义:
在 TiDB 中新建一个表后,默认会单独切分出 1 个 Region 来存储这个表的数据,这个默认行为由配置文件中的 split-table
控制。当这个 Region 中的数据超过默认 Region 大小限制后,这个 Region 会开始分裂成 2 个 Region。
这个表已经是聚簇索引了,会自动的切分region,也会自动打散插入的数据
可是官方文档 是有示例的,是我理解错了吗
https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region/#split-单个分区的-region-示例
不好意思,是我看漏了~
修改下
between ("2021-11-01") and ("2021-12-01")
为什么日期类型要用 varchar? 不用 date ,dateTime,TIMESTAMP
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)
报错是因为这个表是 NONCLUSTERED 非聚簇表,tidb rowid 是表的隐藏主键,是 bigint 类型,而 split region 输入的 ‘2021-11-01’ 转换后不是 int 类型,所以无法根据 rowid 进行打散,可以考虑改成 CLUSTERED 聚簇表。
意思是分区字段只能是int ,或者手动查询 rowid进行切分?这样对于分区表的操作太麻烦了。
已经做了 shard row id bits 还有明显的热点问题吗,shard row id 后手动查询 rowid 也是打散的,不好切分
有的,会定期把数据批量写入 单一分区。现在加了load base split 有缓解
如果是读热点可以开 load base split 缓解的,或者通过 tidb_hot_regions 定位到读热点有哪些 region,然后通过 pd-ctl > operator add split-region region-id 来打散