使用Benchto框架对Trino进行SQL性能对比测试
有时需要对魔改源码前后的不同版本Trino引擎进行性能对比测试,提前发现改造前后是否有性能变差或变好的现象,避免影响数据业务的日常查询任务性能。而Trino社区正好提供了一个性能测试对比框架:GitHub - trinodb/benchto: Framework for running macro benchmarks in a clustered environmentFramework for running macro benchmarks in a clustered environment - GitHub - trinodb/benchto: Framework for running macro benchmarks in a clustered environmenthttps://github.com/trinodb/benchto因此使用它可以较大程度上减少一通魔改后,看起来代码量很大且功能很牛,但是实际上线性能拉垮,改了个寂寞的现象。
一、服务端部署
通过了解项目源码结构和.md文档发现,本质上是需要部署一个远程服务端,它可以灵活连接不同的Trino集群,并将性能测试的结果和指标信息写入到数据库中,其中benchto-service模块就是基于Spring Boot的服务端实现。可以修改resources目录中的application.yaml配置,指定Spring Boot后端需连接的数据库,社区默认是Postgres:
server:port: 8081
spring:datasource:url: jdbc:postgresql://x.x.x.x:5432/postgresusername: postgrespassword: postgresdriver-class-name: org.postgresql.Driverjpa:open-in-view: falsehibernate.ddl-auto: validateproperties:hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.EhCacheRegionFactoryhibernate.cache.use_second_level_cache: truehibernate.cache.use_query_cache: truejavax.persistence.sharedCache.mode: ENABLE_SELECTIVE
通过Maven编译打包后,会生成benchto-service.jar,可以通过java -jar命令的方式部署启动到具体的物理机上,也可以参考docs/getting-started/README.md中的提示一键启动相关各服务的docker容器。
二、客户端部署
项目中benchto-driver模块本质上是提交性能测试任务的客户端,代替了Trino 363版本之前trino-benchmark-driver-363-executable.jar直连Trino集群的方式。Maven编译打包后会生成benchto-driver-exec.jar,也是同样以java -jar的命令启动,同时在该jar的所在目录下,需要准备如下配置:
(1)描述具体Trino集群信息的application-环境名.yaml配置文件,样例如下:
# application-dev.yamldata-sources:test-env:url: jdbc:trino://x.x.x.x:8080username: benchtodriver-class-name: io.trino.jdbc.TrinoDriverbenchmarks: benchmarks
sql: sql
query-results-dir: resultsbenchmark-service:url: http://x.x.x.x:18801
environment:name: DEVbenchmark:feature:presto:metrics.collection.enabled: truequeryinfo.collection.enabled: truepresto:url: http://x.x.x.x:8080username: benchto
data-sources代表可以连接哪些trino集群环境,这里有个叫test-env的Trino JDBC连接信息,是后面提到的(3)中会引用到的。
benchmarks代表部署benchto-driver-exec.jar客户端后,在客户端所在目录下的哪个子目录放置了SQL集配置文件,这里就放在名为benchmarks的子目录里。
sql代表各.sql文件放在哪个子目录,这里延续了老版trino-benchmark-driver jar的传统,也放在sql子目录里。
query-results-dir代表跑性能测试后的结果放在哪个子目录里。
benchmark-service代表benchto服务端的地址,以及可以代表什么环境名称。
benchmark标签下可以配置一些接入Presto引擎的参数,例如是否针对Presto开启指标收集。
presto下配置连接哪个trino coordinator,以及提交查询时的user是谁。
(2)名为sql的目录,其中存放需要的.sql文件。
(3)名为benchmarks的目录,其中存放配置trino集群标识和涉及SQL集的.yaml文件,样例如下:
# tpch.yamldatasource: test-env
query-names: tpch/${query}.sql
runs: 3
prewarm-runs: 1
variables:1:query: q01,q02,q03,q04,q05,q06,q07,q08,q09,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22schema: tpch_orc_100database: hive
datasource代表连接哪个trino集群,test-env标识在(1)中代表环境信息的application-环境名.yaml系列配置中已编写引用。
query-names代表涉及哪些SQL文件,可以使用动态变量。
runs代表每条SQL除warm up外要正式跑并统计几次。
prewarm-runs代表每条SQL不计入指标统计的初期热身运行次数。
variables代表可以配置的环境变量,例如${query}引用到的.sql文件前缀、.sql中的表所来源的catalog和库名等。
variables中1:和2:等数字代表了每个sql可单独进行配置,其中schema为.sql文件中动态替换的库名。
三、使用姿势
3.1、提交自动查询任务
在benchto-driver-exec.jar所在目录执行如下命令可以查看能自定义的参数:
java -jar benchto-driver-exec.jar -h
常用的执行命令例子如下:
# 测试dev环境的tpch sql集
java -jar benchto-driver-exec.jar --profile dev --activeBenchmarks tpch
其中--profile指定提交任务的Trino环境(即之前的application-dev.yaml),--activeBenchmarks指定需要执行的SQL用例集(即之前的tpch.yaml)。SQL集中的每一条SQL默认都会先跑一次warm up,然后再跑3次正式执行(这4次算作一轮),获得各项指标的最小最大和平均值等。
3.2、查看查询执行的明细信息
除了benchto-driver-exec.jar不断打印的控制台日志外,benchto-service.jar所在机器ip的Benchto UI可以查看提交到具体环境上的SQL执行时长等信息,进入后可以选择自己提交sql集所在的集群环境,如下图所示:
以dev环境为例,点击进入DEV标签后可以看到执行过的SQL概览,如下图所示:
Name代表SQL集的名称,Schema为库名,Database其实是catalog名,Query就是sql文件的名称,Mean Duration为平均查询时长。
点击Name列中的某行SQL集名称(这里是dev_tpch),会进入对应sql的明细界面,可以看到同一条sql被统计了3次(不包含第一次warm up),下方的各种图表展示了该sql各方面的最小最大值,平均值与标准差等指标,横轴的execution id指的是这一轮中几次相同sql所执行的id:
在各种图表的最下方可以看到同一个SQL多次执行的快照信息,按id来最近时间排序,如下图所示:
点击某一次执行的时间链接,就会看到这一轮3次执行的更详细指标,如下图所示:
在明细指标的末尾还可以看到该SQL在这一轮3次执行的trino query id链接,可以进入trino UI查看一些原生信息:
上图的界面也可以通过对应环境的首页,点击对应行的时间链接进入,如下图所示:
3.3、对比组件版本前后性能
目前Benchto只能做到SQL粒度的前后对比,无法展示总体版本的前后对比,因此建议先利用集群环境上的老版本Trino先提交一轮SQL集,整轮跑完后关注下Benchto UI上提交的时间,再发布新版组件,再提交第二轮相同SQL集。
Benchto UI上有了2轮相同SQL集(分别由新老版本Trino执行)的记录后,在对应环境的首页先进入对应的SQL链接,然后在SQL明细页底部勾选要对比的两次执行时刻条目(也可以选多个时刻),再点击右上角的Compare all,如下图所示:
当然对比数据也可以导出为CSV进行其他处理,Compare all之后可以看到该SQL对应两次执行的对比图,如下所示:
比较常关注的就是elapsedTime,代表体感查询时间,其他指标例如queuedTime(在等待执行队列中的时间)、planningTime(执行计划生成时间)、finishingTime(commit元数据与等待客户端消费结果等时间)、analysisTime(从存储引擎拉取元数据并赋予执行计划的时间)、executionTime(从结束queued状态起到执行结束的时间,包括planning)等也值得关注。
id1和id2代表的执行时刻在对比图表页面的底部有展示,如下所示:
3.4、清理历史查询信息
benchmark运行一段时间后,会生成非常多的查询历史记录,对比报告的可读性会下降,此时可以在确定之前的历史信息已经不需要的前提下,清理记录benchto查询历史信息的Postgres数据库,操作步骤为:
su - postgres
psql-- 从这里开始已经进入了pg的sql命令行界面
\c postgres; --切换数据库到postgres,等同于use postgres
\dt; --等同于show tables
truncate table benchmark_runs cascade;
这样Benchto UI上的图表也都清空了。
相关文章:
使用Benchto框架对Trino进行SQL性能对比测试
有时需要对魔改源码前后的不同版本Trino引擎进行性能对比测试,提前发现改造前后是否有性能变差或变好的现象,避免影响数据业务的日常查询任务性能。而Trino社区正好提供了一个性能测试对比框架:GitHub - trinodb/benchto: Framework for runn…...
Redis之哨兵模式
什么是哨兵模式? Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是Redis高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务。 某个master服务宕机后,会把这个master下…...
Selenium自动化测试Python二:WebDriver基础
欢迎阅读WebDriver基础讲义。本篇讲义将会重点介绍Selenium WebDriver的环境搭建和基本使用方法。 WebDriver环境搭建 Selenium WebDriver 又称为 Selenium2。 Selenium 1 WebDriver Selenium 2 WebDriver是主流Web应用自动化测试框架,具有清晰面向对象 API&…...
蓝桥杯模块学习17——AT24C02存储器(深夜学习——单片机)
一、硬件电路:1、引脚功能:(1)A0-A2:决定不同设备的地址码:(2)WP:写保护二、通讯方式(IIC协议)通讯方式与PCF8591相同,可参考以下文章…...
netty
Netty的介绍Netty是异步的(指定回调处理)、基于事件驱动的网络应用框架,用于快速开发高性能、高可靠性的网络IO程序。Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景,分布式节点远程调用中Netty往往作为R…...
Django项目部署-uWSGI
Django项目部署-uWSGIDjango运维部署框架整体部署架构web服务器与web应用服务器的区别部署环境准备安装python3安装mariadb安装Django和相关模块Django托管服务器uWSGI使用uWSGI配置使用Django运维部署框架 整体部署架构 操作系统: Linux 。优势:生态系统丰富&…...
jhipster自动生成java代码的方法
一、前言 java springboot后台项目用到了jpa查询数据库,还用到了jhipster,这个东西可以自动生成基础的Controller、Service、Dao、JavaBean等相关代码,减少重复开发。 在此总结下使用方法。 二、jhipster自动生成java代码的方法 1.需要先…...
LeetCode 82. 删除排序链表中的重复元素 II
原题链接 难度:middle\color{orange}{middle}middle 题目描述 给定一个已排序的链表的头 headheadhead , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,…...
tensorflow gpu环境安装
查看本电脑支持的最高cuda版本:nvidia-smi在~/.condarc修改conda 源:channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/- https://mirrors.tuna.tsinghua.edu.cn/…...
如何在现实场景中随心放置AR虚拟对象?
随着AR的发展和电子设备的普及,人们在生活中使用AR技术的门槛降低,比如对于不方便测量的物体使用AR测量,方便又准确;遇到陌生的路段使用AR导航,清楚又便捷;网购时拿不准的物品使用AR购物,体验更…...
操作系统-处理机调度
1.处理机调度的概念、层次1.1调度的基本概念制定某种规则来决定处理任务的顺序。1.2调度的三个层次高级调度(作业调度)中级调度(内存调度)进程的挂起态与七状态模型低级调度(进程调度)小结2.进程调度的时机…...
手机截图如何提取文字?
在当今信息爆炸的时代,图文并茂已经成为了一个广告宣传的常用方式。然而,图片中的文字信息往往难以获取,尤其对于那些需要快速获取信息的人们来说,阅读图片中的文字会是一项繁琐且费时的任务。现在,我们有一个好消息要…...
vue中复制内容
vue中复制内容vue2vue-clipboard2依赖项在main.js引入使用vue3vue-clipboard3依赖项引入使用更新于:2023-02-15vue2vue-clipboard2 依赖项 “vue”: “^2.6.11” “vue-clipboard2”: “^0.3.1” 在main.js引入 import VueClipboard from vue-clipboard2 Vue.us…...
MySQL CAST()函数用法
一、语法 expr:源数据,如字符串’China’。type:目标数据类型,例如CHAR。 cast(expr AS type)二、命令说明 将任何类型的值转换为具有指定类型的值。 CAST()函数通常用于返回具有指定类型的值,以便在WHEREÿ…...
【测试工程师面试】详细记录 自己的一次面试
【测试工程师面试】详细记录 自己的一次面试 目录:导读 Linux基础 Oracle基础 编程基础 测试的基础 面试的问题 扯闲话部分: 10点刚到,先进行笔试,笔试的题目很基础,涉及到linux,涉及到oracle数据库…...
Elasticsearch 安装(二)
目录前言一、Linux 安装1、下载安装包⑴、选择需要的安装包⑵、下载解压到安装目录2、查看解压后目录结构3、启动 Elasticsearch⑴、正常启动流程⑵、启动过程遇到的问题①、启动报错②、创建运行 Elasticsearch 的用户,启动成功,但无法访问③、停止Elas…...
Java基础:异常与错误(ExceptionError)
1 缘起 某天上网冲浪时,偶然看到一个问题,说Java的Error和Exception有什么区别? 一句话:不知道。并不能很清晰地描述出个中区别。 当然,曾经也看过Throwable相关的知识,但是,并没有通过源码及注…...
VAmPI:一个包含了OWASP Top10漏洞的REST API安全学习平台
关于VAmPI VAmPI是一个包含了OWASP Top10漏洞的REST API安全学习平台,该平台基于Flask开发,该工具的主要目的是通过一个易受攻击的API来评估针对API安全检测工具的有效性,并帮助广大研究人员学习和了解API安全。 功能介绍 1、基于OWASP Top…...
springboot(6)之前端传递参数的方式 普通 集合 数组
实体类传递 首先我们在后端定义一个实体类,通过lombok插件重写 有参 无参 get set toString 方法, 然后前端发送数据,后端就会自动收到,然后属性填写 后端代码如下 AllArgsConstructor Data NoArgsConstructor public class role …...
redis分布式锁的演变过程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、直接添加Redis缓存二、使用setnx执行抢锁过程三、setnx获取锁+设置过期时间四、引入UUID解决误删锁问题五、引入Lua脚本来做删除六、对递归部分优化进行自旋七、添加自旋次数八、改为重入锁,使…...
leaflet 修改popup的样式,个性化弹窗(069)
第069个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中修改popup组件的样式,个性化弹窗。主要方法是更改css, 中增加custom-popup类名,style的样式要做穿透处理 >>>.具体方法请参考源代码。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实…...
注解ConfigurationProperties、EnableConfigurationProperties的用法
1 ConfigurationProperties ConfigurationProperties主要作用就是将prefix属性指定的前缀配置项的值绑定到这个JavaBean上 ,通过指定的前缀,来绑定配置文件中的配置。这样的好处是将配置数据与JOPO进行转换,能够管理一个类别的所有配置信息&…...
自适应布局之淘宝无限适配+rem+微信rpx自适应
一、自适应布局 所谓前端适配,就是为了让移动设计稿在大部分的移动设备上看起来有一致的展示效果,目前比较流行的方法有两种。一种是强制meta viewport宽度为设计稿宽度,一种是使用rem自适应布局的flexible.js。 二、当前流行的移动端自适应…...
esxi不能识别不兼容网卡解决方案
相信很多网友在安装测试VMWARE Esxi 6.0的时候,总会遇到无法兼容网卡的情况,本人也是遇到了再组装的台式机上测试ESXI 6.0的时候,无法识别REALTEK RTL 8111E的情况。 找了很多网友提供的博客,方法是正确的,但是不够严…...
Sizeof与Strlen的区别与联系
16年写了很多 C 与 C 相关的文章,但是后面从事了 Android 开发,就全部删掉了,无意中发现了这篇由还存在草稿箱,索性就找回来吧,也是追忆当年学习的青葱岁月 Sizeof与Strlen的区别与联系 一、sizeof sizeof(…)是运算…...
力扣(LeetCode)413. 等差数列划分(2023.02.15)
如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。 …...
蓝桥杯刷题——基础篇(一)
这部分题目,主要面向有志参加ACM与蓝桥杯竞赛的同学而准备的,蓝桥杯与ACM考察内容甚至评测标准基本都一样,因此本训练计划提供完整的刷题顺序,循序渐进,提高代码量,巩固基础。因竞赛支持C语言、C、Java甚至…...
Java基础知识快速盘点(三)
一,构造器 创建一个类的方法时会调用该类的构造器 构造器,也叫构造方法 构造器是属于类的,对象不可调用 构造方法没有返回值类型 构造方法一般用public修饰,也可用private修饰,例如 public class Test {private T…...
vscode编程小插件之Doxygen和Better Align
一、插件Doxygen:配置相应文件、函数说明项。 1、扩展商店,搜索Doxygen,如下图1,安装。 图1 2、设置项中,选择扩展设置,如图2 图2 3、配置版本、作者邮箱、作者名称、日期格式等等,如图3 4、定义函数后&…...
指 针
1.指针指针的作用: 可以通过指针间接访问内存(可以通过指针的保存一个地址(指针--地址))内存编号是从0开始记录的,一般用十六进制数字表示。可以利用指针变量保存地址指针变量的定义和使用指针变是定义语法: 数据类型 …...
数据库端口 wordpress/重庆快速网络推广
文章目录前言一、信噪比是什么?(1)噪声怎么来的?(2)信噪比的公式二、降低信号传输过程中噪声的措施总结前言 有一次在做电路的时候,需要DDS输出小信号的正弦波,比如说20mVÿ…...
个人网站可以做充值/电子商务
Java程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定功能。Java提供了System类和Runtime类来与程序的运行平台进行交互。 System类 System类代表当前Java程序的运行平台,程序不能创建System类的对象&am…...
网站制作什么做/搜索引擎优化方法有哪些
Transactional(readOnly false, rollbackFor BusinessException.class) 设置下这个注解,处理下事务即可。...
网站建设 图片/如何制作链接推广
题目:部分遮挡区域的超像素正则化精确光场深度估计 Abstract 深度估计是光场摄影应用的基本问题。近年来的方法是: 制定成本项以进行更稳健的匹配分析嵌入在极线平面图像中的场景结构的几何形状 但是,当前最先进的方法在处理复杂的遮挡结构…...
做网站的用处/html做一个简单的网页
NFS相信应该都很熟悉了,但是我们对它的性能一直有所诟病。Oracle在10g版本通过允许对数据库文件直接IO引入ASM。在11g版本中,Oracle对NFS提供了类似的增强,为了改进NFS的性能,开创了DNFS(Direct Network File System)的数据库世界…...
济南能源建设网站/台州网站建设
今天无聊看了一下这个复选框的用法,用它来制作选择题的确是不错的选择。分别在组件面板拖动四个组件, 修改它的标签,让它成为自己适合的答案。还有一些data 的值,和选中状态等。 设置完组件的属性后,开始我们的制作&am…...