聊聊数仓中 TPCD-DS&TPC-H 与查询性能的那些事儿
本文分享自华为云社区《GaussDB(DWS) 《DWS之TPCD-DS&TPC-H与查询性能的那些事儿》》,作者: 一剑战八荒 。
1 综述
本文目标在于,详细讲述使用 GaussDB(DWS)时,如何使用 TPC-DS/TPC-H 等标准数据模型,获取 DWS 的查询性能数据。主要包括,整体流程概述,DWS 集群和 ECS 弹性云服务器环境准备,TPC-DS/TPC-H 造数,建表与数据导入,执行查询与结果收集四个章节。
受限于编辑器的显示,为了更好地阅读效果,烦请下载附件的原版文档查看,获取相关脚本。
其中涉及的很多操作细节无法一一展开叙述,以梳理和展示整体的逻辑为主。其中主要涉及的工具 OBS/GDS/JDBC copy 后续会单独开篇叙述。若有无法解决的疑问,欢迎评论留言。
2 整体流程概述
3 DWS 集群和 ECS 弹性云服务器环境准备
3.1 创建 ECS 弹性云服务器
3.2 创建 DWS 数据仓库
4 TPC-DS/TPC-H 造数
4.1 准备数据生成工具
远程连接 ECS 弹性云
执行 yum install git,安装 git
执行 yum install gcc,安装 gcc
执行 mkdir –p /data1/script/tpcds-kit/tpcds1000X ; mkdir –p /data1/script/tpch-kit/tpch100X 创建 tpc-ds 或者 tpc-h 的存放目录
TPC-DS 造数工具 dsdgen 请从官网获取最新版本。
通过 FTP 或者 OBS 服务上传到 ECS 的 /data1/script/tpcds-kit;(OBS 使用方法详见附录 1)
TPC-H 造数工具可直接 git clone 下载。
cd /data1/script/tpch-kit;
git clone https://github.com/gregrahn/tpch-kit.git
解压 tpch 的包,进入 dbgen 目录,make 编译对应的造数工具 dbgen
解压 tpcds 的包,进入 tools 目录,make 编译对应的造数工具 dsdgen
4.2 生成数据文件
生成 TPCH 数据文件
进入 dbgen 目录后,执行./dbgen –s 100 > ./dbgen_100.log 2>&1 &,下发生成 100Xtpch 数据的命令到后台执行
可以通过 du –sh dbgen/*.tbl,判断数据文件的生成进度。100Xtpch 数据文件总大小约 107GB,
也可以通过 ps ux|grep dbgen,查看生成数据文件的进程是否退出
生成 TPCDS 数据文件
因为 tpcds1000X 的数据,单个标的数据文件较大,我们采取分片生成的策略。
进入 tools 目录后,执行
其中,
-sc 指定数据规模
-parallel 指定分片数
-child 指定当前是生成分片中的第几片
-dir 指定生成数据文件存放的目录
可以通过 du –sh tpcds100X/*.dat,判断数据文件的生成进度。1000Xtpcds 数据文件总大小约 920GB,
也可以通过 ps ux|grep dsdgen,查看生成数据文件的进程是否退出。
5 建表与数据导入
5.1 GDS 方式导入
5.1.1 从数据仓库服务的连接管理页面下载 ECS 对应版本的 gsql 客户端,通过 ftp 或 obs 上传到 ECS 上;(OBS 使用方法详见附录 1)
5.1.2 在 ECS 上部署 GDS,详见华为云官方资料https://support.huaweicloud.com/tg-dws/dws_07_0759.html
5.1.3 在 ECS 上通过 gsql 工具连接集群,连接群集群所需的 ip 和端口号信息,可以从数据仓库服务的连接管理页面获取
5.1.4 在 ECS 上使用 gsql 连接集群,创建 tpch/tpcds 的内表和 gds 外表。建表语句详见如下 sql 文件,
5.1.5 在 ECS 使用 gsql 连接集群,通过 GDS 外表,使用 insert into [目标表] select * from [目标表外表]的方式导入数据到集群内。
5.2 JDBC copy 方式导入
5.2.1 从数据仓库服务的连接管理页面下载 ECS 对应版本的 JDBC 驱动,通过 ftp 或 obs 上传到 ECS 上;(OBS 使用方法详见附录 1)
5.2.2 上传 JDBC 驱动和 copy 的 java 脚本到 ECS,此处提供 dws_copy.java 源码
5.2.3 在 ECS 上 javac 编译 java 文件,然后生成 copy 编译后源码和 JDBC 驱动的 jar 包,Copy.jar。编译和生成 jar 包详细流程如下图,
5.2.4 在 ECS 上 java –jar Copy.jar 通过 JDBC copy 数据到集群内。
可执行源码和二次封装的 shell JDBC 导数执行脚本详见如下压缩包
6 执行查询与结果收集
6.1 通过编写 shell 脚本自动化执行查询和结果收集。
脚本压缩包如下,其中包含 query.conf 和 run_query.sh 两个文件。
query.conf 为集群信息配置文件,包含如下四个变量
db_name=tpcds_test 数据库名称
db_port=6000 数据库端口号
db_user=tpcds_user 数据库用户
user_passwd=Gauss_234 数据库用户密码
编辑 query.conf 为集群对应的信息后,执行 sh run_query.sh 即可开始查询执行和结果收集。
注意事项:
gsql 客户端的使用需要每次连接后,source gsql_env,执行查询脚本前请确认 gsql 可执行;
每个查询会跑 6 次,一次收集执行计划,两次预热,三次正式查询,最终结果取后三次查询的平均值;
查询脚本执行后会立即生成 query_log_yymmdd_hhmmss 名称的目录,其中
exlain_log 子目录存放查询计划,
pre_warm 子目录存放预热执行结果,
real_test 子目录存放正式查询执行结果,
query_result.csv 文件,csv 格式汇总所有查询的执行结果,csv 中结果实例如下图
7 附录
7.1 华为云 OBS 官方使用指导
https://support.huaweicloud.com
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/9bdbecb93d531c4a3eae1b987】。文章转载请联系作者。
评论