使用Benchto框架对Trino进行SQL性能对比测试

news2024/11/18 19:49:17

有时需要对魔改源码前后的不同版本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/postgres
    username: postgres
    password: postgres
    driver-class-name: org.postgresql.Driver
  jpa:
    open-in-view: false
    hibernate.ddl-auto: validate
    properties:
      hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.EhCacheRegionFactory
      hibernate.cache.use_second_level_cache: true
      hibernate.cache.use_query_cache: true
      javax.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.yaml

data-sources:
  test-env:
    url: jdbc:trino://x.x.x.x:8080
    username: benchto
    driver-class-name: io.trino.jdbc.TrinoDriver

benchmarks: benchmarks
sql: sql
query-results-dir: results

benchmark-service:
  url: http://x.x.x.x:18801
environment:
  name: DEV

benchmark:
  feature:
    presto:
      metrics.collection.enabled: true
      queryinfo.collection.enabled: true

presto:
  url: http://x.x.x.x:8080
  username: 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.yaml

datasource: 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,q22
    schema: tpch_orc_100
    database: 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上的图表也都清空了。

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

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

相关文章

金额大写转换

金额大写转换(C语言 ) 本人喜欢探索各种算法。见站内好多此类文章,有些很好,有些不完整。姑且也来凑下热闹。 金额大写应用在很多方面,如支票、发票、各种单据,各种财务凭证,合同文本金额部分。…

【逐步剖C】-第七章-数据的存储

一、数据类型介绍 1. C语言基本内置类型: char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度浮点数2. 类型的基本归类 (1)整型: charunsign…

c语言指针

指针 指针是存放地址的变量,也可以说指针地址。 对于定义p(这里的话,只是定义,说明p是指针),p作为一个指针去指向存放数据的位置,而p意思是取(p指向的内存位置的数据)&…

es启动,浏览器无法访问9200

通过brew成功启动es,但是访问http://localhost:9200/报错,连接被拒绝 %:brew services start elasticsearch-full> Successfully started elasticsearch-full (label: homebrew.mxcl.elasticsearc可能原因如下: 1、安装java 要先安装ja…

聊聊async/await原理

前言 我们知道Promise的出现极大地解决了回调地狱,但是如果使用流程非常复杂的话,就非常容易过多地调用Promise的then()方法,这样也不利于使用和阅读。 例如:我希望在请求 www.baidu.com 后输出请求的结果,再去请求 …

【基于腾讯云的远程机械臂小车】

1. 项目来源 项目源码地址:https://gitcode.net/VOR234/robot_arm_car/-/blob/master/TencentOS-tiny123.zip https://gitee.com/vor2345/robot_arm_car 程序分别 视频演示:https://www.bilibili.com/video/BV15M4y1D7MD/?vd_source530bf85167de80ff…

46.在ROS中实现global planner(2)

前文实现了一个global planner的模板,并且可以工作,本文将实现astar算法,为后续完成一个astar global planner做准备 1. AStar简介 1.1 AStar Astar算法是一种图形搜索算法,常用于寻路。Astar算法原理网上可以找到很多,简单的说…

企业/品牌新闻稿怎么写?

撰写出优质的企业/品牌新闻稿对于任何一个希望通过新闻媒体推广自己品牌的公司来说都是十分重要的。在新闻稿中,您可以通过介绍自己的公司,披露最新的产品和服务信息以及宣传最新的成就来吸引媒体和读者的关注。下面是一些关于如何撰写出优质的企业/品牌…

【工具篇】Firmwalker车联网实用小工具介绍

前言 firmwalker这个小工具在工作中也一直在用,正好领导说要写一篇这个工具的分析说明文章,经过询问可以发表博客。由于一直在用,所以末尾优劣势部分存在一些主观想法。 编写不易,如果能够帮助到你,希望能够点赞收藏加…

SpringCloud, SpringCloud-Alibaba,Nacos概述

目录 SpingCloud概述 1.SpringCloud是什么? 2.SpringCloud和SpringBoot的关系 3.SpringCloud-Alibaba概述 3.1.Netflix公司项目进入维护模式 3.2.Spring Cloud Alibaba是什么? 3.3.Spring Boot和Spring Cloud的版本号说明 3.Nacos总结 SpingCloud概述 1.Spri…

蓝桥杯刷题——基础篇(一)

这部分题目,主要面向有志参加ACM与蓝桥杯竞赛的同学而准备的,蓝桥杯与ACM考察内容甚至评测标准基本都一样,因此本训练计划提供完整的刷题顺序,循序渐进,提高代码量,巩固基础。因竞赛支持C语言、C、Java甚至…

【JAVA八股文】算法、数据结构、基础设计模式

算法、数据结构、基础设计模式1. 二分查找2. 冒泡排序3. 选择排序4. 插入排序5. 希尔排序6. 快速排序7. ArrayList8. Iterator9. LinkedList10. HashMap1)基本数据结构2)树化与退化3)索引计算4)put 与扩容5)并发问题6&…

从lettcue插件看skywalking

lettcue 的写操作是异步的。io.lettuce.core.RedisChannelWriter.write进行写入,io.lettuce.core.protocol.RedisCommand进行异步读取数据 skywalking 插件大体逻辑 在方法执行前,通过ContextManager创建span创建span的同时,判断trace上下文…

零信任-Akamai零信任介绍(6)

​Akamai零信任介绍 Akamai是一家专注于分布式网络服务的公司,它提供了一系列的互联网内容和应用加速服务。关于Akamai的零信任,它指的是Akamai的安全架构中不存在任何一个环节是可以被单独的控制或影响的,因此可以提供更高的安全性。通过使…

ChatGPT is not all you need,一文看尽SOTA生成式AI模型:6大公司9大类别21个模型全回顾(三)

文章目录ChatGPT is not all you need,一文看尽SOTA生成式AI模型:6大公司9大类别21个模型全回顾(三)Text-to-Text 模型ChatGPTLaMDAPEERMeta AI Speech from BrainText-to-Code 模型CodexAlphacodeText-to-Science 模型GalacticaM…

超简单!pytorch入门教程:Tensor

超简单!pytorch入门教程:Tensor 一、pytorch安装 安装pytorch之前,需要安装好python(废话),还没安装过python的宝宝请先移步到廖雪峰的python教程,待安装熟悉完之后,再过来这边。 …

C代码中访问链接脚本中的符号

一、目的在之前的《GNU LD脚本命令语言(一)》、《GNU LD脚本命令语言(二)》我们介绍了GNU链接脚本的知识点,基本上对链接脚本中的SECTION、REGION、以及加载地址与执行地址的关系等内容有了一定的了解。本篇主要讲解链…

工业4.0是如何优化垃圾处理行业的

如今,工业4.0正在影响着制造业和物流等行业,其发展潜力在未来还有望进一步扩大。一些全球领先的垃圾处理公司已经开始在水处理和废物回收等领域应用工业4.0。工业4.0的创新给这个领域带来了一些必要的改进。随着环境危机的加剧,垃圾处理行业面…

2022年最新数据库调查报告:超八成DBA月薪过万,你拖后腿了吗?

数据库管理员属于IT行业高薪职业的一种,近几年关于数据库管理员的薪资统计文章也层出不穷,那么当前,DBA们的薪资究竟到达了怎样的水平呢?墨天轮数据社区发布最新《2022年墨天轮数据库大调查报告》,数据显示超八成DBA月…

《MySQL学习》 全局锁和表锁

一.MySQL锁的分类 二.全局锁 全局锁对整个数据库加锁,可以执行如下命令,整个数据库都将处于只读状态。 Flush tables with read lock ;我们可以执行 unlock table进行解锁 unlock table ;读操作 非读操作(阻塞) 全局锁的典型使…