0
0
0
0
专栏/.../

TiDB数据库region打散指南

 cchouqiang  发表于  2024-12-18

背景

TiDB 数据库是一款云原生的分布式数据库,本身具备负载均衡机制,默认会将业务负载均匀地分布到不同计算或存储节点上,更好地利用上整体系统资源。但是,在某些场景下会出现业务负载不能被很好地分散,节点间的负载不均衡,从而影响性能。

TiDB 数据库是计算存储分离的,负载不均衡可能出现在计算节点,也可能出现在存储节点,本文只介绍出现在存储节点上出现负载不均衡的处理方式。

TiKV存储节点负载不均衡案例分析

对TiDB数据库进行TPC-C测试,观察grafana面板中tikv CPU使用情况,发现6个tikv节点的CPU使用并不均衡,CPU使用率差别很大。如下图所示:

观察Overview中tikv主机的CPU使用率,CPU使用率最高的节点能达到2251%,而CPU使用率最低的节点只有1151%,说明存储节点的负载不均衡。

观察tikv的leader分布情况,leader最多的节点有429个,leader最低的节点有389个,差距在10%左右

通过如下sql,查看表的region leader所在的存储节点上的数量,发现这张表在每个tikv节点上的leader数量不均衡。

select trs.table_name,tss.address,count(trp.region_id) leader_region_count 
from TIKV_STORE_STATUS tss,TIKV_REGION_PEERS trp,(select distinct region_id,table_name,db_name from TIKV_REGION_status where is_index=0) trs 
where trs.region_id=trp.region_id and trp.store_id=tss.store_id and trp.is_leader=1 and trs.table_name='tab1' 
and trs.db_name='db1' group by trs.table_name,tss.address order by  trs.table_name,tss.address;

region leader 重分布方法

对表region leader重分布,有两种方式:

  • 通过TiDB的API接口进行打散
  • 通过SQL命令 split table 进行打散

通过TiDB的API接口进行打散

执行如下命令,可以对表的 region leader 进行打散,结合上一章节的sql脚本进行校验。

curl http://192.168.1.1:10081/tables/tpcc/bmsql_config/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_customer/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_district/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_history/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_new_order/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_item/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_oorder/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_order_line/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_stock/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_warehouse/scatter

通过如上命令对表进行打散后,需要手动关闭,命令如下:

curl http://192.168.1.1:10081/tables/tpcc/bmsql_config/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_customer/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_district/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_history/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_new_order/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_item/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_oorder/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_order_line/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_stock/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_warehouse/stop-scatter

通过SQL命令 split table 进行打散

参考官网链接:

https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region#%E8%AF%AD%E6%B3%95%E5%9B%BE

通过如上方式,对region leader 打散后,再次执行TPCC,发现存储节点的CPU使用率相差无几,每个存储节点的负载都均衡。

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论