写点什么

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

作者: sherq1989 原文来源:https://tidb.net/blog/11a6f555

一、环境配置

1. 敏捷测试目标

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

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

TIDB:v7.1.8


Mysql:v8.0.43

3. 虚拟机及软件软件

二、环境部署

1. 部署前准备

1)关闭防火墙和 selinux


systemctl stop firewalld


systemctl disable firewalld



临时关闭: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


2. 安装 TEM

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


2)解压按照包


tar -xvf tem-amd64.tar.gz



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




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


http://192.168.96.60:8080


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

1)添加凭证


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



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 工具整合包



3)配置中控机


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


IP 地址:192.168.60.61


名称:tidb61


ssh 端口:22


服务端口:8090


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


自动安装 TIUP



添加后的界面如下



4)配置集群主机


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



已成功添加共享主机



5)创建集群


集群 - 创建集群


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



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



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



参数默认



集群创建中



集群安装完成


4. 安装部署 mysql

1)解压安装包



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=3306user=mysqlbasedir=/usr/local/mysqldatadir=/usr/local/mysql/datasocket=/usr/local/mysql/mysql.socklower_case_table_names=1[mysqld_safe]log-error=/usr/local/mysql/log/error.logpid-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



2)下载和安装 sysbench


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


cd sysbench


./autogen.sh


./configure –with-mysql


make && make install


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:  TPCHDATABASE= MYSQLMACHINE = LINUXWORKLOAD = 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 的可执行文件



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
复制代码




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


2.tidb oltp 性能测试

1)生成测试数据


# 创建远程登录账号 tidb数据库上操作(需要安装mysql客户端连接)mysql -h 127.0.0.1 -P 4000 -uroot -pXq1211@123create 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
复制代码



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


3.oltp 性能测试对比


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

五、OLAP 性能测试与对比

1.mysql olap 性能测试

1)生成测试数据


# 通过TPC-H生成测试数据./dbgen -s 10 -f
# 会自动生成8个.tbl文件(lineitem, orders, part等)# -s 10 表示生成约10GB原始文本数据
# 检查生成的tbl文件ll *.tbl
复制代码



2)mysql 中创建数据库和表


# 创建数据库mysql -u root -pcreate 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
复制代码



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


# 在tpc-h工具的安装目录vi load.ddluse tpchload 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.ddlsource /root/tpch_2_17_0/dbgen/load.ddl
复制代码



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 REGIONALTER TABLE tpch.REGIONADD PRIMARY KEY (R_REGIONKEY);
-- For table NATIONALTER TABLE tpch.NATIONADD 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 PARTALTER TABLE tpch.PARTADD PRIMARY KEY (P_PARTKEY);
COMMIT WORK;
-- For table SUPPLIERALTER TABLE tpch.SUPPLIERADD PRIMARY KEY (S_SUPPKEY);
ALTER TABLE tpch.SUPPLIERADD FOREIGN KEY SUPPLIER_FK1 (S_NATIONKEY) references tpch.NATION(N_NATIONKEY);
COMMIT WORK;
-- For table PARTSUPPALTER TABLE tpch.PARTSUPPADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY);
COMMIT WORK;
-- For table CUSTOMERALTER TABLE tpch.CUSTOMERADD PRIMARY KEY (C_CUSTKEY);
ALTER TABLE tpch.CUSTOMERADD FOREIGN KEY CUSTOMER_FK1 (C_NATIONKEY) references tpch.NATION(N_NATIONKEY);
COMMIT WORK;
-- For table LINEITEMALTER TABLE tpch.LINEITEMADD PRIMARY KEY (L_ORDERKEY,L_LINENUMBER);
COMMIT WORK;
-- For table ORDERSALTER TABLE tpch.ORDERSADD PRIMARY KEY (O_ORDERKEY);
COMMIT WORK;
-- For table PARTSUPPALTER TABLE tpch.PARTSUPPADD FOREIGN KEY PARTSUPP_FK1 (PS_SUPPKEY) references tpch.SUPPLIER(S_SUPPKEY);
COMMIT WORK;
ALTER TABLE tpch.PARTSUPPADD FOREIGN KEY PARTSUPP_FK2 (PS_PARTKEY) references tpch.PART(P_PARTKEY);
COMMIT WORK;
-- For table ORDERSALTER TABLE tpch.ORDERSADD FOREIGN KEY ORDERS_FK1 (O_CUSTKEY) references tpch.CUSTOMER(C_CUSTKEY);
COMMIT WORK;
-- For table LINEITEMALTER TABLE tpch.LINEITEMADD FOREIGN KEY LINEITEM_FK1 (L_ORDERKEY) references tpch.ORDERS(O_ORDERKEY);
COMMIT WORK;
ALTER TABLE tpch.LINEITEMADD 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
复制代码



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.shfor i in {1..22}; do /root/tpch_2_17_0/dbgen/qgen $i > /root/tpch_2_17_0/dbgen/query$i.sql; donechmod +x query.sh./query.shll *.sql
复制代码



6)修改查询语句


# 修改SQL查询语句# TPC-H查询模板包含limit -1,在MySQL中会报错,需要批量移除
# 将所有 limit -1 替换为 limit 1sed -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.sqlsource query20.sql
复制代码



8)统计执行时间


2.tidb olap 性能测试

1)创建数据库和表


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


2)导入数据


# 安装 tiup-lightningtar -xvf tidb-ee-toolkit-v7.1.8-5.2-20250630-linux-arm64.tar.gzcd tidb-ee-toolkit-v7.1.8-5.2-20250630-linux-arm64tar -xvf tidb-lightning-v7.1.8-5.2-20250630-linux-amd64.tar.gztiup install tidb-lightning:v7.1.8
# 从mysql数据库中导出8张表为CSVuse 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 第一行是列名,改为 truenot-null = false
[tidb]host = "192.168.96.61"port = 4000user = "tidb"password = "xq1211"status-port = 10080pd-addr = "192.168.96.61:2379"
# 导入数据/root/.tiup/bin/tiup tidb-lightning -config tidb-lightning.toml
复制代码



3)执行查询测试


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


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


4)统计执行时间


3.olap 性能测试对比


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

六、总结

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


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


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


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TIDB数据库企业版敏捷部署及和mysql性能对比_7.x 实践_TiDB 社区干货传送门_InfoQ写作社区