技术文章

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C MySQL Serverless的性能测试

2301_78121008

An editor at Blogzine


  • 2023-09-19
  • 3天前
  • 5495
  • 84 Views
  • 100

一、数据库性能测试方法:

可以帮助发现性能瓶颈,并及时采取措施来优化数据库性能。

序号测试方法描述
1基准测试(Benchmark Testing)①. 通过运行预定义的测试项目来测量数据库性能的方法
②. 基准测试适用于比较不同数据库系统或不同硬件配置的性能
③. 建议根据实际使用场景来选择最适合的基准测试工具,例如TPC-C、TPC-DS等
2负载测试(Load Testing)①. 通过模拟实际业务场景下的访问量,来测试在高并发情况下的性能表现
②. 可以使用压力测试工具,如JMeter等
3实时监控(Real-time Monitoring)①. 可以使用实时监控工具来监控数据库的响应时间、CPU和内存使用情况、磁盘IO等性能指标
4数据库执行计划(Execution Plan)①. 通过查看SQL语句的执行计划,确定查询的瓶颈在哪里
②. 数据库自带的执行计划工具,如EXPLAIN命令

二、数据库处理数据的类型:

随着企业信息化的发展,数据量越来越庞大,对于数据分析和处理提出了更高的要求。在数据仓库中,联机分析处理(OLAP)和联机事务处理(OLTP)是常见的两种处理方式。

序号技术指标OLTPOLAP
1应用类型业务操作(应用)统计报表(分析)
2响应速度快、短一般
3吞吐量
4并发量
5数据量规模中大
6场景银行类、电子商务类的交易系统数据仓库
  • 联机事务处理(OLTP:On-line Transaction Processing),数据量少,DML频繁,并行事务处理多,但是要求处理时间短,一般用途或事务处理模板。
  • 联机分析处理(OLAP:On-line Analytical Processing),数据量大,DML少,使用数据仓库模板。

数据仓库中的OLAP和OLTP是两种不同的数据处理方式,分别以数据分析和实时事务处理为核心。在实际应用中,我们针对不同的数据应用类型,可以选择不同的设计方案,以满足实际的业务需求。


三、基准测试中TPC-C、TPC-H、TPC-DS的区别:

序号测试基准数据应用类型作用测试工具
1TPC-COLTP①. 用于在线事务处理(OLTP)数据库的性能测试sysbench测试工具就支持oltp测试
2TPC-HOLAP①. 面向商品零售业的决策支持系统测试基准
②. 定义了8张表,22个查询,遵循SQL92标准
http://TPC.org官方提供测试包
3TPC-DSOLAP①. 数据仓库的表结构,采用星型、雪花型等多维数据模式
②. 包含7张事实表,17张纬度表
③. 与大数据的分析挖掘应用非常类似
④. 测试案例都有很高的IO负载和CPU计算需求
http://TPC.org官方提供测试包

四、基准测试TPC-C压测:

1. 测试服务器型号:

在这里插入图片描述

2. 测试数据量:

40张表,每张表25000条记录,测试数据量为10.62G左右。

3. 安装sysbench:

Sysbench是一款基于LuaJIT的,模块化多线程基准测试工具,常用于数据库基准测试。

yum -y install epel-release
yum -y install sysbench
sysbench --version

在这里插入图片描述

压测脚本默认会安装在 /usr/share/sysbench 目录下,看看该目录的内容,除了oltp_common.lua是个公共模块,其它每个 lua 脚本都对应一个测试场景。

在这里插入图片描述

4. 开通MySQL数据库实例:

创建数据库实例后,并不能马上进行使用,需要大概等待6分钟左右才能进行使用。

在这里插入图片描述

5. 开通TDSQL-C MySQL Serverless实例:

创建数据库实例后,大概等待不到1分钟左右就能进行使用。

在这里插入图片描述
所以,我们选择的TDSQL-C MySQL Serverless的CCU算力是Min为4,Max为8。
在这里插入图片描述

对比MySQL与TDSQL-C MySQL Serverless基准测试的测试报告:

command是 sysbench 要执行的命令,支持的选项有:prepare、run、cleanup

命令参数:

序号选项功能
1prepare①. 生成压测数据
②. 执行测试前的预备操作,如 创建文件、填充数据等
2run运行压测
3cleanup清理数据

1. 只写场景 - oltp_read_only:

# 准备数据
sysbench --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 oltp_write_only prepare

# 运行 workload
sysbench --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 --events=0 --time=30 --threads=500 --percentile=95 --report-interval=1 oltp_write_only run

# 清理数据
sysbench --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 oltp_write_only cleanup

测试结果对比:

在这里插入图片描述

压测数据结果解释:

序号参数值描述对比
1thds:500500个线程在压测
2tps:1611.38每秒执行了1611.38个事务TDSQL强
3qps: 10924.90每秒可以执行10924.90个请求TDSQL强
4(r/w/o: 0/7263.12/3661.79)①. 在每秒10924.90个请求中,对QPS进行了拆解
②. 有0个请求是读请求
③. 有7263.12个写请求
④. 有3661.79个其他的请求
TDSQL强
5lat (ms, 95%): 325.9895%的请求的延迟都在 97.55毫秒以下
6err/s: 0.00 reconn/s: 0.00每秒有0个请求是失败的,发生了0次网络重连

2. 只读(point select)场景 - oltp_read_only:

# 准备数据
sysbench --db-driver=mysql --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 oltp_read_only prepare

# 运行 workload
sysbench --db-driver=mysql --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 --events=0 --time=30  --threads=512 --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run

# 清理数据
sysbench --db-driver=mysql --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 oltp_read_only cleanup

在这里插入图片描述

在这里插入图片描述

3. 只读(range select)场景 - oltp_read_only:

# 准备数据
sysbench --db-driver=mysql --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 oltp_read_only prepare

# 运行 workload
sysbench --db-driver=mysql --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 --events=0 --time=30 --threads=512 --percentile=95 --skip-trx=1 --report-interval=1 oltp_read_only run

# 清理数据
sysbench --db-driver=mysql --db-driver=mysql --mysql-host=rm-bp1i6ktwzqcs153neyo.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=root_123 --mysql-password=Testdb@123 --mysql-db=tpcc_test --table_size=25000 --tables=40 oltp_read_only cleanup

在这里插入图片描述

在这里插入图片描述

4. 总结:

从上面测试的数据来看,可以看到大部分的场景下,压测的TDSQL-C MySQL Serverless的要比传统的MySQL的TPS和QPS要高一点,而且从CPU的的效率来看,也是节约了近一半的效率。

5. 遇到问题点:

执行报错“Can’t create more than max_prepared_stmt_count statements (current value:16382)”,经过查询默认值为16382,将值改大。
在这里插入图片描述

在这里插入图片描述

执行报错“unable to connect to MySQL server on host”,将max_connections值改大。

在这里插入图片描述


五、基准测试TPC-DS压测:

TPC-DS是一个面向决策支持系统(decision support system)的包含多维度常规应用模型的决策支持基准,包括查询(queries)与数据维护,此基准对被测系统(System Under Test’s, SUT)在决策支持系统层面上的表现进行的评估具有代表性。

此基准体现决策支持系统以下特性:

  • 测试大规模数据
  • 对实际商业问题进行解答
  • 执行需求多样或复杂的查询(如临时查询,报告,迭代OLAP,数据挖掘)
  • 以高CPU和IO负载为特征
  • 通过数据库维护对OLTP数据库资源进行周期同步
  • 解决大数据问题,如关系型数据库(RDBMS),或基于Hadoop/Spark的系统
  • 基准结果用来测量,较为复杂的多用户决策中,单一用户模型下的查询响应时间,多用户模型下的查询吞吐量,以及数据维护表现。

1. TPC-DS的下载和编译:

下载地址

在这里插入图片描述

2. 创建数据库:

## 3.
LOAD DATA LOCAL INFILE '/tmp/11/call_center.dat' INTO TABLE call_center FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/customer.dat' INTO TABLE customer FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/income_band.dat' INTO TABLE income_band FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/ship_mode.dat' INTO TABLE ship_mode FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/warehouse.dat' INTO TABLE warehouse FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/catalog_page.dat' INTO TABLE catalog_page FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/customer_demographics.dat' INTO TABLE customer_demographics FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/inventory.dat' INTO TABLE inventory FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/store.dat' INTO TABLE store FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/web_page.dat' INTO TABLE web_page FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/catalog_returns.dat' INTO TABLE catalog_returns FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/date_dim.dat' INTO TABLE date_dim FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/item.dat' INTO TABLE item FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/store_returns.dat' INTO TABLE store_returns FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/web_returns.dat' INTO TABLE web_returns FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/catalog_sales.dat' INTO TABLE catalog_sales FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/dbgen_version.dat' INTO TABLE dbgen_version FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/promotion.dat' INTO TABLE promotion FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/store_sales.dat' INTO TABLE store_sales FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/web_sales.dat' INTO TABLE web_sales FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/customer_address.dat' INTO TABLE customer_address FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/household_demographics.dat' INTO TABLE household_demographics FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/reason.dat' INTO TABLE reason FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/time_dim.dat' INTO TABLE time_dim FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/tmp/11/web_site.dat' INTO TABLE web_site FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';

版权声明:

本文为[2301_78121008]所创,转载请带上原文链接,感谢

https://blog.csdn.net/2301_78121008/article/details/133021773


评论数 0



留下回复

如果您是个网络喷子或者键盘侠,那么建议您多看少说。