当前位置: 首页 > article >正文

TiDB 性能测试的几个优化点

作者: 数据源的TiDB学习之路 原文来源: https://tidb.net/blog/513a4eef

背景

前段时间参与了一个 TiDB 的性能测试,具体是在三台海光服务器(512G内存、128 core 分8个NUMA、4块3.5T SSD)搭建一个混合部署的 TiDB 集群,并测试 OLTP 和 OLAP 的性能指标。

TiDB 针对性能优化部分,提供了很多方式方法。比如在配置调优模块,提供操作系统性能参数调优、TiDB/TiKV 内存调优、TiKV 线程调优、Region 调优、TiFlash 调优等;在 SQL 调优模块,针对 SQL 优化流程、控制执行计划等方式提供了多种优化路径。

优化方法虽然多,但是优化起来也比较复杂,且优化的效果可能还不明显,尤其是 TiKV 线程调优部分。相反,恰恰是一些直观的、简单的优化方法,对性能测试却可能起到非常大的帮助。笔者根据自身实践经验概括了以下几点,供大家参考。

NUMA 绑核是最有效的优化手段

早期的计算机系统主要是 SMP(Symmetric Multi-Processor) 架构,也就是对称多处理器架构,所有的 CPU 都通过一条总线来访问内存,内存是统一结构和统一寻址的(UMA,Uniform Memory Architecture)。以前由于一般物理机器的 CPU 核数较少,SMP 架构在这种情况下表现较好,实验证明 SMP 服务器 CPU 利用率最好的情况是2至4个CPU。

然而随着 CPU 多核技术的发展,一颗物理 CPU 中集成了越来越多的 core,导致 SMP 架构的性能瓶颈越来越明显。随着处理器的增加,系统总线成为了瓶颈,另外处理器和内存之间的通信延迟也增大。为解决此问题,NUMA 架构应运而生,NUMA 调整了 CPU 和内存的布局和访问关系。虽然 NUMA 很好的解决了 SMP 架构下 CPU 大量扩展带来的性能问题,但其自身也存在着不足,当 NUMA Node 节点本地内存不足时,需要跨节点访问内存,节点间的访问速度慢,从而也会带来性能下降。要充分利用 NUMA 系统这个特点,应尽量减少不同 CPU 模块之间的交互,避免远程访问资源,如果应用程序能有方法固定在一个 CPU 模块,应用的性能将会有很大的提升。

国产海光服务器一般有 8 个 NUMA Node,而 TiDB 数据库在混合部署模式下,每个物理节点会包括多个组件,如 1*PD、N*TiDB Server、N*TiKV、N*TiFlash 以及监控告警组件。合理的对不同组件绑定不同的 NUMA,在性能上会有非常大的差异。

在集群拓扑配置文件中,可以对不同的组件增加 numa_node 参数来绑定 NUMA。以下表格是同一个测试场景( 百万记录表关联聚合 ) 中针对 TiFlash 组件分别绑定 不同 NUMA Node 时的性能差异。从结果可以看出,在单并发场景下, 每个 TiFlash 绑定 2个 NUMA Node 时可以获得最佳性能 TPS 约为 2.6/秒,而如果绑定 8 个 NUMA Node 时性能最差 TPS 约为 0.7/秒

并发度 8 NUMA 6 NUMA 4 NUMA 2 NUMA 1 NUMA
1 0.7 未测试 2.2 2.6 2.2
10 3.2 未测试 10.1 7.2 未测试
20 3.4 7.8 未测试 未测试 未测试

同样测试场景在 10 并发 情况下,TiFlash 组件分别绑定不同 NUMA Node,可以看出当 每个 TiFlash 绑定 4 个 NUMA 时可以获得最佳性能 TPS 10.1/秒,而在 8 个 NUMA 时性能最差为 TPS 3.2/秒 。在 20 并发 时, 绑定 6 个 NUMA 也比绑定 8 个 NUMA 要快 2 倍以上

从以上测试结果可以看出,NUMA 的绑核对于性能有着非常大的影响。在并发较低时,绑定较少的NUMA将获得更佳的性能,在上述案例中,单并发百万表关联聚合场景在 2个 NUMA 时可以获得最佳性能,这比不绑定 NUMA 或绑定所有 NUMA 性能高出 3 倍。在并发较高时,多绑定几个 NUMA 性价比更高,上述案例在 10 并发百万表关联聚合场景时 4个 NUMA 性能最佳,但不绑定 NUMA 性能仍然是最差的。

TiFlash 并不是越多性能越好

每台服务器有4块 SSD 磁盘,起初每台上面部署 2 个 TiFlash,每个 TiFlash 使用 2 块磁盘,在10并发百万级表关联聚合场景下 TPS 大约在 9.5~10 之间。 而当把每个节点调整为 1 个 TiFlash 使用 4 块磁盘时,性能可以稳定在 10~10.5 之间 当把 3 个 TiFlash 缩容到 2 个 TiFlash 时,性能又进一步提升,TPS 可以接近到 12/秒

以上测试结果,说明 TiFlash 并不是越多越好。从原理上,越多的 TiFlash 会造成更多的数据 shuffle 交互,这可能是 TiFlash 多反而不如 TiFlash 少性能好的原因。

TiFlash 个数 平均TPS
6 9.8
3 10.3
2 11.8

Scatter 打散后可能有意外收获

TiDB 在 PD 管控的调度机制下,基本可以保证每个节点的 Region 数和 Leader 数是均衡的,然而,对于单张表而言,却没有很好的机制可以保证 Region 在任何时刻都能均衡分布在每个 TiKV 节点上。

TiDB 提供了一个 scatter 功能,允许对单张表进行均衡打散。在测试中我们发现,scatter 打散对性能的提升非常明显。以一个 TP 类的测试场景为例, 未 scatter 前的平均 TPS 约为 4千/秒,在 scatter 之后平均 TPS 可以达到 6千/秒。

平均TPS
Scatter 前 4000
Scatter 后 6000

总结

本篇幅简单整理了 TiDB 性能测试中的几个优化点,包括 NUMA 绑核、TiFlash 个数变化以及 Scatter 对性能的影响,这些优化手段比复杂的参数优化更简单直观,获得的收益可能也会更大,可以作为性能优化和性能测试中常用的手段。NUMA 绑核主要适用于NUMA较多的服务器,TiFlash 适用于使用 TiFlash 做AP分析类场景测试,Scatter 针对的是 TiKV 中的 region 因此主要用于偏 TP 类场景的测试。


http://www.kler.cn/a/326138.html

相关文章:

  • Essential Cell Biology--Fifth Edition--Chapter one (8)
  • 现代密码学|公钥密码体制 | RSA加密算法及其数学基础
  • 【Node.js】使用 Node.js 需要了解多少 JavaScript?
  • AntFlow:一款高效灵活的开源工作流引擎
  • 排序算法(基础)大全
  • Android CALL按键同步切换通话界面上免提和听筒的图标显示
  • Leetcode热题100-438 找出字符串中所有字母异位数
  • R语言非参数回归预测摩托车事故、收入数据:局部回归、核回归、LOESS可视化...
  • 408算法题leetcode--第19天
  • java通过webhook给飞书发送群消息
  • PTA L1-080 乘法口诀数列
  • C语言线程编程深度解析
  • Elasticsearch UNASSIGNED 怎么修复
  • OJ在线评测系统 后端 用策略模式优化判题机架构
  • MySQL基础篇 - 约束
  • Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法
  • Altium Designer脚本的执行方式
  • 【漏洞复现】VEXUS多语言货币交易所存在未授权访问漏洞
  • centos已安装python3.7环境,还行单独安装python3.10环境,如何安装,具体步骤
  • 进程、线程、协程详解:并发编程的三大武器
  • websocket初识
  • 数据集-目标检测系列-兔子检测数据集 rabbit >> DataBall
  • 中国资产“超级星期四”之后,腰部中概股或成增长“黑马”
  • Linux云计算 |【第四阶段】PROJECT2-DAY1
  • 如何使用开发者工具捕获鼠标右键点击事件
  • Tensorflow2.0