摘要:詳細講述使用GaussDB(DWS)時,如何使用TPC-DS/TPC-H等標准數據模型,獲取DWS的查詢性能數據。
本文分享自華為雲社區《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目錄后,執行
for c in {1..10};do (./dsdgen –sc 1000 –parallel 10 –child ${c} –dir /data1/script/tpcdsk-kit/tpcds1000X > /dev/null 2>&1 &);done
其中,
-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/browsertg-obs/obs_03_1000.html