https://docs.pingcap.com/zh/tidb/stable/configure-load-base-split#load-base-split

Load Base Split 是 TiKV 在 4.0 版本引入的特性,旨在解决 Region 访问分布不均匀造成的热点问题,比如小表的全表扫描。

场景描述

在 TiDB 中,当流量集中在某些节点时很容易形成热点。PD 会尝试通过调度 Hot Region,尽可能让这些 Hot Region 均匀分布在各个节点上,以求获得更好的性能。

但是 PD 的调度的最小粒度是 Region。如果集群的热点数目少于节点数目,或者说存在某几个热点流量远高于其他 Region,对 PD 的热点调度来说,能做到的也只是让热点从一个节点转移到另一个节点,而无法让整个集群承担负载。

这种场景在读请求居多的 workload 中尤为常见。例如对小表的全表扫描和索引查找,或者是对一些字段的频繁访问。

在此之前解决此类问题的办法是手动输入命令去拆分一个或几个热点 Region,但是这样的操作存在以下两个问题:

  • 均匀拆分 Region 并不一定是最好的选择,请求可能集中在某几个 Key 上,即使均匀拆分后热点可能仍然集中在其中一个 Region 上,可能需要经过多次均匀拆分才能达到目标。
  • 人工介入不够及时和易用。

实现原理

Load Base Split 会基于统计信息自动拆分 Region。通过统计信息识别出读流量或 CPU 使用率在 10s 内持续超过阈值的 Region,并在合适的位置将这些 Region 拆分。在选择拆分的位置时,会尽可能平衡拆分后两个 Region 的访问量,并尽量避免跨 Region 的访问。

Load Base Split 后的 Region 不会被迅速 Merge。一方面,PD 的 MergeChecker 会跳过 hot Region,另一方面 PD 也会针对心跳信息中的 QPS去进行判断,避免 Merge 两个 QPS 很高的 Region。

使用方法

目前的 Load Base Split 的控制参数如下:

  • split.qps-threshold:表明一个 Region 被识别为热点的 QPS 阈值。当 region-split-size 小于 4 GB 时,默认为每秒 3000 QPS。当 region-split-size 大于或等于 4 GB 时,默认值为每秒 7000 QPS。
  • split.byte-threshold:自 v5.0 引入,表明一个 Region 被识别为热点的流量阈值,单位为 Byte。当 region-split-size 小于 4 GB 时,默认值为每秒 30 MiB 流量。当 region-split-size 大于或等于 4 GB 时,默认值为每秒 100 MiB 流量。
  • split.region-cpu-overload-threshold-ratio:自 v6.2.0 引入,表明一个 Region 被识别为热点的 CPU 使用率(占读线程池 CPU 时间的百分比)阈值。当 region-split-size 小于 4 GB 时,默认值为 0.25。当 region-split-size 大于或等于 4 GB 时,默认值为 0.75。

如果连续 10s 内,某个 Region 每秒的各类读请求之和超过了 split.qps-threshold、流量超过了 split.byte-threshold,或 CPU 使用率在 Unified Read Pool 内的占比超过了 split.region-cpu-overload-threshold-ratio,那么就会尝试对此 Region 进行拆分。

目前默认开启 Load Base Split,但配置相对保守。如果想要关闭这个功能,将 QPS 和 Byte 阈值全部调到足够高并将 CPU 占比阈值调为 0 即可。

目前有两种办法修改配置:

  • 通过 SQL 语句修改,例如:

    # 设置 QPS 阈值为 1500 SET config tikv split.qps-threshold=1500; # 设置 Byte 阈值为 15 MiB (15 * 1024 * 1024) SET config tikv split.byte-threshold=15728640; # 设置 CPU 使用率阈值为 50% SET config tikv split.region-cpu-overload-threshold-ratio=0.5;
  • 通过 TiKV 修改,例如:

    curl -X POST "http://ip:status_port/config" -H "accept: application/json" -d '{"split.qps-threshold":"1500"}' curl -X POST "http://ip:status_port/config" -H "accept: application/json" -d '{"split.byte-threshold":"15728640"}' curl -X POST "http://ip:status_port/config" -H "accept: application/json" -d '{"split.region-cpu-overload-threshold-ratio":"0.5"}'

同理,目前也有两种办法查看配置:

  • 通过 SQL 查看,例如:

    show config where type='tikv' and name like '%split.qps-threshold%'
  • 通过 TiKV 查看,例如:

    curl "http://ip:status_port/config"
 
注意

从 v4.0.0-rc.2 起可以使用 SQL 语句来修改和查看配置。

[转帖]Load Base Split的更多相关文章

  1. TiDB在科捷物流神州金库核心系统的应用与实践

    导读:在经过了近半年的测试验证和迁移准备之后,神州金库3.0核心系统 WMS 正式从 MySQL 迁移到了分布式 HTAP 数据库 TiDB,上线后不久即经历了第一次双11的考验,TiDB的性能和稳定 ...

  2. 自己修改的两个js文件

    sea-base.js /** * Sea.js 2.2.3 | seajs.org/LICENSE.md */ (function(global, undefined) { // Avoid con ...

  3. XGBOOST应用及调参示例

    该示例所用的数据可从该链接下载,提取码为3y90,数据说明可参考该网页.该示例的“模型调参”这一部分引用了这篇博客的步骤. 数据前处理 导入数据 import pandas as pd import ...

  4. jquery.i18n.properties.js hacking

    /****************************************************************************** * jquery.i18n.proper ...

  5. vue-cli2、vue-cli3脚手架详细讲解

    前言: vue脚手架指的是vue-cli它是vue官方提供的一个快速构建单页面(SPA)环境配置的工具,cli 就是(command-line-interface  ) 命令行界面 .vue-cli是 ...

  6. C#picturebox控件图片以json格式上传java后台保存

    关于winform上传图片到Java后端,保存到数据库,有多种方法,本文主要介绍利用picturebox控件,点击按钮上传图片,将图片转化为base64格式,以json格式上传到Java后台,再从ja ...

  7. js多语言切换demo

    网站为了国际化的需要,会使用到语言包,案例如下图. 这次尝试用js来打语言包,用到了插件 jquery.i18n.properties ,很明显,使用这个插件需要先加载jquery. 代码布局结构   ...

  8. 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速

    前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...

  9. 痞子衡嵌入式:IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞问题的分析解决经验. 事情缘起恩智浦官方论坛上的一 ...

  10. asp.net mvc 之旅 —— 第五站 从源码中分析asp.net mvc 中的TempData

    在mvc的controller中,我们知道有很多的临时变量存放数据,比如说viewData,viewBag,还有一个比较特殊的tempData,关于前两个或许大家都明白, 基本上是一个东西,就是各自的 ...

随机推荐

  1. 防火墙添加允许服务器IP和端口方法

    一.检测防火墙命令 systemctl status firewalld 如果显示如下active表示防火墙开启 ● firewalld.service - firewalld - dynamic f ...

  2. OPPO关停自研芯片公司哲库,这对行业将产生什么影响?

    OPPO什么时候关停自研芯片公司哲库? 公元2023年5月12日,OPPO关停了自研芯片公司哲库.这也是汶川大地震的日子,而OPPO创始人是四川人,真是冥冥之中自有天意.OPPO公司在一份声明中表示, ...

  3. 玩转云上数据湖,解析Serverless 技术落地

    导读: 本文主要介绍Serverless计算相关技术与其在华为云数据湖探索服务(后文简称DLI)中的技术落地.Serverless是DLI将计算能力服务化和产品化关键技术,与传统IAAS和PAAS技术 ...

  4. MyBatis中SQL语句优化小结

    摘要:MyBatis 作为一款优秀的持久层框架,它支持自定义SQL.存储过程以及高级映射. MyBatis 作为一款优秀的持久层框架,它支持自定义SQL.存储过程以及高级映射.它免除了几乎所有的 JD ...

  5. 你不知道的vue3:使用runWithContext实现在非 setup 期间使用inject

    前言 日常开发时有些特殊的场景需要在非 setup 期间调用inject函数,比如app中使用provide注入的配置信息需要在发送http请求时带上传给后端.对此我们希望不在每个发起请求的地方去修改 ...

  6. 正确使用 HttpClient

    正确使用 HttpClient 其实标题应该叫:在控制台程序中使用IHttpClientFactory 以前一直使用的是HttpWebRequest,.NET6工程代码提示已过时,使用HttpClie ...

  7. WPF 组织机构摄像机树 全量加载 大数据量 分页加载摄像机节点

    WPF 组织机构摄像机树 全量加载 大数据量 分页加载摄像机节点 完整代码: https://gitee.com/s0611163/WpfTreeDemo 性能: 8000组织机构20万摄像机,全量加 ...

  8. modint 板子

    自动对 int 取模 // modint template<int MOD> struct Fp { ll val; constexpr Fp(ll v = 0) noexcept : v ...

  9. 复旦大学2020考研机试题-编程能力摸底试题(A-E)

    A.斗牛 给定五个0~9范围内的整数a1,a2,a3,a4,a5.如果能从五个整数中选出三个并且这三个整数的和为10的倍数(包括0),那么这五个整数的权值即为剩下两个没被选出来的整数的和对10取余的结 ...

  10. 5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)

    前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...