[转帖]Load Base Split
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 时,默认为每秒3000QPS。当region-split-size大于或等于 4 GB 时,默认值为每秒7000QPS。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的更多相关文章
- TiDB在科捷物流神州金库核心系统的应用与实践
导读:在经过了近半年的测试验证和迁移准备之后,神州金库3.0核心系统 WMS 正式从 MySQL 迁移到了分布式 HTAP 数据库 TiDB,上线后不久即经历了第一次双11的考验,TiDB的性能和稳定 ...
- 自己修改的两个js文件
sea-base.js /** * Sea.js 2.2.3 | seajs.org/LICENSE.md */ (function(global, undefined) { // Avoid con ...
- XGBOOST应用及调参示例
该示例所用的数据可从该链接下载,提取码为3y90,数据说明可参考该网页.该示例的“模型调参”这一部分引用了这篇博客的步骤. 数据前处理 导入数据 import pandas as pd import ...
- jquery.i18n.properties.js hacking
/****************************************************************************** * jquery.i18n.proper ...
- vue-cli2、vue-cli3脚手架详细讲解
前言: vue脚手架指的是vue-cli它是vue官方提供的一个快速构建单页面(SPA)环境配置的工具,cli 就是(command-line-interface ) 命令行界面 .vue-cli是 ...
- C#picturebox控件图片以json格式上传java后台保存
关于winform上传图片到Java后端,保存到数据库,有多种方法,本文主要介绍利用picturebox控件,点击按钮上传图片,将图片转化为base64格式,以json格式上传到Java后台,再从ja ...
- js多语言切换demo
网站为了国际化的需要,会使用到语言包,案例如下图. 这次尝试用js来打语言包,用到了插件 jquery.i18n.properties ,很明显,使用这个插件需要先加载jquery. 代码布局结构 ...
- 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速
前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...
- 痞子衡嵌入式:IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞问题的分析解决经验. 事情缘起恩智浦官方论坛上的一 ...
- asp.net mvc 之旅 —— 第五站 从源码中分析asp.net mvc 中的TempData
在mvc的controller中,我们知道有很多的临时变量存放数据,比如说viewData,viewBag,还有一个比较特殊的tempData,关于前两个或许大家都明白, 基本上是一个东西,就是各自的 ...
随机推荐
- .NET周刊【1月第1期 2023-01-07】
一月头条:C# 被评为2023年度编程语言! 在TIOBE指数的历史上,祝贺 C# 首次赢得了年度编程语言奖项!C# 已经是十大顶尖选手超过两个十年了,现在它正在迎头赶上四大语言,凭借一年内最大增幅( ...
- 从VMWare安装到Nginx配置
1.安装VMWare Workstation 16 player,Mac也可使用Parallels Desktop,自己有虚拟主机的跳过: 2.在虚拟机中,安装Centos7操作系统,使用Minima ...
- linux中创建新用户并且放到用户组中
1.打开终端并以 root 用户身份登录到 Linux 系统 2.使用以下命令创建一个新用户 sudo useradd -m username 将 "username" 替换为你要 ...
- 超酷! Atlas给黑白视频“上色”
摘要:随着人工智能技术发展,AI已经能够为黑白的老视频 "上色",重现昔日的情景,让黑白图像变得栩栩如生. 怎么样,是不是看起来题目跟昨天的博客名称差不多?昨天是图片,今天是视频. ...
- 火山引擎AB测试:企业产品优化主题分享在北京举办
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台在北京举办了"超话数据:企业产品优化分享"的活动.该活动邀请了火山引擎的 ...
- QA: Solon 出现中文乱码怎么办?
有些服务器可能会出现中文乱码,有些又不会.也是挺晕的. 可以用 jvm 启动参数试一下: java -Dfile.encoding=utf-8 -jar demoapp.jar
- STM32CubeMX教程16 DAC - 输出3.3V内任意电压
1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK ...
- vi / vim 键盘图(清晰打印版,桌面背景好图)
PDF File https://files.cnblogs.com/files/RioTian/vivim-graphical.zip?t=1704439837&download=true ...
- 在Windows下配置Clang编译器
Preferences Linux & macOS 平台LLVM 相关工具链下载 2019年,在Windows下配置Clang编译器 Visual Studio 2022 中使用 Clang ...
- VIM 入门手册, (VS Code)
要想在VScode里使用Vim需要先行按照插件 安装 vim 插件 VS Code 中输入快捷键 shift + ctrl + x, 或直接打开 扩展安装导航 搜索 vim, 选择 Vim , 点击 ...