写点什么

TiDB 数据库 region 打散指南

  • 2024-12-20
    北京
  • 本文字数:1621 字

    阅读完需:约 5 分钟

作者: cchouqiang 原文来源:https://tidb.net/blog/d4e59eac

背景

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/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_customer/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_district/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_history/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_new_order/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_item/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_oorder/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_order_line/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_stock/scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_warehouse/scatter
复制代码


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


curl http://192.168.1.1:10081/tables/tpcc/bmsql_config/stop-scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_customer/stop-scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_district/stop-scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_history/stop-scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_new_order/stop-scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_item/stop-scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_oorder/stop-scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_order_line/stop-scattercurl http://192.168.1.1:10081/tables/tpcc/bmsql_stock/stop-scattercurl 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使用率相差无几,每个存储节点的负载都均衡。
复制代码



发布于: 刚刚阅读数: 5
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB数据库region打散指南_性能调优_TiDB 社区干货传送门_InfoQ写作社区