专栏首页程序员小跃后端的你,使用的数据库能撑起多少并发,有数吗?

后端的你,使用的数据库能撑起多少并发,有数吗?

阿里巴巴的 OceanBase 数据库,性能超过 Oracle 100倍,号称世界第一。大家可还记得今年的 OB 打榜赛?

不论真假,我还是对衡量标准,很感兴趣。尤其是数据仓库的标准TPC-H.

TPC-H测试标准,以8张表,22个查询作为基础,在一定时间内(通常是1小时),通过7个并发查询,衡量数据库的每秒处理事务数,作为数据库性能度量标准。用一个公式来描述整个过程,就是 QphH@Size.

2018 年,惠普使用 microsoft sql server on linux 作为测试对象,向 TPC 组织, 提交了一次TPC-H性能报告。

在1T的数据量下,花费近47万美金,达到了每小时100万的查询数,即每秒可完成280查询。公式表达,1009065.5 QphH@1000GB.

后台回复:惠普,即可得这份《报告》以及相应的表和查询脚本

当然,这还没考虑到查询性能的可接受程度,以27.6s这样的平均速,其实很多用户是会不满意的。

image

这份报告虽然说明一定的问题,比如 Throughput 度量,性价比,但缺少对服务器的性能监控。比如7个并发,1小时连续压测下,服务器的性能监控图。

再者,数据库的最终吞吐量,是否可以再扩大,也没有具体说明白。如果降低并发,是不是能够获得较好的性能?

为了模拟惠普的这次测试,我通读了TPC-H的测试标准,惠普的这份测试报告,还有几篇来自维普的论文。最终找到了模拟的方法。

以下是详细的测试步骤:

1)下载 HammerDB 软件 2)准备 SQL Server 测试环境 3)复现 Power Test 4) 复现 Throughput Test

1) 下载 HammerDB

公众号后台回复 HammerDB,即可得到 zip 版本的 HammerDB 连接。

解压缩后,直接打开,就可以使用

image

2)准备 SQL Server 测试环境

这就要自己准备了,到微软的官方网站下载180天的试用版,即可

3)复现 Power Test

由于这次模拟的是 SQL Server TPC-H 测试标准,所以在 HammerDB 中,我们需要预先配置:

第一次打开 HammerDB 是这样的,以 Oracle TPC-C 为默认选中状态:

image

通过菜单 Options, 配置 SQL Server TPC-H 测试标准:

image

image

在 TPC-H 整套测试方案中,指定了8张表,22个查询,配备相应的数据生成程序与查询生成程序,但这两个程序都是使用c/c++写的,必须先通过编译,再通过调用接口来用在自己的测试方案中,我尝试了下,放弃!不仅源码复杂,有些环境还需要额外配置。

在搜索了 n 篇论文以及博文之后,我发现 HammerDB 已经替我们把这些环境配置都搞定了,于是就它了。

有了 HammerDB,我们唯一要做的事情,就是指定一个可用的测试数据库就可以。

image

这里需要说明的是 Scale Factor,也就是扩展因子。说人话,就是数据库大小配置。总共可以分为6级,1GB,10GB,30GB,100GB,300GB,1000GB.

那么既然是自己测试,选择1,即1GB,就可以了

image

点一下 Build,就完成了数据库环境配置。

通过 SQL Server Profiler, 我们可以看到数据库正在发生的一切:

image

通过 HammerDB 的Build界面,可以看到执行状态:

image

当然,时间会很久,我们可以去喝一杯咖啡再来,HammerDB会自动报告,数据装载是否完成:

image

由于装载时间非常长,所以一旦数据库建立成功,我们就要对它进行备份:

image

接下来,我们就要试着运行一次 Power Test:

首先配置 Driver Script:

image

Driver Script 做的事情,就是为测试中的虚拟用户,配置执行的操作。比如配置一组22个查询组成的查询流,让虚拟用户在登录数据库,依次执行这22个查询。

配置完 Driver Script, 我们就可以生成指定数量的并发用户。这些用户,可以执行刚才配置的 Driver Script.

Power Test 测试目的,是察看是否有明显的响应时间缺陷,所以设置单个用户:

image

一旦配置完成,就可以双击 Create 来生成虚拟用户的配置信息:

image

接着,我们点击运行单用户的单次执行:

image

耐心等待测试完成:

image

单轮测试用了124秒,似乎不够理想。但这是我可怜的笔记本虚拟机服务器啊。

然后,肯定会有读者说,这是数据仓库啊,不能没有写入的操作啊。是的,这个写入,我们也可以模拟,通过开启 Refresh Function:

image

然后再重复新建用户,并开启测试。

4)复现 Throughput Testing

Throughput 是吞吐量的意思,这个概念很有意思。

首先来说说并发用户。当同时有10个用户访问数据库时,假设他们同时执行1条 SELECT 语句。此时,并发数是10,Throughput 也是10,但你能不能说数据库并发度不够呢?不能。因为此时这并发的10个用户,都对速度感到满意,说明完全可以再容纳更多的人来数据库查询。

于是,增加了100个人来,还是运行 一条SELECT语句。那么此时,如果大家还是对响应很满意,说明数据库非常棒,还可以吸纳更多的人。

好,加20倍流量,来了200人。于是,有用户反映,速度慢了,明显慢了一倍以上,当有50%的人都说慢了的时候,显然数据库的吞吐量,要小于 200.

我们往下调调,来150人吧。此时90%以上的人,对速度满意,那么就可以说,数据库的吞吐量在 150左右了。

这,就是 TPC-H 测试标准报告中,要体现的内容了。不过,人家更标准,使用的是 QphH@Size.

所以,我们要使用 hammerDB来模拟这个操作:

首先设置4个并发用户,第一个用户会模拟写入的操作:

image

开启 QphH@Size 的统计功能:

image

等待测试完成

image

理论上,测试时间越长,测试的准确度越高,但我们只是模拟,所以运行一组 Query Set, 让 HammerDB 帮我们预估就可以了:

image

image

image

image

可以看到,4个并发测试下来,大概可以得到每小时近20000个事务处理。也就是每秒钟处理6个事务。

那么是不是 Throughput 为6,就是我的数据库极限了呢,我怀疑,可以更高。于是我调高了用户并发数,加了2个,再来看 QphH:

image

image

发现,最高的 QphH 虽然比4个用户那次高,但明显已经影响了用户的响应时间,普遍从原来的100s 延长到了160s 以上。说明,已经不能再增加并发查询了,6事务/秒已经是我这台数据库的极限。

很可惜的是,HammerDB 并不能动态增加用户数,导致测试不流畅,不得不说是个遗憾。我看到 oracle 厂商在 demo 他们的系统时,并发用户数,是动态可加的,想加就加,相减就减,操作随意地令人发指。提高了测试的准确度。

说Oracle是世界,乃至宇宙第一,还不得不服。

本文分享自微信公众号 - 奔跑吧攻城狮(runningdimple)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Dimple在左耳听风ARTS打卡(十七)

    所谓ARTS:每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algori...

    程序员小跃
  • 设计模式之单例模式(二)

    上一篇我们对经典的单例模式进行了学习,并且知道了单例模式的概念,以及如何通过单线程去创建一个有效的单例模式,让程序不用多次去创建实例。

    程序员小跃
  • GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!

    Vim对程序员来说,都不陌生。那究竟有没有什么方法可以更高效的学习 Vim 呢?肯定是有。那么,今天就跟大家介绍一款开源项目:PacVim

    程序员小跃
  • 图像处理R包magick学习笔记

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源

    生信宝典
  • Java进阶必须掌握:JVM+Springboot+MySQL+Linux「资料免费送」

    JVM 可以分为 5 个部分,分别是:类加载器(Class Loader):加载字节码文件到内存。运行时数据区(Runtime Data Area):JVM 核...

    用户5546570
  • Spring Boot程序正确停止的姿势

    基于管理端口方式实现进程关闭实际上是模块spring-boot-actuator提供的功能。

    2Simple
  • 深度学习环境搭建-Anaconda5.2、CUDA9.0、cudnn7.3、pytorch1.0.1的安装

    百度云盘下载链接: https://pan.baidu.com/s/1ACJSry3egBGin-w50RwtyQ 提取码: cs6y 本文作者在链接中上传了...

    潇洒坤
  • 用免费腾讯云服务器体验基于CentOS搭建Discuz 论坛

    LAMP 是 Linux、Apache、MySQL 和 PHP 的缩写,是 Discuz 论坛系统依赖的基础运行环境。我们先来准备 LAMP 环境

    用户5915122
  • 腾讯阿里互联网圈买买买,最后真的会两家独享市场吗,对我们有好处吗?

    国内互联网江湖如果变成了腾讯和阿里巴巴的二人转,对于中国互联网的发展还是极其不利的。

    程序员互动联盟
  • Django学习-第六讲(上):Django数据库原生的方法操作

    我们使用Django来操作MySQL,实际上底层还是通过Python来操作的。因此我们想要用Django来操作MySQL,首先还是需要安装一个驱动程序。在Pyt...

    小海怪的互联网

扫码关注云+社区

领取腾讯云代金券