0
0
0
0
博客/.../

平凯数据库(敏捷模式)性能简单探究

 hhu214  发表于  2025-10-13

1 测试目的

对平凯数据库(PingCAP TiDB)的压缩比、TEM易用性进行相关测试,了解该数据库的功能特点,并于mysql做oltp性能比对。

2 测试环境

项目 配置 操作系统 版本 数据盘 ip
TEM 4g8c redhat7.9 v3.1.0 / 192.168.40.50
TIDB 8g16c redhat7.9 v7.1.8 200G 192.168.40.51
MYSQL 8g16c redhat7.9 8.0.39 200G 192.168.40.52

3 环境部署

3.1 修改操作系统配置

3.1.1 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

3.1.2 关闭SELINUX

临时关闭:setenforce 0
永久关闭:vi /etc/selinux/config 修改SELINUX=disabled

3.1.3 安装openssh

yum -y install openssh

3.2 安装TEM

3.2.1 上传安装包并解压

tar -xvf tem-amd64.tar.gz

3.2.2 修改源数据库文件

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.40.50

tidb_servers:
  - host: 192.168.40.50
    port: 4000

tikv_servers:
  - host: 192.168.40.50

3.2.3 修改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.40.50: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.40.50"
    port: 8080
    mirror_repo: true # 是否开启镜像仓库,多个TEM节点时,最多只允许一个节点的开启

3.2.4 安装tem

./install.sh

su - tidb
source /home/tidb/.bash_profile
export TIUP_HOME=/tem-deploy/.tem

image.png image.png

3.2.5 登录tem

账号密码都为admin,内网为192.168.40.50,外网为10.251.22.73 image.png

3.3 TEM部署Tidb

3.3.1 添加凭证

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

3.3.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.3.3 配置中控机

主机-集群管理中控机-添加中控机 IP地址:192.168.40.51 名称:tidb651 ssh端口:22 服务端口:8090 服务根目录:/root/tidb-cm-service 自动安装TIUP 元数据目录:/root/.tiup image.png

3.3.4 配置集群主机

主机-主机-添加共享主机 image.png

3.3.5 创建集群

集群-创建集群 输入集群名称、密码、选择集群中控机,集群种类选择敏捷模式,部署模式共享。

image.png

image.png

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

安装完成 image.png

3.3.6 优化集群参数

# 调整集群参数
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;

image.png

3.4 安装MySQL

(1)安装MySQL、设定用户

#移除mariadb
yum -y remove mariadb*

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

(2)优化MySQL参数

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

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

记得重启数据库
systemctl restart mysqld

3.5 OLTP性能测试

3.5.1 安装Sysbench工具

# 安装依赖包
yum 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
./autogen.sh  
CFLAGS="-std=gnu99" ./configure --with-mysql #redhat7.9需要设置`CFLAGS`环境变量来启用C99标准。
make && make install
# 确认是否安装成功
sysbench --version

3.5.2 mysql性能测试

(1)生成测试数据

# 创建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_123 \
  --mysql-db=test \
  --tables=5 \
  --table-size=25000000 \
  --db-driver=mysql \
  prepare
  
  # --tables=5 
  #生成5张表# --table-size=25000000  
  #单表2500万行数据
  # 数据约52G,执行时间约2个小时

2)执行测试(测试时cpu飙升,内存没啥变化)

sysbench oltp_read_write \
  --mysql-host=127.0.0.1 \
  --mysql-port=3306 \
  --mysql-user=root \
  --mysql-password=Root_123 \
  --mysql-db=test \
  --tables=5 \
  --table-size=25000000 \
  --threads=64 \
  --time=600 \
  --report-interval=10 \
  --db-driver=mysql \
  run > 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

3.5.3 TiDB性能测试

(1)生成测试数据

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

(2)执行测试

sysbench oltp_read_write \
  --mysql-host=192.168.40.51 \
  --mysql-port=4000 \
  --mysql-user=tidb \
  --mysql-password=Root_123 \
  --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

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

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

cd /root/.tiup/bin
./tiup ctl:v7.1.8-5.2-20250630 tikv  --pd="127.0.0.1:2379" compact-cluster

(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

  • 逻辑大小:8074344377 ÷ 1073741824 ≈ 7.52G

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

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

image.png

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

image.png

物理磁盘占用大小:13 GB

3.7 TEM易用性

3.7.1 支持集群部署以及纳管

image.png

3.7.2 支持sql语句分析

image.png

3.7.3 支持生成巡检报告

image.png

3.8 总结

首先感谢Root先锋大佬的文章提供的测试思路,因为实验的物理机磁盘时机械硬盘,可能对测试结果有一些影响。

(1)TEM的方便了数据库的管理,利用这个平台可以实现集群的快速部署、已有集群的纳管,以及对数据库健康状态的实时监控。 (2)Tidb使用RocksDB作为底层存储,其压缩过程由后台自动触发。其逻辑大小/物理大小大约为0.57,具有较好的压缩性。 (3)吞吐能力高,能达到1.6万/秒(TPS)。 (4)平均延迟低。

0
0
0
0

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

评论
暂无评论