TiDB和Mariadb的性能比较

【TiDB 使用环境】测试环境
【TiDB 版本】8.5.1
【操作系统】openEuler x86
【部署方式】单机(tidb,pd,tikv都只有1个实例)
【集群数据量】
【集群节点数】
【问题复现路径】
【遇到的问题:问题现象及影响】
在单机场景下,对tidb和mariadb做性能对比测试,发现tidb在绝大多数增删改查操作都比mariadb
差好多,当基础数据量到了大约50万条后,除了批量插入(如单条insert插入1000条记录)和复杂的慢查
询操作性能优于mariadb,其它普通的增删改查操作性能依然很差,
请问这个测试结果是否合理?
【资源配置】128G内存,16核cpu, tidb和mariadb都没有开启特别的优化选项
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

分布式数据库和单机数据库在数据量小的情况下有性能差距很正常,分布式数据库的优势在可扩展性和大数据量下的表现

这个之前也有了解,为什么基础数据量也不算大(50万条)时,tidb的批量插入和复杂慢查询操作依然有优势?可以认为是SQL处理引擎和存储引擎的优化能力弥补了进程间通信开销吗?

这个肯定啊,分布式数据库的网络交互就要比单体数据库要多的多,一个 Raft 三副本,一个多组件 PD、TIKV、TIDB 之间的网络开销

TIKV 底层是 RocksDB,对插入和更新应该友好,对读不太友好,一般单体数据库的引擎都是 B+树,这种数据结构有利于读取,不利于插入。

其实你这么比,没有意义,分布式数据要解决的是你的 SQL 并发和存储,单体满足不了的

要上规模对比才有意义,TiDB的长处本来也不在这些地方

单机场景下确实慢,虽然RocksDB理论上写入更快,但是tidb还有分布式锁开销,以及 raft engine的开销。
不过只要内存大,tidb复杂sql查询明显比mysql快,多表join这种场景

分布式数据库,在单机场景,表现不佳是在预期范围内的。毕竟使用场景本身就是不一样。

有机会欢迎对比 平凯数据库敏捷模式 和 MariaDB

分布式数据库的重点是解决扩展性、高可用性的,只有多节点、大数据量的情况才能发挥优势

小数据量低并发下集中式数据库有优势是正常的

是的,不过现在TiDB的敏捷模式也表现不错。

TiDB 和 MariaDB 的性能比较可以从以下几个方面来看:

  1. 架构与扩展性

    • TiDB :原生分布式架构,计算层(TiDB Server)与存储层(TiKV Sever)分离,支持弹性水平扩展,可通过增加节点实现 PB 级数据处理能力,一键扩容无需停机,能均匀分散数据,避免 B+ 树(B+tree)高度过高影响性能。而 MariaDB 是单机架构,计算与存储耦合,依赖分库分表扩展,水平扩展需应用层分片,运维复杂,受限于单机存储容量 2 - 4 TB 级别,缺少水平扩展能力。
    • 对比 :TiDB 在处理大规模数据和高并发场景时,能通过扩展节点线性提升性能,而 MariaDB 单机架构在数据量增大时容易出现性能瓶颈。
  2. 高可用性

    • TiDB :基于 Raft 协议的多副本冗余,自动故障转移(秒级恢复),数据零丢失,提供服务器、机柜、数据中心多层级自愈高可用能力,支持一套 TiDB 集群同城两中心和三中心多活金融级容灾架构方案(RPO=0,RTO <30s)。
    • MariaDB :依赖主从复制+工具(如 MHA),主从切换可能丢数据,RTO 分钟级,沿用 MySQL 主从强一致性容灾方案,需要人工参与切换,RPO!=0,RTO 超过分钟级。
    • 对比 :TiDB 在高可用性方面表现更优,能更好地保障业务连续性,减少故障对业务的影响。
  3. 事务处理能力

    • TiDB :支持分布式事务,保证多节点操作的 ACID 特性,基于 Google Spanner 设计的 MVCC + Percolator 事务模型,保证分布式事务的 ACID。
    • MariaDB :事务处理能力局限于单机,无法满足分布式场景需求,受限于集中式 MySQL 的 OLTP 事务模型处理能力。
    • 对比 :TiDB 在分布式事务处理上更具优势,适合需要跨节点数据一致性的业务场景。
  4. 在线 DDL 能力

    • TiDB :Online DDL 能力更强,业务发布 DDL 时不锁表,支持 DML 并行操作,且可分布式处理,对主从副本无延迟影响,所有 DDL 均是在线,不锁表,亿行大表 DDL 效率更高。
    • MariaDB :部分 DDL 仍然会锁表,如修改精度、字段类型变更,影响业务可用性。
    • 对比 :TiDB 的在线 DDL 能力能减少对业务的影响,提高开发和运维效率。
  5. 复杂 SQL 处理能力

    • TiDB :复杂 SQL 处理能力显著优于 MariaDB,可将过滤计算下推到 TiKV 节点并行执行,提高处理速度,使用 TiFlash 时,性能进一步提升,在复杂分析查询中优势明显,尤其在 Query6 和 Query16 上提升超过 3000% 和 5000%。
    • MariaDB :复杂 SQL 处理能力较弱,在涉及大量数据扫描和聚合时,执行时间显著高于 TiDB,单机复杂查询存在瓶颈。
    • 对比 :TiDB 在复杂 SQL 处理上表现更优,适合需要进行复杂数据分析和查询的业务场景。
  6. 写入性能

    • TiDB :数据量在千万级以上时,写入性能更优,顺序写,写入性能高,通过 compact 机制解决读放大问题,MySQL(MariaDB 与 MySQL 架构相似)千万行级别开始出现随机 IO 问题,随着表数据增长,写入效率急剧下降。
    • MariaDB :数据量在百万级以下时,写入性能可能优于 TiDB,但随着数据量增加,性能优势逐渐减弱。
    • 对比 :在大规模数据写入场景下,TiDB 能更好地保持性能稳定,而 MariaDB 在数据量增大时写入性能可能下降。
  7. 读取性能

    • TiDB :在高并发、大数据量场景下,分布式架构使其读取性能更具优势,能通过多个节点并行处理读取请求,提升响应速度。
    • MariaDB :在低并发、小数据量场景下,读取性能可能更优,架构相对简单,查询路径短,延迟低,但在高并发场景下,性能受单机并发限制,读写请求不能做到均衡打散。
    • 对比 :TiDB 在高并发读取场景下性能更优,而 MariaDB 在简单查询和小数据量场景下有一定优势。
  8. 存储成本

    • TiDB :逻辑数据压缩比 MySQL(MariaDB 与 MySQL 存储压缩机制相似)低 10.9 倍,物理磁盘占用省 55%,还支持冷热数据分离,降低存储成本。
    • MariaDB :存储压缩比相对较低,在存储大规模数据时可能需要更多磁盘空间。
    • 对比 :TiDB 在存储成本方面更具优势,适合对存储成本敏感的业务场景。

综上所述,TiDB 在分布式架构、高可用性、事务处理、复杂 SQL 处理、扩展性等方面表现优于 MariaDB,尤其适合处理大规模数据、高并发场景和复杂分析查询。而 MariaDB 在低并发、小数据量场景下,以及对单机简单事务处理有一定优势,且与 MySQL 兼容性高,适合对 MySQL 生态依赖较强的业务。

1 个赞

我也推荐可以用敏捷模式测一测:【平凯数据库敏捷模式下载试用】轻量化部署,开启您的分布式数据库之旅

单机的用 TiDB 社区版测不出好的结果的

1 个赞

适用场景不一样,没啥可比的

复杂查询我做过对比,单实例资源相同的情况下(tidb是多节点),tidb的耗时大约可以做到mysql的10%左右,tidb优势明显

如果数据量小,就单独的划算,如果复杂还是tidb好

各有各的适用场景,你用的是传统数据业务数据存储查询测试肯定倾向单库咯

确实
但是从管理成本上来说,我个人比较倾向于tidb、ob可以全面取代MySQL