表预分配region个数问题

【 TiDB 使用环境】生产环境 or 测试环境 or POC
【 TiDB 版本】
4.0.6
【遇到的问题】
创建表的时候使用了表的预分配:SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=2

PRIMARY KEY (bill_id),
KEY ix_t_bill_base_22 (transaction_no),
KEY ix_t_bill_base_23 (preorder_bill_id),
KEY ix_t_bill_base_26 (archive_batch_no),
KEY ix_t_bill_base_27 (bill_file_md5),
UNIQUE KEY ix_t_bill_base_21 (businnumber,busikindcode,billtypecode,registorganizationcode),
KEY ix_t_bill_base_24 (main_bill_id,change_seq),
KEY ix_t_bill_base_28 (send_bill_batch_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin/*!90000 SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=2 */ COMMENT=‘主表’ |

但是查看表分配region信息,只能看到有一个region
mysql> show table t_bill_base regions;
±----------±----------±--------±----------±----------------±--------------------------±-----------±--------------±-----------±---------------------±-----------------+
| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS |
±----------±----------±--------±----------±----------------±--------------------------±-----------±--------------±-----------±---------------------±-----------------+
| 217400 | t_533_ | t_535_ | 7878021 | 6 | 7878021, 7931719, 7937484 | 0 | 0 | 0 | 75 | 441440 |
±----------±----------±--------±----------±----------------±--------------------------±-----------±--------------±-----------±---------------------±-----------------+
1 row in set (0.00 sec)

这个是为啥呀?

【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

1 个赞

创建完成后立即show table regions查看的吗

这个表很早就创建了,当时没有观察,今天一看,就一个region。

空region merge了,你可以在建个测试表观察

再创建一个表,是正常的,哦,原来如此,估计就是merge了。

1 个赞

我从grafana界面看,一个月的时间内,一直有300多个空region,这个是为啥呢?按说空的region应该会合并掉呀。

region划分key的范围,相邻的region间不允许存在空洞,合并时向右合并,相邻region达不到合并条件,前面的也就没法合并。pd-ctl config show可以看merge key/merge size阈值

查了一下两个参数的值,都是默认值。

max-merge-region-size 20

max-merge-region-keys 200000

这个要怎么继续排查呢?这个集群没什么业务,数据量也很小,但是空的region特别多

选个空region ,看下它相邻的下一个region的表信息,大小 key数量

怎么看一个region是否是空的?
通过curl xxx:2379/pd/api/v1/regions吗?

1 个赞

这个可以,也可以pd-ctl region check emptry-region

regions.txt (181.9 KB)

能给看一下,看看有什么问题吗?这个输出结果都是空region吗?

我这个集群现在总的region也就340个,查出来的空region是272个。

找个region的后面region 看下,比如pd-ctl region 203 ,或者可以从tikv_region_status;看空region的下一个region大小

这个输出来的都是空的region信息,怎么看跟他相接的下一个reigon呢?我怎么知道他的region id呢?

直接看tikv_region_status 按start_key排序

看我上传的txt文件,找了几个region的信息,一个region的end_key是另一个region的start_key,这应该表示这些空的region都是连续的

没有这个表,我的版本是4.0.6

{
“id”: 202,
“start_key”: “7480000000000000FF5C00000000000000F8”,
“end_key”: “7480000000000000FF5E00000000000000F8”,
“epoch”: {
“conf_ver”: 71630,
“version”: 43
},
“peers”: [
{
“id”: 7796112,
“store_id”: 21
},
{
“id”: 7952849,
“store_id”: 3
},
{
“id”: 7952908,
“store_id”: 2
}
],
“leader”: {
“id”: 7796112,
“store_id”: 21
},
“written_bytes”: 0,
“read_bytes”: 0,
“written_keys”: 0,
“read_keys”: 0,
“approximate_size”: 1,
“approximate_keys”: 0
},

从上面的内容中,我通过看那个指标,表示这个region是空的呀?

你看了information_schema没有tikv_region_status表吗?

:sweat_smile:不好意思,刚才看错了,有这个表。
我通过什么字段,能说明一个region不是空的呢?

1 个赞