对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…

LinkedIn已将可自定义的索引引擎IndexTank开源

LinkedIn已将IndexTank开源,这是一种运行在云中的文档索引引擎,它让用户可以自定义编制索引的过程,并对结果进行微调。 IndexTank是在一年之前发布的,在十月份被LinkedIn收购,并在最近开放了源代码。IndexTank是与Goog…

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

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

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

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

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

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

effective C++ 条款 3:尽可能使用const

const 修饰指针&#xff1a;如果关键字const出现在星号*左边&#xff0c;表示被指物是常量&#xff0c;如果const出现在*右边表示指针自身是常量&#xff0c; 如果出现在两边表示被指物和指针都是常量&#xff1b; const std::vector<int>::iterator iter vec.begin(); …

为团委出书写:《打造社团品牌:请给我一个理由,让我记住你!》

前些日子&#xff0c;大学母校的棋社社长欢欢给我打电话&#xff0c;说团委要出一本论述社团发展的书&#xff0c;希望我这个老社长代表翰轩棋社写一篇文字&#xff0c;说最好要5000字&#xff0c;我当时觉得压力巨大&#xff0c;现在经过几个日夜终于写出来了&#xff0c;没想…

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

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

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

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

蓝牙Bluetooth技术手册规范下载【转】

蓝牙Bluetooth技术手册规范下载 http://www.crifan.com/summary_bluetooth_specification_download/ 【背景】 之前就已经整理和转帖了和蓝牙技术相关的一些内容&#xff1a; 【资源下载】bluetooth 协议 spec specification 蓝牙1.1、蓝牙1.2、蓝牙2.0&#xff08;蓝牙2.0EDR&…

微型计算机原理中LEA,微型计算机系统原理及应用(第2版)第2章

第二章微型计算机指令系统题2-1 试分别说明以下各指令的源操作数属于何种寻址方式。答&#xff1a;1、MOV AX ,[SP] ——寄存器间接寻址2、MOV DS ,AX ——寄存器寻址3、MOV DI ,0FF00H ——立即数寻址4、MOV BX ,[2100H] ——直接寻址5、MOV CX ,[SI5] ——变址寻址6、MOV AX …

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

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

[恢]hdu 2147

2011-12-20 15:42:45 地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2147 题意&#xff1a;n*m的棋盘&#xff0c;一开始在右上角。每次只能走到左、下 或者左下。判胜败。 mark&#xff1a;简单博弈。n、m同时为奇数则败。 代码&#xff1a; # include <stdi…

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

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

Hotspot hotswap, who and who are best freinds

Hotspot&hotswap,whoandwhoarebestfreinds(点击这里查看ppt)java动态替换的ppt。hotspot&hotswapwhoandwhoarebestfriendsxuanxitaobao.comwhyweneedhotswap&#xff1f;主管:你在偷懒&#xff1f;汇编开发人员&#xff1a;我在编译。C开发人员:我在编译打包部署。java…

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

章节回顾&#xff1a; 《TCP/IP详解卷1&#xff1a;协议》第1章 概述-读书笔记 《TCP/IP详解卷1&#xff1a;协议》第2章 链路层-读书笔记 《TCP/IP详解卷1&#xff1a;协议》第3章 IP&#xff1a;网际协议&#xff08;1&#xff09;-读书笔记 《TCP/IP详解卷1&#xff1a;协议…

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

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

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

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