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

  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!

  • 📢本文作者:由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并不局限于任何特定业务部门的活动,而是代表必须管理、销售或分发产品或服务的任何行业。

其涉及的表以及业务数量如下,更详细的介绍可参见标准:

c9ba2a9752b12c64beb0f971603ffb7e.png

3.测试工具

为了支持这些数据库的测试,当然需要选择一个合适的工具,而目前最合适的测试工具莫过于BenchmarkSQL

github地址如下.

BenchmarkSQL采用Java语言编写,使用JDBC对SQL数据库进行压力测试。整体架构是处理模拟终端、用户和应用程序线程的一系列数据结构、队列和线程组。

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

从标椎上看,每个仓库必须有 10 个终端。将这些数字放在一起很容易看出,"每个终端一个线程"的实现很可能不得行哦。

如果要驱动一个 100GB 的数据库(在 2016 年,我认为是一个中小型服务器),我们需要配置 1,000 个仓库,这将导致 10,000 个终端线程。

在 CentOS-7 64bit 等操作系统上,每个线程默认使用 1MB 的堆栈空间,上下文切换在 10,000 个线程之间已经足够CPU忙碌的了,甚至于可能会影响测试的结果,而尝试为大型服务器驱动 1TB 数据库,那测试机器将崩溃。

而BenchmarkSQL采用了类似队列的结构而不是真正的线程去驱动它们,因此可以满足性能压测的要求。

ad60b79b9a5088a83ddd553f484a905e.png

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

9059e77982638b4e134a35395e76a0be.png

8. 小结

性能测试的结果呢?

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【完整版】当大师遇到了理工男,只能吐血了...

全世界有3.14 % 的人已经关注了爆炸吧知识1、青年问禅师:“大师,我很爱我的女朋友,她也有很多优点,但是总有几个缺点让我非常讨厌,有什么方法能让她改变?”禅师浅笑,答:“方法很简单…

[FW]软件开发中的11个系统思维定律

“我会更加努力地工作”——一匹名叫Boxer的马(出自乔治奥威尔的《动物农庄》) 彼得圣吉在其著作《第五项修炼》中提到的系统思维定律同样适用于软件开发。 1. 今日的问题源于昨日的解决方案(Today’s problems come from yesterday’s sol…

5单个编译总会编译全部_VS2019 v16.5 MSVC编译器后端更新汇总

MSVC更新汇总在Visual Studio 2019 v16.5中,我们已经对C后端进行了持续的改进更新,包括新增了一些新特性和优化点,编译时间优化,以及更好的安全性。下面我们来汇总一下目前关于MSVC编译器后端更新的要点:> Intel JC…

计算机职称 计算机二级证,国家计算机二级证书含金量有多高

首先感谢你的邀请,我们都知道在大学生涯考证中,计算机二级#计算机二级#基本是在校大学生必备的证书。当然我说的必考证书是针对已经了解计算机证书的,当然可能还有一些人不了解,那学姐简单来说一下,什么是全国计算机二…

无法使用此安装程序来安装 .net framework_NuGet是什么?理解与使用(上)

如果你了解python,那么它类似pip。如果你了解nodejs,那么它类似npm。如果你了解ruby,那么它类似gem。对,它就是一个包(package)管理平台,确切的说是 .net平台的包管理工具,它提供了一…

NoSQL 是否可以用来做日志中心 ?

咨询区 ikrain:请问大家在分布式程序中用 nosql 来做日志中心的经验?我做了一些研究,发现用 Mongodb 做日志中心是一个非常好的选择,而且我发现 log4net 对它也是直接集成的,比如: log4mongo-net 。不知道大家可推荐这…

长能耐了?想造反了?你老婆没了.......

1 提出问题的人一律直接解决掉▼2 今年的心理阴影是金字塔和钢琴键带来的▼3 广州考如何催收房租?▼4 想起了大雄的衣柜......▼5 这简直一毛一样▼6 我今天非要跳上去不可!突然想到我还有点急事,告辞……▼7 据说,有不少男…

php 无限查找下级业绩_PHP 面试踩过的坑

因为最近需要面试,所以特意整理了一下面试所经历的一些面试题。分享一下,希望对自己有用,也对其他人有用。尚未有答案的,后面会陆续更新,如果有补充答案的,也十分感激。1.get,post 的区别**显示有区别 **ge…

python获取历史双色球数据_你的梦想,我来买单!Python分析双色球中奖号码竟成功获取特等奖

关于双色球的话题估计大家都听的很多,毕竟成本很低,但是收获很高。毕竟当利润达到100%时,就有人敢于铤而走险。当利润达到200%时,他们就敢于冒上断头台的危险。 而当利润达到300%他们就会践踏人间的一切法律。更何况是n倍的利润刺…

分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起~~~

前言在真实的项目中,不管是功能日志、错误日志还是异常日志,已经是项目的重要组成部分。在原始的单体架构,通常看日志的方式简单粗暴,直接登录到服务器,把日志文件拷贝下来进行分析;而如今分布式、微服务架…

《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

章节回顾: 《TCP/IP详解卷1:协议》第1章 概述-读书笔记 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记 《TCP/IP详解卷1:协议…

10以内的分解与组成怎么教_狗狗酷炫的飞盘游戏怎么玩?分解步骤教你快速学会...

现在的铲屎官都喜欢训练自己的狗狗,训练狗狗不仅可以增加狗狗与主人的感情,还能增强狗狗的协调性,开发狗狗的智力,可谓一举两得。其中飞盘是大家都比较爱的活动,经常看看狗狗以华丽的身姿一跃接起主人扔的飞盘&#xf…

计算机组成与系统 报告,计算机组成与系统结构实验报告2

计算机组成与系统结构实验报告,西北工业大学评语: 课中检查完成的题号及题数: 成绩:自评成绩:95课后完成的题号与题数:实验报告实验名称: 班级:1.4 CPU 与简单模型机设计实验 日期: 2015.11.16 杨添文10011303 学号&am…

c++ 异步下获取线程执行结果_前端异步编程的那些事

啊一、异步编程的运行机制我们学习Javascript语言的时候就知道它的执行环境是”单线程“的。所谓”单线程“,就是指一次只能处理一个任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务。常见的浏览器无响应(假…

自动驾驶规划算法

本文将讲解BFS,Dijstra,A*,动态规划的算法原理,不正之处望读者指正,希望有兴趣的读者能在评论区提出一些这些算法的面试考点,共同学习,一起进步 0 图论基础 图有三种:无向图、有向…

印度网民集体删除中国APP,网友评论亮了

全世界只有3.14 % 的人关注了爆炸吧知识最近,国外有一款Remove China Apps火了。这款APP只有一个功能:可以一键扫描用户手机里的应用,识别出自中国公司的应用,并进行一键删除的骚操作。应用的主图标、界面,甚至特意使用…

SQL Server 负载均衡集群(转)

SQL Server 负载均衡集群一个应用系统随着业务量的提高,以及访问量和数据流量的快速增长,各个核 心部分的处理性能和计算强度也相应增大,使得单一设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,必将造成现有资…

大前端快闪二:react开发模式 一键启动多个服务

最近全权负责了一个前后端分离的web项目,前端使用create-react-app[1], 后端使用golang做的api服务。npx create-react-app my-app cd my-app npm start歘歘歘,就搭建了一个react前端项目。前端老鸟都知道npm start或yarn start以开发模式启动react App&…

数据库比较工具SQL Delta

SQL Delta 版本4只支持SQL Server数据库 版本5支持Oracle 但是数据库中不可以有英文 否则连接时会报 ORA-12737: Instant Client Light: unsupported server character set ZHS16GBK的错误 配置如下所示: 转载于:https://blog.51cto.com/shuimomo/461266

女朋友在家是怎么利用我的模型的​

1 趁着奶猫还没长大,赶紧摸2 说有谁不喜欢玩具呢3 爸爸再也不用费心编辫子了4 谁知道这是什么5 还挺会利用的啊6 学霸上厕所的时候7 逻辑推理你点的每个赞,我都认真当成了喜欢