对SQLserver、Oracle、MySQL和PostgreSQL进⾏OLTP性能
测试(。。。
1.为什么做性能测试
在⼯作中,完全基于新的数据库开发的场景并不是很多,毕竟现在这个年代,从头跟着公司⼲到上市的并不多了。因此我们常常遇到的是经过业务的迅速上升,会发现当初的数据库选型到⽬前为⽌,有诸多的不合适,那么就需要评估数据库的新选型了,既然是评估⼯作,避免不了性能的测试。
2.业界标准 TPC-C
TPC-C是业界较认可的在线事务处理基准。
TPC-C是⼀个在线事务处理(OLTP)基准,于1992年7⽉批准。TPC-C⽐以前的OLTP基准测试(如TPC-A)更复杂,因为它引⼊了更多的事务类型、更复杂的数据库和整体执⾏结构。
TPC-C混合了5个不同类型和复杂性的并发事务,它们要么在线执⾏,要么排队等待延迟执⾏。该数据库由9种类型的表组成,这些表的记录和填充⼤⼩各不相同。TPC-C是以每分钟事务数(tpmC)来衡量的。虽然基准描述以批发供应商的为例⼦,但TPC-C并不局限于任何特定业务部门的活动,⽽是代表必须管理、销售或分发产品或服务的任何⾏业。
其涉及的表以及业务数量如下,更详细的介绍可参见标准:
编程培训班学费一般多少钱儿童3.测试⼯具
为了⽀持这些数据库的测试,当然需要选择⼀个合适的⼯具,⽽⽬前最合适的测试⼯具莫过于BenchmarkSQL。
github地址如下.
BenchmarkSQL采⽤Java语⾔编写,使⽤JDBC对SQL数据库进⾏压⼒测试。整体架构是处理模拟终端、⽤户和应⽤程序线程的⼀系列数据结构、队列和线程组。mysql面试题测试
其架构上做了⼀系列优化,允许配置驱动⾄数千个仓库(称为缩放因⼦),⽽不会压倒测试驱动程序本⾝的⼯作机器,这是⾮常重要的。
从标椎上看,每个仓库必须有 10 个终端。将这些数字放在⼀起很容易看出,"每个终端⼀个线程"的实现很可能不得⾏哦。
如果要驱动⼀个 100GB 的数据库(在 2016 年,我认为是⼀个中⼩型服务器),我们需要配置 1,000 个仓库,这将导致 10,000 个终端线程。
在 CentOS-7 64bit 等操作系统上,每个线程默认使⽤ 1MB 的堆栈空间,上下⽂切换在 10,000 个线
程之间已经⾜够CPU忙碌的了,甚⾄于可能会影响测试的结果,⽽尝试为⼤型服务器驱动 1TB 数据库,那测试机器将崩溃。
⽽BenchmarkSQL采⽤了类似队列的结构⽽不是真正的线程去驱动它们,因此可以满⾜性能压测的要求。
4.安装 BenchmarkSQL 6.0
先配置编译环境:
Java 开发环境 (java-1.8.0-openjdk-devel or newer).
Maven build ⼯具.
Docker
Git
构建:
git clone github/pgsql-io/benchmarksql.git
cd ~/benchmarksql
mvn
5.运⾏压测⼯具
先准备数据库测试配置⽂件:
$ cd benchmarksql/target/run
$ cp sample.RDBMS.properties my.properties
$ vi my.properties
⽬录中包含了⽀持数据库的测试配置⽂件,说明如下:
htmlfile对象# firebird数据库配置
sample.firebird.properties
# mariadb / MySQL 数据库配置
sample.mariadb.properties
# oracle数据库配置
# postgresql 数据库配置
sample.postgresql.properties
# SQL Server 数据库配置
特别需要注意的是MySQL数据库的配置,其和mariadb是兼容的,因此直接使⽤即可。
使⽤压测⾮常简单,配置好⽂件后,只需要运⾏三个命令即可。
# 销毁上次配置的数据库表数据
./runDatabaseDestroy.sh my.properties
# 初始化压测数据库数据
./runDatabaseBuild.sh my.properties
# 开始压测
./runDatabaseBuild.sh my.properties
复制代码
pythonscrapy如果需要临时增⼤linux测试机线程数,请使⽤命令
ulimit -HSn 65536
测试结果如下:
2021-09-26 08:48:00,024 INFO - result, _____ latency (seconds) _____
2021-09-26 08:48:00,024 INFO - result, TransType count | mix % | mean max 90th% | rbk% errors
2021-09-26 08:48:00,024 INFO - result, +--------------+---------------+---------+---------+---------+---------+---------+---------------+
2021-09-26 08:48:00,025 INFO - result, | NEW_ORDER | 18,909 | 43.934 | 0.053 | 0.146 | 0.073 | 1.026 | 0 |
2021-09-26 08:48:00,035 INFO - result, | PAYMENT | 18,661 | 43.357 | 0.014 | 0.071 | 0.016 | 0.000 | 0 |java创建多线程
2021-09-26 08:48:00,036 INFO - result, | ORDER_STATUS | 1,851 | 4.301 | 0.005 | 0.011 | 0.006 | 0.000 | 0 |
2021-09-26 08:48:00,036 INFO - result, | STOCK_LEVEL | 1,834 | 4.261 | 0.003 | 0.012 | 0.004 | 0.000 | 0 |
2021-09-26 08:48:00,036 INFO - result, | DELIVERY | 1,785 | 4.147 | 0.000 | 0.001 | 0.001 | 0.000 | 0 |
2021-09-26 08:48:00,036 INFO - result, | DELIVERY_BG | 1,785 | 0.000 | 0.098 | 0.191 | 0.104 | 0.000 | 0 |
2021-09-26 08:48:00,037 INFO - result, +--------------+---------------+---------+---------+---------+---------+---------+---------------+
2021-09-26 08:48:00,037 INFO - result,
2021-09-26 08:48:00,037 INFO - result, Overall NOPM: 630 (98.02% of the theoretical maximum)
2021-09-26 08:48:00,037 INFO - result, Overall TPM: 1,435
6. 配置⽂件参数说明
6.1 数据库驱动程序和连接参数
参数描述例⼦
db数据库类型postgres
driver要加载的 JDBC 类名称。driver=org.postgresql.Driver
application客户端应⽤程序类型,⽀持通⽤应⽤类型中的所有数据库类型,该类型使⽤ JDBC。application=Generic
conn Jdbc 连接 Uri conn=jdbc:postgresql://localhost:5432/postgres user数据库⽤户名user
password数据库⽤户密码password
参数描述例⼦
6.2 性能调节参数
参数描述
warehouses仓库数据库⼤⼩参数 这不仅影响初始数据库的⼤⼩,还影响将模拟多少终端,默认是10倍仓库数量loadWorkers⽤于创建初始数据库内容的并⾏线程数。仅影响初始化,不影响压测。
uniqueconstraint是什么意思monkeys⽤于处理终端输⼊和输出的猴⼦线的数量。
sutThreads要启动的应⽤程序线程数。将创建这么多并⾏数据库连接来处理传⼊请求。maxDeliveryBGThreads允许在任何时候处理交付交易的背景部分的最⼤线程数。maxDeliveryBGPerWarehouse允许"为同⼀仓库"处理交货交易的背景线程数。
7. ⽣成可视化统计界⾯
需要安装R包,来把测试报告数据转化为统计数据界⾯。
利⽤generateReport.py脚本来完成该项任务。
./generateReport.py --resultdir=my_result_2021-09-26_080750/
# 参数有下列可选,resultdir是必须参数
--template
-
-resultdir
--disk
--interface
8. ⼩结
性能测试的结果呢?
结果重要吗?掌握了⽅法,结果唾⼿可得。
嗯嗯,这点成果还是不太适合直接公开的,暂时保个密,等过段时间再来更新吧。 都看到这了,还在乎点个赞吗?
都点赞了,还在乎⼀个收藏吗?
都收藏了,还在乎⼀个评论吗?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论