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. [极客大挑战 2019]Havefun 1

    [极客大挑战 2019]Havefun 1 一,审题,观察题目信息和知识点 观察题目,没发现有效信息 ​ F12打开源代码,发现有一个GET传输. ​ 知识点 GET方法的数据传输是通过URL传输的, ...

  2. node版本管理工具推荐

    hello,今天给大家分享几款 node 版本管理的工具. 背景 在开发前端项目的时候,特别是新到公司接手一个多年维护的老项目时,如果 node 版本不正确,有的插件可能无法正确安装,比如我之前提到的 ...

  3. 为什么OpenAPI是未来企业数字化转型的决定性因素?

    本文分享自华为云开发者联盟公众号<为什么OpenAPI是未来企业数字化转型的决定性因素?>. 随着数字经济不断发展升级,数据互通.万物互联正在逐步成为IT产业发展的主旋律,企业数字化转型也 ...

  4. 干货时间:聊聊DevOps下的技术系列之契约测试

    摘要:本期和大家简单聊聊在服务交互场景下使用服务契约的重要性,以及契约管理的必要性,最后简单介绍了下契约测试. 1.服务交互带来的问题 在上一篇文章中,我们系统的列举了DevOps各个流程中常用的测试 ...

  5. 详解Apache Sentry->Ranger平滑升级方案

    摘要:本文主要探讨如何平滑解决sentry到ranger升级过程中的权限迁移问题. 本文分享自华为云社区<[平滑上云]Apache Sentry->Ranger平滑升级方案>,作者: ...

  6. OpenCV萌新福音:易上手的数字识别实践案例

    摘要:信用卡识别的案例用到了图像处理的一些基本操作,对刚上手CV的人来说还是比较友好的. 本文分享自华为云社区<Python openCV案例:信用卡数字识别>,原文作者:深蓝的回音 . ...

  7. DBA:这有一份对接NBU备份故障排除指南,请查收!

    摘要:当前DWS支持NBU介质备份恢复,本文介绍DWS对接NBU备份故障排除方法. 本文分享自华为云社区<DWS对接NBU备份故障排除指南>,作者: 唐伯虎点蚊香. NetBackup是V ...

  8. 用 Java?试试国产轻量的 Solon v1.10.1

    相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 - 10 倍. (更快) qps 高 2- 3 倍. (更高) 运行时内存节省 1/3 ~ 1/2. (更少) 打包 ...

  9. Java 网络编程 —— ServerSocket 详解

    构造 ServerSocket ServerSocket 的构造方法有以下几种重载形式 ServerSocket() throws IOException ServerSocket(int port) ...

  10. 手把手教你在 Windows 环境中搭建 MQTT 服务器

    前言 前些天要对接一家硬件商的设备数据,对方使用的 MQTT 协议点对点透传,所以又赶紧搭建 MQTT 服务器,写 .NET 程序接收数据等等,今天分享一下如何搭建 MQTT 服务器. MQTT 协议 ...