7
6
3
2
专栏/.../

别再猜了!用数据揭穿平凯数据库(TiDB 企业版)敏捷模式和MySQL的性能对比真相!

 Root先锋  发表于  2025-08-27

TiDB企业版(平凯数据库)敏捷模式性能测试

1.测试目标

对平凯数据库(PingCAP TiDB)与MySQL数据库进行对比测试,重点评估两款数据库在企业级应用场景下的综合表现。测试涵盖OLTP/OLAP性能、数据压缩比、易用性、可扩展性和可靠性等关键指标。

2.测试范围

  • 数据库版本:TiDB企业版(平凯数据库) v7.1.8-5.2 vs MySQL 8.0.41
  • 测试数据量:约50GB
  • 测试模型:Sysbench OLTP、TPC-H OLAP、Sysbench测试数据压缩比

3. 测试环境配置

3.1 硬件环境

组件 配置规格
CPU Intel Xeon E5-2640V4 2.4GHz (2颗)
内存 96GB
存储 SAS 1TB (10K)
网络 1Gb

3.2 软件环境

项目 TEM(v3.1.0) TiDB集群 MySQL
虚拟机 VMworkstation 16 VMworkstation 16 VMworkstation 16
虚拟CPU 2颗2核(4C) 2颗2核(4C) 2颗2核(4C)
虚拟内存 16GB 16GB 16GB
虚拟硬盘 200GB 200GB 200GB
操作系统 Rocky Linux 8.9 Rocky Linux 8.9 Rocky Linux 8.9
TiDB版本 v7.1.8-5.2 -
MySQL版本 - v8.0.41
集群配置 1 PingkaiDB Fusion、1 TiFlash 1 Prometheus、1 Grafana、1 AlertManager 单机(InnoDB存储引擎)
IP地址 192.168.18.180 192.168.18.181 192.168.18.182
  • 说明:TEM、TiDB集群(伪集群,所有组件均部署在同一节点上) 、MySQL均为 单节点

4. 环境部署

4.1 TEM部署

(1)下载TEM安装包,并将安装包上传至服务器192.168.18.180

(2)解压安装包

tar xvf tem-amd64.tar.gz
cd tem-package-v3.0.0-linux-amd64

(3)修改元数据库文件

# 修改文件名,TEM安装包解压后的文件为metadb_topology_template.yaml
mv metadb_topology_template.yaml metadb_topology.yaml

# 修改配置文件中的IP,更换为TEM主机的IP
vi metadb_topology.yaml

pd_servers:
  - host: 192.168.18.180     # 更换成部署 TEM 的主机 IP
  
tidb_servers:
  - host: 192.168.18.180     # 同上
    port: 4000

tikv_servers:
  - host: 192.168.18.180     # 同上

image.png

(4)修改TEM配置文件

# 修改安装包中默认的配置文件config.yaml
vi config.yaml

server_configs: # 这⾥指定 tem 节点的全局配置
  tem_servers:
    db_addresses: "192.168.18.180:4000" # 填写上面metadb配置文件中的IP
    db_u: "root"                   # 若由 tem 辅助创建的元数据库,请使⽤ root ⽤户
    db_pwd: ""                     # 若由 tem 辅助创建的元数据库,请使⽤空密码
    db_name: "test"                # 若由 tem 辅助创建的元数据库,请使⽤ test 数据库
    log_filename: "/tem-deploy/tem-server-8080/log/tem.log"
    log_tem_level: "info"
    log_max_size: 300
    log_max_days: 0
    log_max_backups: 0
    external_tls_cert: ""         # tem 对外使用的tls证书
    external_tls_key: ""          # tem 对外使用的tls密钥
    internal_tls_ca_cert: ""      # tem 内部节点间双向验证使用的tls证书
    internal_tls_cert: ""         # tem 内部节点间双向验证使用的tls证书
    internal_tls_key: ""          # tem 内部节点间双向验证使用的tls证书

tem_servers:
   - host: "192.168.18.180"                # 请填写 tem 节点的实际地址
     port: 8080
     mirror_repo: true            # 是否开启镜像仓库,多个TEM节点时,有且仅有一个节点开启

image.png

(5)开始安装

# 开始安装
./install.sh
  • 执行脚本后,约1分钟即可完成TEM安装

image.png

  • 访问TEM
# 访问TEM,http://<TEM 部署ip地址>:<port>/login
http://192.168.18.180:8080

# TEM 默认⽤户名为 admin, 默认密码为 admin

image.png

4.2 用TEM部署TiDB集群(平凯数据库敏捷模式)

4.2.1 添加组件

TEM设置--组件管理--添加组件,上传平凯数据库敏捷模式安装包。

  • tidb-ee-server-v7.1.8-5.2-20250630-linux-arm64.tar.gz tidb服务整合包
  • tidb-ee-toolkit-v7.1.8-5.2-20250630-linux-arm64.tar.gz 相关工具整合包

image.png

4.2.2 添加凭证

TEM设置--凭证--添加凭证,输入拟部署TiDB集群的服务器(192.168.18.181)root用户和密码。

image.png

4.2.3 配置中控机

TEM主机--集群管理中控机--添加中控机

  • IP 地址:192.168.18.181
  • 名称:自定义
  • SSH 端口:中控机 SSH 端口,默认 22
  • 服务端口:中控机被控后提供服务的端口,默认 9090
  • 凭证:上一个步骤中添加的 SSH 登录凭证
  • 服务根目录:中控机被控后提供服务进程的安装目录,可设为 /root/tidb-cm-service
  • 是否自动安装 TiUP:建议安装
  • TiUP 镜像仓库:指定TEM使用的组件来源,仓库类型选TEM镜像仓库在“设置 -> 组件管理 -> 设置仓库地址”可以拿到仓库地址

image.png

4.2.4 配置集群主机

TEM主机--主机--添加共享主机,此时添加的主机为部署TiDB集群的主机

image.png

  • 测试环境中,中控机和TiDB集群为同一台主机

image.png

4.2.5 创建集群

TEM集群--创建集群。

  • 设置集群名称
  • 选择集群中控机

image.png

  • 选择集群版本:平凯v7.1.8-5.2,敏捷模式
  • 选择部署模式:共享,并设置主机规格

image.png

  • 选择要安装的组件:PingKaiDB-1个、TiFlash-1个、Prometheus-1个、Grafana-1个、AlertManager-1个

image.png

image.png

  • 选择默认的集群配置参数,并开始创建集群

image.png

image.png

  • 约10分钟,集群创建完成

image.png

4.2.6 优化集群参数

通过TEM登录tidb集群,在SQL编辑器,输入并执行SQL语句。

image.png

# 调整集群参数
set global tidb_runtime_filter_mode=LOCAL;
set global tidb_opt_enable_mpp_shared_cte_execution=on;
set global tidb_rc_read_check_ts=on;
set global tidb_analyze_skip_column_types="json,blob,mediumblob,longblob,mediumtext,longtext";
set global tidb_enable_collect_execution_info=off;
set global tidb_enable_instance_plan_cache=on;
set global tidb_instance_plan_cache_max_size=2GiB;
set global tidbx_enable_tikv_local_call=on;
set global tidbx_enable_pd_local_call=on;
set global tidb_schema_cache_size=0;

-- 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例
set global tidb_enable_slow_log=off;

4.3 MySQL部署

(1)安装MySQL、设定用户

# 添加MySQL仓库
dnf install https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
dnf module disable mysql  # 禁用默认模块
# 安装指定版本MySQL
dnf install mysql-community-server-8.0.41-1.el8
# 启动MySQL
systemctl start mysqld   # 启动MySQL
systemctl enable mysqld  # 设置开机启动
systemctl status mysqld  # 检查状态
# 登录MySQL
mysql -u root -p  #第一次登录时会要求设置密码
# 如没有,可在日志中查找临时密码
grep 'temporary password' /var/log/mysqld.log
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 设置远程登录
CREATE USER 'root'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

(2)优化MySQL参数

# 在/etc/my.cnf.d/mysql-server.cnf配置文件中增加如下参数
[mysqld]
innodb_buffer_pool_size = 12G
innodb_flush_log_at_trx_commit = 0
sync_binlog = 0
local-infile = 1   # 支持本地文件导入

# innodb_buffer_pool_size = 64G  # 建议设为物理内存的70-80%

5. 安装性能测试工具

5.1 安装Sysbench工具

# 安装依赖包
dnf install -y make automake libtool pkgconfig libaio-devel openssl-devel git
# 下载tar.gz安装包
git clone https://github.com/akopytov/sysbench.git
tar xvf sysbench-1.0.20.tar.gx
cd sysbench-1.0.20
./autogen.sh
./configure    # 默认支持MySQL
make
make install
# 确认是否安装成功
sysbench --version

image.png

5.2 安装TPC-H工具

# 下载并上传TPC-H安装包
下载地址:https://www.tpc.org/tpch/
# 安装依赖包
yum install -y gcc make unzip
# 安装、配置TPC-H
unzip TPC-H-Tool.zip
mv 'TPC-H V3.0.1' tpc-h
cd tpc-h/dbgen
cp makefile.suite makefile
# 修改makefile配置参数
vi makefile
CC      = gcc
DATABASE = MYSQL   # 或INFORMIX(兼容模式)
MACHINE  = LINUX
WORKLOAD = TPCH

# 修改config.h文件,在文件开头添加如下内容
vi config.h

----支持64位
#ifndef DSS_HUGE
#define DSS_HUGE long long
#endif

#ifndef HUGE_FORMAT
#define HUGE_FORMAT "%lld"
#endif

#define SUPPORT_64BIT 1

#ifndef RNG_A
#define RNG_A 1103515245LL
#endif

#ifndef RNG_C
#define RNG_C 12345LL
#endif

#ifndef SET_ROWCOUNT
#define SET_ROWCOUNT "LIMIT %d"  // MySQL用LIMIT限制行数
#endif

----和mysql数据库相关
#ifndef START_TRAN
#define START_TRAN "START TRANSACTION"
#endif

#ifndef END_TRAN
#define END_TRAN "COMMIT"
#endif

#ifndef SET_DBASE
#define SET_DBASE "USE %s"
#endif

#ifndef SET_OUTPUT
#define SET_OUTPUT "SELECT INTO OUTFILE"
#endif

#ifndef GEN_QUERY_PLAN
#define GEN_QUERY_PLAN "EXPLAIN"
#endif

-----行数
#ifndef SET_ROWCOUNT
#define SET_ROWCOUNT "LIMIT %d"
#endif
-----日期
#ifndef HUGE_DATE_FORMAT
#define HUGE_DATE_FORMAT "%02lld"
#endif

# 编译
make

image.png

  • 将此工具安装在MySQL服务器(192.168.18.182),通过其MySQL客户端,可以远程登录TiDB服务器,进行相关操作
  • 编译完成后,即可使用dbgen生成测试数据

6. 性能测试

6.1 OLTP性能测试

6.1.1 MySQL性能测试

(1)生成测试数据

测试数据量可以根据大家的机器配置自行修改,建议测试数据量为 50 GB-1 TB

# 创建test数据库
mysql -u root -p 
create database test;
# 生成测试数据
sysbench oltp_read_write \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=root \
  --mysql-password=Root#1234 \
  --mysql-db=test \
  --tables=5 \
  --table-size=25000000 \
  --db-driver=mysql \
  prepare
  
# --tables=5  #生成5张表
# --table-size=25000000  #单表2500万行数据
# 数据约52G,执行时间约40分钟

image.png

image.png

(2)执行测试

sysbench oltp_read_write \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=root \
  --mysql-password=Root#1234 \
  --mysql-db=test \
  --tables=5 \
  --table-size=25000000 \
  --threads=128 \
  --time=600 \
  --report-interval=10 \
  --db-driver=mysql \
  run > mysql-result.log
  
#  --threads=128 \             # 根据需求调整线程数
#  --time=600 \                # 测试时长(秒)
#  --report-interval=10 \      # 每10秒报告一次

# mysql-result.log  生成执行结果的日志

(3)查看测试结果

# 查看执行结果
more mysql-result.log | grep "transactions:"
more mysql-result.log | grep "avg:"
more mysql-result.log | grep "95th percentile:"

# grep "transactions:"      # TPS  
# grep "avg:"               # 平均延迟  
# grep "95th percentile:"   # P95延迟  

image.png

6.1.2 TiDB性能测试

(1)生成测试数据

# 创建远程登录账号
create user 'tidb'@'%' IDENTIFIED WITH mysql_native_password BY 'Root#1234';
grant all privileges on *.* to 'tidb'@'%';
flush privileges;
# 远程登录TiDB数据库
mysql -h 192.168.18.181 -u tidb -P 4000 -p 
# 创建数据库
create database titest;
# 生成测试数据
sysbench oltp_read_write \
  --mysql-host=192.168.18.181 \
  --mysql-port=4000 \
  --mysql-user=tidb \
  --mysql-password=Root#1234 \
  --mysql-db=titest \
  --tables=5 \
  --table-size=25000000 \
  --db-driver=mysql \
  --mysql-ignore-errors=all \
  --create_secondary=off \
  --auto-inc=on \
  prepare

image.png

(2)执行测试

sysbench oltp_read_write \
  --mysql-host=192.168.18.181 \
  --mysql-port=4000 \
  --mysql-user=tidb \
  --mysql-password=Root#1234 \
  --mysql-db=titest \
  --tables=5 \
  --table-size=25000000 \
  --threads=128 \
  --time=600 \
  --report-interval=10 \
  --db-driver=mysql \
  run > tidb-result.log

(3)查看测试结果

# 查看执行结果
more tidb-result.log | grep "transactions:"
more tidb-result.log | grep "avg:"
more tidb-result.log | grep "95th percentile:"

image.png

6.2 OLAP性能测试

6.2.1 MySQL性能测试

(1)生成测试数据

# 通过TPC-H生成测试数据
./dbgen -s 10 -f

# 会自动生成8个.tbl文件(lineitem, orders, part等)
# -s 10 表示生成约10GB原始文本数据

# 检查生成的tbl文件
ls -lh *.tbl

image.png

(2)将tbl数据导入数据库

1)在MySQL中创建数据库和表

# 创建数据库
mysql -u root -p
create database tpch;

# 修改TPC工具中的dss.ddl文件
vi /root/tpc-h/dbgen/dss.ddl
# 在文件开头,加入如下语句
drop database tpch;
create database tpch;
use tpch;

# 在mysql中建表
mysql -u root -p
# 在mysql命令行,执行如下命令,即可创建8张表
\. /root/tpc-h/dbgen/dss.ddl

image.png

2)创建数据导入文件load.ddl

# 在tpc-h工具的安装目录
vi load.ddl
use tpch
load data local INFILE '/data/tbl/customer.tbl' INTO TABLE CUSTOMER FIELDS TERMINATED BY '|';
load data local INFILE '/data/tbl/region.tbl' INTO TABLE REGION FIELDS TERMINATED BY '|';
load data local INFILE '/data/tbl/nation.tbl' INTO TABLE NATION FIELDS TERMINATED BY '|';
load data local INFILE '/data/tbl/supplier.tbl' INTO TABLE SUPPLIER FIELDS TERMINATED BY '|';
load data local INFILE '/data/tbl/part.tbl' INTO TABLE PART FIELDS TERMINATED BY '|';
load data local INFILE '/data/tbl/partsupp.tbl' INTO TABLE PARTSUPP FIELDS TERMINATED BY '|';
load data local INFILE '/data/tbl/orders.tbl' INTO TABLE ORDERS FIELDS TERMINATED BY '|';
load data local INFILE '/data/tbl/lineitem.tbl' INTO TABLE LINEITEM FIELDS TERMINATED BY '|';

3)导入数据

# 导入数据
mysql -u root -p
\. /root/tpc-h/dbgen/load.ddl

# 也可以执行下面的语句
source /root/tpc-h/dbgen/load.ddl

image.png

4)创建索引

# 修改dss.ri文件
-- Sccsid:     @(#)dss.ri	2.1.8.1
-- tpch Benchmark Version 8.0

-- CONNECT TO tpch;

use tpch;

-- ALTER TABLE tpch.REGION DROP PRIMARY KEY;
-- ALTER TABLE tpch.NATION DROP PRIMARY KEY;
-- ALTER TABLE tpch.PART DROP PRIMARY KEY;
-- ALTER TABLE tpch.SUPPLIER DROP PRIMARY KEY;
-- ALTER TABLE tpch.PARTSUPP DROP PRIMARY KEY;
-- ALTER TABLE tpch.ORDERS DROP PRIMARY KEY;
-- ALTER TABLE tpch.LINEITEM DROP PRIMARY KEY;
-- ALTER TABLE tpch.CUSTOMER DROP PRIMARY KEY;


-- For table REGION
ALTER TABLE tpch.REGION
ADD PRIMARY KEY (R_REGIONKEY);

-- For table NATION
ALTER TABLE tpch.NATION
ADD PRIMARY KEY (N_NATIONKEY);

ALTER TABLE tpch.NATION
-- ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references tpch.REGION;
ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references tpch.REGION(R_REGIONKEY);


COMMIT WORK;

-- For table PART
ALTER TABLE tpch.PART
ADD PRIMARY KEY (P_PARTKEY);

COMMIT WORK;

-- For table SUPPLIER
ALTER TABLE tpch.SUPPLIER
ADD PRIMARY KEY (S_SUPPKEY);

ALTER TABLE tpch.SUPPLIER
ADD FOREIGN KEY SUPPLIER_FK1 (S_NATIONKEY) references tpch.NATION(N_NATIONKEY);

COMMIT WORK;

-- For table PARTSUPP
ALTER TABLE tpch.PARTSUPP
ADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY);

COMMIT WORK;

-- For table CUSTOMER
ALTER TABLE tpch.CUSTOMER
ADD PRIMARY KEY (C_CUSTKEY);

ALTER TABLE tpch.CUSTOMER
ADD FOREIGN KEY CUSTOMER_FK1 (C_NATIONKEY) references tpch.NATION(N_NATIONKEY);

COMMIT WORK;

-- For table LINEITEM
ALTER TABLE tpch.LINEITEM
ADD PRIMARY KEY (L_ORDERKEY,L_LINENUMBER);

COMMIT WORK;

-- For table ORDERS
ALTER TABLE tpch.ORDERS
ADD PRIMARY KEY (O_ORDERKEY);

COMMIT WORK;

-- For table PARTSUPP
ALTER TABLE tpch.PARTSUPP
ADD FOREIGN KEY PARTSUPP_FK1 (PS_SUPPKEY) references tpch.SUPPLIER(S_SUPPKEY);

COMMIT WORK;

ALTER TABLE tpch.PARTSUPP
ADD FOREIGN KEY PARTSUPP_FK2 (PS_PARTKEY) references tpch.PART(P_PARTKEY);

COMMIT WORK;

-- For table ORDERS
ALTER TABLE tpch.ORDERS
ADD FOREIGN KEY ORDERS_FK1 (O_CUSTKEY) references tpch.CUSTOMER(C_CUSTKEY);

COMMIT WORK;

-- For table LINEITEM
ALTER TABLE tpch.LINEITEM
ADD FOREIGN KEY LINEITEM_FK1 (L_ORDERKEY)  references tpch.ORDERS(O_ORDERKEY);

COMMIT WORK;

ALTER TABLE tpch.LINEITEM
ADD FOREIGN KEY LINEITEM_FK2 (L_PARTKEY,L_SUPPKEY) references 
        tpch.PARTSUPP(PS_PARTKEY,PS_SUPPKEY);

alter table CUSTOMER	rename to customer ;
alter table LINEITEM	rename to lineitem ;
alter table NATION	rename to nation   ;
alter table ORDERS	rename to orders   ;
alter table PART	rename to part     ;
alter table PARTSUPP	rename to partsupp ;
alter table REGION	rename to region   ;
alter table SUPPLIER	rename to supplier ;

COMMIT WORK;

# 创建索引
\. /root/tpc-h/dbgen/dss.ri

image.png

5)查看生成的索引

# 查看当前数据库所有表的索引
SELECT 
    table_name AS 表名,
    index_name AS 索引名,
    column_name AS 索引列,
    non_unique AS 是否非唯一,
    index_type AS 索引类型
FROM 
    information_schema.statistics
WHERE 
    table_schema = DATABASE()  -- 当前数据库
ORDER BY 
    table_name, index_name, seq_in_index;

image.png

6)生成查询语句

# 将/tpc-h/dbgen/queries目录中的查询模板文件拷贝至dbgen目录下
cp -r ./queries/* ./

# 使用qgen生成22条SQL查询语句
cd /root/tpc-h/dbgen
# 在dbgen目录下新建query.sh文件
vi query.sh
for i in {1..22}; do /root/tpc-h/dbgen/qgen $i > /root/tpc-h/dbgen/query$i.sql; done
chmod +x query.sh
./query.sh
ls -al *.sql

image.png

7)修改查询语句

# 修改SQL查询语句
# TPC-H查询模板包含limit -1,在MySQL中会报错,需要批量移除

# 将所有 limit -1 替换为 limit 1
sed -i '$s/limit -1/limit 1/' query*.sql

# 去掉脚本中的 date 函数
sed -i 's/ date / /g' query*.sql

# 在个 SQL 文件的第一行 添加 use tpch; 语句
sed -i '1a use tpch; \n' *.sql

# 修改query1.sql文件
# 需要 将 where 条件的内容修改 
# where 
# 	l_shipdate <= date '1998-12-01' - interval '90' day (3) 

# 修改为 如下 
where 
	l_shipdate <= '1998-12-01' - interval '90' day

8)执行查询测试

# 默认表名为大写,在SQL查询语句中为小写,修改表名
ALTER TABLE `CUSTOMER` RENAME TO `customer`;
ALTER TABLE `REGION` RENAME TO `region`;
ALTER TABLE `NATION` RENAME TO `nation`;
ALTER TABLE `SUPPLIER` RENAME TO `supplier`;
ALTER TABLE `PART` RENAME TO `part`;
ALTER TABLE `PARTSUPP` RENAME TO `partsupp`;
ALTER TABLE `ORDERS` RENAME TO `orders`;
ALTER TABLE `LINEITEM` RENAME TO `lineitem`;

# 执行查询语句,并记录执行时间
source /root/tpc-h/dbgen/query8.sql
source /root/tpc-h/dbgen/query10.sql
source /root/tpc-h/dbgen/query13.sql

image.png

9)统计执行时间

查询类型 MySQL执行时间(s)
Query6 1054.24
Query12 56.53
Query13 77
Query14 34.56
Query16 292.16
Query19 69.01

6.2.2 TiDB性能测试

1)创建数据库和表

测试数据量可以根据大家的机器配置自行修改,建议测试数据量为 50 GB-1 TB

# 创建数据库
mysql -u tidb -p -P 4000 -h 192.168.18.181
create database tpch;
use tpch;
# 创建表
source /root/tpc-h/dbgen/dss.ddl

2)导入数据

  • 通过tiup-lightning导入数据量的表
# 安装 tiup-lightning
tar -xvf tidb-ee-toolkit-v7.1.8-5.2-20250630-linux-arm64.tar.gz
cd tidb-ee-toolkit-v7.1.8-5.2-20250630-linux-arm64
tar -xvf tidb-lightning-v7.1.8-5.2-20250630-linux-amd64.tar.gz
tiup install tidb-lightning:v7.1.8

# 从mysql数据库中导出lineitem表为CSV
use tpch;
SELECT * INTO OUTFILE '/var/lib/mysql-files/lineitem.csv'
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM lineitem;

# 通过tiup-lightning导入数据
# CSV命名规范:tpch.LINEITEM.csv,会自动按tpch数据库LINEITEM表名导入
vi tidb-lightning.toml

[lightning]
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
backend = "local"
# 设置一个容量很大的临时目录路径
sorted-kv-dir = "/home/kv"

[mydumper]
# 指定你的 CSV 文件所在的路径
data-source-dir = "/home"

[mydumper.csv]
separator = ','
delimiter = '"'
header = false                    # 如果 CSV 第一行是列名,改为 true
not-null = false

[tidb]
host = "192.168.18.181"
port = 4000
user = "tidb"
password = "Root#1234"
status-port = 10080
pd-addr = "192.168.18.181:2379"

# 导入数据
tiup tidb-lightning -config /home/tidb-lightning.toml

image.png

3)执行查询测试

使用MySQL测试时,生成的query1-22.sql查询语句测试即可。

# 在测试tidb时,没有生成索引
# 表名大小写也没有修改
source /root/tpc-h/dbgen/query8.sql
source /root/tpc-h/dbgen/query10.sql
source /root/tpc-h/dbgen/query13.sql

4)统计执行结果

查询类型 TiDB执行时间(s)
Query6 30.38
Query12 36.03
Query14 31.35
Query16 5.62
Query17 144.76
Query19 42.76
Query20 18.7

7. 性能对比

7.1 OLTP性能对比

指标 TiDB MySQL 对比
Total Transaction Num 96214 3481 快27.6倍
平均延迟 (ms) 798.52 22365.48 低28倍
P95延迟 (ms) 1352 100000 低74倍
配置:均采用128线程,600秒持续压力测试

在测试环境中,TiDB、TIKV等组件均部署在同一节点,数量均为1个,但TiDB表现仍然十分优异。

(1)TPS (每秒事务处理量) 分析

  • TiDB 性能领先 27.6 倍
  • TiDB 的分布式架构允许水平扩展,多个节点可以并行处理事务
  • MySQL 的单机架构受限于单节点处理能力,存在明显瓶颈
  • TiDB 采用多副本和 Region 分片机制,能够高效处理高并发请求
  • MySQL 在高并发下容易出现锁竞争和资源争用
  • TiDB 可以更好地利用多核CPU和分布式存储资源
  • MySQL 在极端负载下可能出现资源利用不均衡

(2)平均延迟分析

  • TiDB 延迟低 28 倍
  • TiDB 的分布式查询优化器能够并行处理查询请求
  • MySQL 的串行处理模式在高负载下导致响应时间急剧增加
  • TiDB 采用分布式内存池管理,减少磁盘I/O等待
  • MySQL 的缓冲池在高压力下可能频繁刷新,增加磁盘I/O

(3)P95 延迟分析

  • TiDB 延迟低 74 倍
  • TiDB 表现出极佳的性能一致性,P95 延迟仅比平均延迟高约70%
  • MySQL 的性能波动极大,P95 延迟是平均延迟的4.5倍
  • TiDB 的分布式调度避免了资源竞争导致的性能波动
  • MySQL 在高并发下容易出现资源竞争,导致某些请求被"饿死"

7.2 OLAP性能对比

查询类型 TiDB执行时间(s) MySQL执行时间(s) 性能提升
Query6 30.38 1054.24 +3370%
Query12 36.03 56.53 +56.9%
Query14 31.35 34.56 +10.2%
Query16 5.62 292.16 +5098%
Query19 42.76 69.01 +61.4%
几何平均 23.15 301.3 +1202%

(1)TiDB 在复杂分析查询中优势明显

  • 尤其在 Query6 和 Query16 上提升超过 3000% 和 5000%。
  • 说明其分布式架构对大数据聚合、多表连接等操作优化显著。

(2)所有查询TiDB均优于MySQL

  • 几何平均性能提升达 12 倍(+1202%),体现其整体在OLAP场景下的高性能。

(3)TiDB 更适合数据密集型分析

  • 尤其是在TPC-H这类强调复杂查询、大数据扫描和聚合的场景中,其并行计算与分布式执行能力发挥出色。
  • 而MySQL 在单机复杂查询上存在瓶颈,尤其是涉及大量数据扫描和聚合时,其执行时间显著高于TiDB。

8. 数据压缩对比

以Sysbench生成的测试数据,在MySQL和TiDB中的存储状况进行对比。

8.1 MySQL数据存储状况

(1)表逻辑大小

# 在 MySQL 中查询表的逻辑大小
SELECT 
    table_name AS '表名',
    round(((data_length + index_length) / 1024 / 1024), 2) AS '大小(MB)',
    round((data_length / 1024 / 1024), 2) AS '数据大小(MB)',
    round((index_length / 1024 / 1024), 2) AS '索引大小(MB)',
    table_rows AS '行数'
FROM information_schema.TABLES 
WHERE table_schema = 'test' AND table_name LIKE 'sbtest%'
ORDER BY table_name;

image.png

  • 逻辑大小:25221MB ÷ 1024 ≈ 24.63GB

(2)表占用物理磁盘大小

# 在 MySQL 中执行以下命令查找数据目录
SHOW VARIABLES LIKE 'datadir';

# 进入 MySQL 数据目录
cd /var/lib/mysql  

# 查看测试数据库目录大小
du -sh test/

# 查看单个表文件大小
ls -lh test/sbtest*.ibd

# 计算所有测试表的总大小
du -ch test/sbtest*.ibd | grep total

image.png

  • 表占用物理磁盘大小:29G

8.2 TiDB 数据存储状况

Step 1:先压缩:手动 compact 或等待自动 compact 的完成

https://docs.pingcap.com/zh/tidb/stable/tikv-control/#手动-compact-单个-tikv-的数据

Step 2:再查看

(1)表逻辑大小

# 方法1:查看 TiKV 中测试表的逻辑大小
SELECT SUM(data_length + index_length) AS total_logical_size
FROM information_schema.TABLES
WHERE table_schema = 'titest' AND table_name IN ('sbtest1', 'sbtest2', 'sbtest3', 'sbtest4', 'sbtest5')

# 方法2:
SELECT 
    table_name, 
    DATA_LENGTH, 
    INDEX_LENGTH, 
    (DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024 AS total_size_GB 
FROM information_schema.TABLES 
WHERE table_schema = 'titest';

image.png

  • 逻辑大小:2225334904 ÷ 1073741824 ≈ 2.07G

(2)表占用物理磁盘大小

  • 通过TEM-参数查询,组件选择TiKV,字段data-dir查询TiKV具体的存储路径

image.png

  • 登录tikv主机,查看目录大小
# 登录tikv主机,查看数据目录大小
du -sh /tidb1/tidb-data/tikv-20160/db

image.png

物理磁盘占用大小:13 GB

8.3 数据存储状况对比

数据大小 TiDB MySQL 压缩对比
表逻辑大小 2.07GB 24.63GB 低10.90倍
占用物理磁盘大小 13GB 29GB 低1.23倍

(1)极高的逻辑数据压缩率

  • TiDB 的逻辑数据大小仅为 MySQL 的 1/10.9
  • 说明其存储引擎(TiKV)采用了更高效的数据编码和压缩算法(如列式存储格式、字典编码、前缀压缩等),极大减少了冗余数据存储。

(2)物理磁盘占用也更优

  • 尽管物理磁盘大小差距不如逻辑大小显著,但 TiDB 仍比 MySQL 节省 ~55% 的磁盘空间(13GB vs 29GB)。

  • 智能压缩机制:TiKV 默认使用 Snappy 或 ZSTD 压缩数据块。
  • 数据分层存储:支持冷热数据分离,进一步优化存储成本。

(3)架构存储优势

  • 分布式存储引擎(TiKV):以 Region 为单位管理数据,支持自动压缩和垃圾回收(GC),减少碎片。

9. TEM易用性

TEM(TiDB Enterprise Manager)是平凯星辰推出的企业级一站式数据库管理平台,专为简化 TiDB 的运维管理、提升开发效率而设计。

9.1 核心功能

(1)集中化监控与告警

  • 集群状态监控:提供全景式仪表盘,实时可视化展示集群健康状况、性能指标(如 QPS、延迟、吞吐量)、资源使用率(CPU、内存、磁盘、IO)。
  • 拓扑可视化:直观展示集群内所有组件(TiDB、TiKV、PD、TiFlash)的物理部署和状态,快速定位故障节点。

image.png(2)智能运维与管理

  • 集群扩缩容:提供图形化一键扩缩容功能,可轻松增加或减少计算(TiDB)或存储(TiKV、TiFlash)节点,极大简化了分布式集群的容量调整操作。

image.png

  • SQL 语句诊断:集成 SQL 诊断功能,可快速分析慢查询、定位性能瓶颈、提供优化建议,甚至支持一键抓取并可视化执行计划。

image.png

  • 数据闪回:基于 TiDB 的垃圾回收(GC)机制,提供数据闪回(Flashback) 功能,可快速恢复因误操作(如 DROP TABLE, DELETE)而丢失的数据,极大降低数据恢复的复杂度和风险。

image.png

  • 数据备份与恢复:支持全量备份、增量备份,提供图形化界面配置备份策略和点时间点恢复(PITR),保障数据安全性和业务连续性。

image.png

  • 集群巡检:可定期或手动对集群进行健康巡检,自动检查配置合规性、版本兼容性、性能风险等,并生成巡检报告,帮助预防潜在问题。

image.png

9.2 易用性总结

(1)开箱即用

  • 部署简单,与 TiDB 集群无缝集成,无需复杂配置

(2)图形化操作

  • 将复杂的命令行操作转化为直观的图形界面点击操作(如扩缩容、备份设置等)
  • 大幅降低运维门槛,使 DBA 和开发者都能高效管理数据库

(3)统一管理入口

  • 提供了集监控、告警、运维、诊断、安全于一体的中心化管理平台
  • 避免了在不同工具间切换的麻烦,提升了运维效率

(4)自动化与智能化

  • 通过智能诊断(如 SQL 分析、巡检),减少重复性手工劳动,使运维工作更高效、更可靠

平凯星辰 TEM 的核心价值在于 “化繁为简” 。通过统一的图形化平台,将 TiDB 分布式数据库复杂的运维管理工作变得可视化、自动化、智能化,显著降低了企业用户的运维成本和技术门槛,同时通过数据闪回、备份恢复等重要功能增强了数据安全性和业务稳定性,是构建和运营 TiDB 企业级应用不可或缺的运维利器。

10. 总结

(1)极高的吞吐能力(TPS)

  • TiDB 的 TPS 达到 9.6万/秒,远超 MySQL 的 3481/秒
  • 说明其在高并发事务处理中能有效利用分布式资源,线性扩展能力强

(2)极低的延迟表现

  • 无论是平均延迟还是 P95 延迟,TiDB 都远低于 MySQL
  • 尤其是在高百分位延迟(P95)上优势更为明显(74倍
  • 说明系统响应更稳定,适合对延迟敏感的业务

(3)适用于高并发OLTP场景

  • TiDB 不仅擅长OLAP(如TPC-H),在OLTP场景下也表现优异
  • 真正实现了 HTAP(混合事务/分析处理) 能力

(4)架构优势体现

  • 分布式架构:TiDB 通过分片(Region)和多副本机制,轻松水平扩展,避免了 MySQL 单机瓶颈。
  • 自动负载均衡:PD(Placement Driver)组件智能调度数据分布和访问路由。
  • 强一致性事务:基于 Google Spanner 设计的 MVCC + Percolator 事务模型,保证分布式事务的ACID。
  • 计算存储分离:TiDB(计算层)与 TiKV(存储层)分离,可独立扩展,进一步提升并发处理能力。
  • TiDB 在保持 MySQL 协议兼容的同时,提供了更好的扩展性和稳定性。

TiDB 不仅在分析型查询(OLAP)中表现卓越,在事务处理(OLTP)方面也具备极强的并发处理能力和低延迟特性,是一款真正的HTAP数据库。其分布式架构、线性扩展能力和稳定性使其更适合高并发、大数据量的企业级应用场景。

---------------------------------------------------------------------------------------------------------------------------

  • 因技术水平、认知能力有限,以上测试方法、数据、评论如有不当之处,请大家批评、指正!谢谢!
  • 也欢迎大家私信、留言互动与交流!

7
6
3
2

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论