社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

对SQL server、Oracle、MySQL和PostgreSQL进行OLTP性能测试(Benchmark)

dotNET跨平台 • 2 年前 • 236 次点击  
  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!

  • 📢本文作者:由webmote 原创,首发于 【掘金】

  • 📢作者格言:生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!💪💪💪

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数据库进行压力测试。整体架构是处理模拟终端、用户和应用程序线程的一系列数据结构、队列和线程组。


其架构上做了一系列优化,允许配置驱动至数千个仓库(称为缩放因子),而不会压倒测试驱动程序本身的工作机器,这是非常重要的。

从标椎上看,每个仓库必须有 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 https://github.com/pgsql-io/benchmarksql.git
cd ~/benchmarksql
mvn



5.运行压测工具


先准备数据库测试配置文件:

$ cd benchmarksql/target/run
$ cp sample.RDBMS.properties my.properties
$ vi my.properties



目录中包含了支持数据库的测试配置文件,说明如下:

# firebird数据库配置
sample.firebird.properties
# mariadb / MySQL 数据库配置
sample.mariadb.properties
# oracle数据库配置
sample.oracle.properties
# postgresql 数据库配置
sample.postgresql.properties
# SQL Server 数据库配置
sample.transact-sql.properties


特别需要注意的是MySQL数据库的配置,其和mariadb是兼容的,因此直接使用即可。

使用压测非常简单,配置好文件后,只需要运行三个命令即可。

# 销毁上次配置的数据库表数据
./runDatabaseDestroy.sh my.properties
# 初始化压测数据库数据
./runDatabaseBuild.sh my.properties
# 开始压测
./runDatabaseBuild.sh my.properties

复制代码

如果需要临时增大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 |
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
connJdbc 连接 Uriconn=jdbc:postgresql://localhost:5432/postgres
user数据库用户名user
password数据库用户密码password

6.2 性能调节参数

参数描述
warehouses仓库数据库大小参数 这不仅影响初始数据库的大小,还影响将模拟多少终端,默认是10倍仓库数量
loadWorkers用于创建初始数据库内容的并行线程数。仅影响初始化,不影响压测。
monkeys用于处理终端输入和输出的猴子线的数量。
sutThreads要启动的应用程序线程数。将创建这么多并行数据库连接来处理传入请求。
maxDeliveryBGThreads允许在任何时候处理交付交易的背景部分的最大线程数。
maxDeliveryBGPerWarehouse允许"为同一仓库"处理交货交易的背景线程数。

7. 生成可视化统计界面

需要安装R包,来把测试报告数据转化为统计数据界面。

利用generateReport.py脚本来完成该项任务。

./generateReport.py --resultdir=my_result_2021-09-26_080750/

# 参数有下列可选,resultdir是必须参数
--template
--resultdir
--disk
--interface



8. 小结

性能测试的结果呢?

结果重要吗?掌握了方法,结果唾手可得。

嗯嗯,这点成果还是不太适合直接公开的,暂时保个密,等过段时间再来更新吧。

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/120671
 
236 次点击