黄东旭解析 TiDB 的核心优势
576
2024-03-14
TiDB 在应对 delete 和 update 产生的 mvcc 数据,compact 触发概率一般比较低,导致空间释放慢,甚至一些 SQL 由于 mvcc 原因导致查询慢,因此在比较低版本可以用一下方法来解决。
要查询与test.sbtest2
表关联的Region ID(仅限表数据,非索引数据),并且确定该Region的副本位于指定TiKV节点(172.16.201.18:20160
)上,请使用以下SQL查询:
SELECT r.region_idFROM information_schema.tikv_region_status AS rJOIN information_schema.tikv_region_peers AS p ON r.region_id = p.region_idJOIN information_schema.tikv_store_status AS st ON p.store_id = st.store_idWHERE r.table_name = "sbtest2" AND r.db_name = "test" AND r.is_index = 0 AND st.address = '172.16.201.18:20160'ORDER BY r.start_key ASC LIMIT 1;
这个查询返回与表test.sbtest2
关联的第一个Region ID,这个Region的副本位于172.16.201.18:20160
地址的TiKV节点上。
在获取到Region ID之后(例如,假设Region ID为98),你可以使用TiUP的ctl工具对该Region进行Compact操作,以此来减少空间占用和提高读写性能。以下是按照Region ID进行Compact操作的步骤:
首先,检查Region的属性以确认是否需要执行Compact:
tiup ctl:v6.5.8 tikv --host 172.16.201.18:20160 region-properties -r 98 | grep delete
使用Compact命令来压缩write CF(Column Family):
tiup ctl:v6.5.8 tikv --host 172.16.201.18:20160 compact -c write -r 98
同样的,对default CF进行Compact操作:
tiup ctl:v6.5.8 tikv --host 172.16.201.18:20160 compact -c default -r 98
再次检查Region的属性以确认Compact操作之后删除键的数量:
tiup ctl:v6.5.8 tikv --host 172.16.201.18:20160 region-properties -r 98 | grep delete
通过以上步骤,你可以对TiKV中的指定Region进行Compact操作,优化数据存储结构。
请注意,版本号(如v6.5.8)和TiKV节点的地址(如172.16.201.18:20160
)需要根据实际环境进行更改。务必保证使用与集群版本对应的ctl工具版本,以避免不兼容的问题。
这个方法影响最小,但是操作最复杂,如果表比较大,region 数量较多的情况下非常麻烦,推荐脚本化处理
在执行 compaction 之前和之后,需要记录表的行数,以便验证 compaction 的效果。以下是详细步骤:
在执行 compaction 前后,运行以下 SQL 语句并保存结果:
EXPLAIN ANALYZE SELECT COUNT(1) FROM table_name;
将 table_name
替换为待 compaction 的表名。
执行 SQL 查询以获取表的最小和最大 Key:
SELECT MIN(START_KEY) AS START_KEY, MAX(END_KEY) AS END_KEYFROM information_schema.tikv_region_statusWHERE db_name = 'db_name' AND table_name = 'table_name';
将 db_name
和 table_name
替换为数据库名和表名。
使用 tikv-ctl
将获取到的最小和最大 Key 转换为 escaped 格式:
tiup ctl:v7.1.1 tikv --host 172.16.201.73:25160 --to-escaped start_key tiup ctl:v7.1.1 tikv --host 172.16.201.73:25160 --to-escaped end_key
替换 start_key
和 end_key
为上一步骤查询到的实际值。
例如,假设转换后的 start_key 和 end_key 为:r\000\000\001\000\000\000\000\373
和 t\200\000\000\000\000\000\000\377[\000\000\000\000\000\000\000\370
,在 compaction 时,需要在 key 前面加上字符 z
。
tiup ctl:v7.1.1 tikv --host IP:port compact --bottomost force -c write --from 'zr\000\000\001\000\000\000\000\373' --to 'zt\200\000\000\000\000\000\000\377[\000\000\000\000\000\000\000\370'
tiup ctl:v7.1.1 tikv --host IP:port compact --bottomost force -c default --from 'zr\000\000\001\000\000\000\000\373' --to 'zt\200\000\000\000\000\000\000\377[\000\000\000\000\000\000\000\370'
将 IP:port
替换为目标 TiKV 节点的实际 IP 地址和端口号。
通过以上步骤,可以对指定的表进行手动 compaction 操作。
确保在执行这些步骤时,替换示例中的 table_name
、db_name
、start_key
、end_key
以及 IP:port
等占位符为你实际环境中的具体值。
这个方法相对简单,但是影响也不小,推荐业务低峰期做。
cluster compact 和 compact 实例相对来说操作简单,但是影响最大:
tikv-ctl --pd 127.0.0.1:2379 compact-cluster tikv-ctl --host tikv_ip:port compact -d kv -c default tikv-ctl --host tikv_ip:port compact -d kv -c write --bottommost force
region-compact-min-redundant-rows
从 v7.1.0 版本开始引入触发 RocksDB compaction 需要的冗余的 MVCC 数据行数。
默认值:50000
最小值:0
region-compact-redundant-rows-percent
从 v7.1.0 版本开始引入触发 RocksDB compaction 需要的冗余的 MVCC 数据行所占比例。
默认值:20
最小值:1
最大值:100
可以考虑临时调小,调大 compact 触发概率,推荐业务低峰做
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。