0
0
0
0
专栏/.../

TIDB数据库企业版敏捷部署及和mysql性能对比

 sherq1989  发表于  2025-09-26

一、环境配置

1.敏捷测试目标

完成在tem上安装部署tidb敏捷版本,进行敏捷版本和mysql数据库的各项功能指标测试

2.敏捷测试数据库版本对比

TIDB:v7.1.8

Mysql:v8.0.43

3.虚拟机及软件软件

配置 操作系统 版本 ip地址
TEM 2c4g rockylinux8.9 v3.1.0 192.168.96.60
TIDB 8c16g rockylinux8.9 v7.1.8-5.2 192.168.96.61
mysql 2c2g rockylinux8.9 v8.0.43 192.168.96.62

二、环境部署

1.部署前准备

1)关闭防火墙和selinux

systemctl stop firewalld

systemctl disable firewalld

image.png

临时关闭:setenforce 0

永久关闭:vi /etc/selinux/config 修改SELINUX=disabled

2)配置域名解析连接外网

[root@tem ~]# cat /etc/resolv.conf

nameserver 114.114.114.114

2)安装openssh

yum -y install openssh

image.png

2.安装TEM

1)下载tem安装包,上传到tem虚拟机

2)解压按照包

tar -xvf tem-amd64.tar.gz

image.png

3)修改源数据库文件

cp metadb_topology_template.yaml metadb_topology.yaml

vi metadb_topology.yaml

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/tidb-deploy"
  data_dir: "/tidb-data"
  arch: "amd64"

pd_servers:
  - host: 192.168.96.60

tidb_servers:
  - host: 192.168.96.60
    port: 4000

tikv_servers:
  - host: 192.168.96.60

4)修改tem配置文件

vi config.yaml

global:
  user: "tidb"
  group: "tidb"
  ssh_port: 22
  deploy_dir: "/tem-deploy"
  data_dir: "/tem-data"
  arch: "amd64"
  log_level: "info"
  enable_tls: false

server_configs: #这里指定tem 节点的全局配置
  tem_servers:
    db_addresses: "192.168.96.60:4000"
    db_u: "root"
    db_pwd: ""
    db_name: "test"
    log_filename: "/tem-deploy/tem-server-8080/log/tem.log"
    log_tem_level: "info"
    log_max_size: 300
    log_max_days: 30
    log_max_backups: 0

tem_servers:
  - host:  "192.168.96.60"
    port: 8080
    mirror_repo: true # 是否开启镜像仓库,多个TEM节点时,最多只允许一个节点的开启

5)安装tem

./install.sh

image.png

image.png

5)登录tem 默认用户名密码admin

http://192.168.96.60:8080

image.png

3.tem部署tidb集群(敏捷版本)

1)添加凭证

TEM设置-凭证-主机-添加凭证,输入tidb虚拟机服务器的用户名和密码

image.png

2)上传下载好的敏捷版本安装包,进行组件管理

设置-组件管理-添加组件-选择组件镜像-本地上传

tidb-ee-server-v7.1.8-5.2-20250630-linux-amd64.tar.gz tidb服务整合包

tidb-ee-toolkit-v7.1.8-5.2-20250630-linux-amd64.tar.gz tidb工具整合包

image.png

3)配置中控机

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

IP地址:192.168.60.61

名称:tidb61

ssh端口:22

服务端口:8090

服务根目录:/root/tidb-cm-service

自动安装TIUP

image.png

添加后的界面如下

image.png

4)配置集群主机

主机-主机-添加共享主机

image.png

已成功添加共享主机

image.png

5)创建集群

集群-创建集群

输入集群名称、密码Xq1211@123、选择集群中控机

image.png

tidb版本选择、集群种类敏捷模式、部署模式共享

image.png

选中添加相关组件:pingkaidb-fusion、tiflash、Prometheus、grafana、alertmanager

image.png

参数默认

image.png

集群创建中

image.png

集群安装完成

image.png

4.安装部署mysql

1)解压安装包

image.png

2)初始化mysqld,记录生成的密码

mv mysql-8.0.43-linux-glibc2.28-x86_64 /usr/local/mysql

mkdir -p /usr/local/mysql/{data,log}

groupadd mysql

useradd -g mysql mysql

chown -R mysql.mysql /usr/local/mysql

./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize --lower-case-table-names=1

3)配置文件

[root@mysql bin]#  cat /etc/my.cnf 
[mysqld]
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
lower_case_table_names=1
[mysqld_safe]
log-error=/usr/local/mysql/log/error.log
pid-file=/usr/local/mysql/mysql.pid

4)设置服务器开机启动mysql

cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/rc.d/init.d/mysqld

chkconfig --add mysqld && chkconfig --list mysqld

5)添加快捷方式配置环境变量

ln -s /usr/local/mysql/bin/mysql /usr/bin

配置环境变量 vi /etc/profile

export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib

source /etc/profile

6)服务启动 systemctl start mysqld

7)登录并修改密码

mysql -uroot -p -S /usr/local/mysql/mysql.sock

修改密码

alter user 'root'@'localhost' identified with mysql_native_password by 'xq1211';

flush privileges;

设置远程登录

create user 'root'@'%' identified by 'xq1211';

grant all privileges on . to 'root'@'%' with grant option;

flush privileges;

三、安装性能测试工具

1.安装sysbench工具

1)安装依赖包

yum install -y make automake libtool pkgconfig libaio-devel openssl-devel git

image.png

2)下载和安装sysbench

git clone https://github.com/akopytov/sysbench.git

cd sysbench

./autogen.sh

./configure --with-mysql

make && make install

image.png

2.安装tpc-h

1)下载

官网:http://www.tpc.org/ 有可能无法下载,可自行百度找到对应下载包。

2)配置

unzip TPCH_Tools.zip

cd tpch_2_17_0/dbgen/

cp makefile.suite makefile

vi makefile

CC      = gcc
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, ORACLE, VECTORWISE
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS,
#                                  SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are:  TPCH
DATABASE= MYSQL
MACHINE = LINUX
WORKLOAD = TPCH

vi tpcd.h 末尾增加

#ifdef MYSQL
#define GEN_QUERY_PLAN  ""
#define START_TRAN "START TRANSACTION"
#define END_TRAN   "COMMIT"
#define SET_OUTPUT ""
#define SET_ROWCOUNT "limit %d;\n"
#define SET_DBASE "use %s;\n"
#endif

3)执行make生成dbgen的可执行文件

image.png

4)生成tbl数据文件

./dbgen -s 1 #生成1g数据,存放在8个表中。如果之前尝试过生成数据,先make clean ,然后重新make

四、OLTP性能测试与对比

1.mysql oltp性能测试

1)生成测试数据 大约24分钟,数据量51g

# 创建tidbtest数据库
mysql -u root -p 
create database tidbtest;
# 生成测试数据
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

image.png

image.png

2)执行测试

sysbench oltp_read_write \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=root \
  --mysql-password=xq1211 \
  --mysql-db=tidbtest \
  --tables=5 \
  --table-size=25000000 \
  --threads=64 \
  --time=600 \
  --report-interval=10 \
  --db-driver=mysql \
  run > mysql-result.log

3)测试结果

cat mysql-result.log

image.png

2.tidb oltp性能测试

1)生成测试数据

# 创建远程登录账号 tidb数据库上操作(需要安装mysql客户端连接)
mysql -h 127.0.0.1 -P 4000 -uroot -pXq1211@123
create user 'tidb'@'%' IDENTIFIED WITH mysql_native_password BY 'xq1211';
grant all privileges on *.* to 'tidb'@'%';
flush privileges;
# 远程登录TiDB数据库
mysql -h 192.168.96.61 -u tidb -P 4000 -pxq1211
# 创建数据库
create database tidbtest2;
# 生成测试数据
sysbench oltp_read_write \
  --mysql-host=192.168.96.61 \
  --mysql-port=4000 \
  --mysql-user=tidb \
  --mysql-password=xq1211 \
  --mysql-db=tidbtest2 \
  --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.96.61 \
  --mysql-port=4000 \
  --mysql-user=tidb \
  --mysql-password=xq1211 \
  --mysql-db=tidbtest2 \
  --tables=5 \
  --table-size=25000000 \
  --threads=64 \
  --time=600 \
  --report-interval=10 \
  --db-driver=mysql \
  run > tidb-result.log

3)测试结果

cat tidb-result.log

image.png

3.oltp性能测试对比

指标 tidb mysql 性能对比
total transaction num 110097 77420 快1.4倍
平均延迟ms 348.85 496.31 低1.4倍
P95延迟ms 450.77 1170.65 低2.6倍
备注:采用64线程,600s持续压力测试

说明:虚拟机本地环境可能优势不是很明显,但是从tps和延迟上看,和mysql对比已经有一些性能上的提升了。

五、OLAP性能测试与对比

1.mysql olap性能测试

1)生成测试数据

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

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

# 检查生成的tbl文件
ll *.tbl

image.png

2)mysql中创建数据库和表

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

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

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

image.png

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

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

4)导入数据

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

# 也可以执行下面的语句
chmod +x load.ddl
source /root/tpch_2_17_0/dbgen/load.ddl

image.png

5)创建索引

# 修改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/tpch_2_17_0/dbgen/dss.ri

image.png

5)生成查询语句

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

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

image.png

6)修改查询语句

# 修改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 '118' day (3) 

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

7)执行查询测试


# 执行查询语句,并记录执行时间
source query3.sql  
source query5.sql  
source query7.sql  
source query10.sql 
source query16.sql
source query20.sql

image.png

8)统计执行时间

查询对应的sql mysql执行时间(s)
query3 814.28
query5 431.68
query7 1014
query10 55.18
query16 58.33
query20 570.15

2.tidb olap性能测试

1)创建数据库和表

# 创建数据库
mysql -utidb -pxq1211 -P 4000 -h 192.168.96.61
create database tpch;
use tpch;
# 创建表
source /root/tpch_2_17_0/dbgen/dss.ddl

2)导入数据

# 安装 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数据库中导出8张表为CSV
use tpch;
SELECT * INTO OUTFILE '/usr/local/mysql/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 = "/root/csv"

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

[tidb]
host = "192.168.96.61"
port = 4000
user = "tidb"
password = "xq1211"
status-port = 10080
pd-addr = "192.168.96.61:2379"

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

image.png

3)执行查询测试

和使用mysql测试的query脚本保持一致

# 执行查询语句,并记录执行时间
source query3.sql  
source query5.sql  
source query7.sql  
source query10.sql 
source query16.sql
source query20.sql

4)统计执行时间

查询对应的sql tidb执行时间(s)
query3 46.04
query5 34.20
query7 23.28
query10 4.31
query16 3.9
query20 60.22

3.olap性能测试对比

查询脚本 tidb执行时间(s) mysql执行时间(s) 性能对比
query3 46.04 814.28 提升17.9%
query5 34.20 431.68 提升12.7%
query7 23.28 1014 提升43.56%
query10 4.31 55.18 提升12.8%
query16 3.9 58.33 提升14.96%
query20 60.22 570.15 提升9.5%

复杂sql分析型查询优势明显如query7,在分布式架构中对数据聚合操作,多表关联显著高于mysql。

六、总结

首先感谢root先锋的文章,本文测试部分参考了root先锋的相关测试流程,特此感谢。

tem的优势显而易见,无论是集群版本部署,还是敏捷版本部署,通过tem可以方便快捷的进行安装部署,大大节省了人力成本。另外从运维和dba角度上看,tem的功能如备份恢复、巡检、告警等大大简化了dba的工作,从tem上可以全局了解各个集群的运行状态,并做出对应的调整。

tidb敏捷版通过和mysql的oltp和olap的性能对比,已经明显优于mysql。传统行业、银行、政府单位等需要使用oltp的场景在事务处理、延迟上tidb分布式数据库事务处理能力更强。最主要的是支持htap,根据sql的语句和表数据量自动分析到对应的tikv或tiflash进行查询,这个比传统的关系型数据库更加方便和实用。

0
0
0
0

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

评论
暂无评论