TiDB-merge region相关问题

本文介绍了如何开启和调整TiKV与PD的RegionMerge配置,以及检查和处理空Region的方法。针对大量空Region存在的问题,分析了可能原因,并提出了关闭splittable特性的解决方案,涉及参数如`split-region-on-table`和`enable-cross-table-merge`的调整。此外,还提及了`enable-one-way-merge`参数对Region合并的影响。

一、开启region merge

# 控制 Region Merge 的 size 上限,当 Region Size 大于指定值时 PD 不会将其与相邻的 Region 合并
pd-ctl config set max-merge-region-size 20
# 控制 Region Merge 的 key 上限,当 Region key 大于指定值时 PD 不会将其与相邻的 Region 合并
pd-ctl config set max-merge-region-keys 200000
# 同时进行的 Region Merge 调度的任务,设置为 0 则关闭 Region Merge。
pd-ctl config set merge-schedule-limit 8

二、查看空region的方法

pd里记录的所有空region

# pd监控中记录的region数量
tiup ctl:v4.0.13 pd  -u http://pd_ip:pd_port region check empty-region > empty-region.json
# wc -l empty-region.json

# 通过对全量数据做对比
tiup ctl:v4.0.13 pd  -u http://pd_ip:pd_port region scan> region_all.json
# 通过条件对比,可以发现官方对"approximate_size": 1的情况即定义为空region,approximate_size表示region的近似数据量

# 但是pd中的记录其实是存在一定的偏差,真实的空region要通过下面的sql查看
SELECT count(1) FROM INFORMATION_SCHEMA.TIKV_REGION_STATUS where APPROXIMATE_SIZE=1;

三、开启了region merge后还有大量空region的原因

创建过大量表后(包括执行 Truncate Table 操作)又清空了。此时如果开启了 split table 特性,这些空 Region 是无法合并的,此时需要调整以下参数关闭这个特性:
TiKV: 将 split-region-on-table 设为 false,该参数不支持动态修改。

方式一、

# PD:
config set key-type raw
# config set key-type txn
# 如果集群中不存在 TiDB 实例,key-type 的值为 "raw" 或 "txn"。此时,无论 enable-cross-table-merge 设置为何,PD 均可以跨表合并 Region。

#如果集群中存在 TiDB 实例,key-type 的值应当为 "table"。此时,enable-cross-table-merge 的设置决定了 PD 是否能跨表合并 Region。如果 key-type 的值为 "raw",placement rules 不生效。

方式二、

# enable-cross-table-merge 用于开启跨表 Region 的合并。当设置为 false 时,PD 不会合并不同表的 Region。该选项只在键类型为 "table" 时生效。
config set enable-cross-table-merge true

小记:

# enable-one-way-merge 用于控制是否只允许和相邻的后一个 Region 进行合并。当设置为 false 时,PD 允许与相邻的前后 Region 进行合并。设置为true只允许和相邻的后一个 Region 合并
config set enable-one-way-merge true

这是开启了跨表合并后的空region现象,还有一些点不明白的之后再补充
在这里插入图片描述

05-01
### Merge 的概念与用法 在编程和数据处理领域,“merge” 是指将两个或多个数据集、集合或其他结构组合成一个新的整体的过程。这一操作通常用于保持数据一致性或将不同来源的数据集成到单一视图中。 #### 数据处理中的 Merge 在数据处理中,`merge` 常见于数据分析工具(如 Pandas 或 SQL)。它涉及通过共同的关键字段连接不同的表或数据框。这种技术类似于数据库查询中的 `JOIN` 操作[^3]。以下是几种常见的 merge 类型: - **Inner Join**: 只保留两组数据中共有的键值对应的记录。 - **Outer Join**: 合并所有记录,无论它们是否存在于另一组数据中。 - **Left Join/Right Join**: 保留左表或右表的所有记录,并补充来自另一侧匹配的记录;如果无匹配,则填充缺失值。 例如,在 Python 中使用 Pandas 库可以实现如下操作: ```python import pandas as pd df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'data1': [1, 2, 3]}) df2 = pd.DataFrame({'key': ['B', 'D', 'E'], 'data2': [4, 5, 6]}) merged_df = pd.merge(df1, df2, on='key', how='inner') print(merged_df) ``` 此代码片段展示了如何基于共享列 `'key'` 执行内部联接[^4]。 #### 并行计算中的 Global Data Aggregation 和 Pairwise Merging 另一种形式的合并发生在分布式系统或者大规模并行运算期间。“Global data aggregation”,即全局数据聚合,是一种有效减少中间状态存储需求的技术。这种方法允许结果逐步累积而不是一次性加载整个数据集进入内存[^2]。具体来说,pairwise merging 将部分结果配对直到最终得出唯一结论。 #### 函数式编程里的 Merge 当提到函数式编程范例时,比如 Haskell 或 Scala,列表或者其他可迭代对象可以通过特定方式融合在一起。一个典型例子就是 zipWith 方法,它可以接受两个序列作为输入参数并将对应位置上的元素传递给指定二元函数来构建新数组[^5]。 ```haskell let mergedList = zipWith (+) [1..5] [6..10] -- Resulting list would be [7,9,11,13,15] ``` 以上实例说明了怎样利用简单的算术加法规则把两个整数系列结合起来形成第三个数值串流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值