本文為您介紹如何使用TPC-H(商業智慧計算測試)對OLAP查詢情境進行效能測試。
TPC-H簡介
以下文字描述引用自TPC Benchmark H (TPC-H):
“TPC-H是一個決策支援基準,由一套面向業務的臨時查詢和並發資料修改組成。選擇的查詢和填充資料庫的資料具有廣泛的行業相關性。該基準測試說明了決策支援系統可以檢查大量資料,執行高度複雜的查詢,並解答關鍵的業務問題。”
詳情請參見TPCH Specification。
本文的TPC-H的實現基於TPC-H的基準測試,並不能與發行的TPC-H基準測試結果相比較,本文中的測試並不符合TPC-H基準測試的所有要求。
資料集簡介
TPC-H是由國際交易處理效能委員會(Transaction Processing Performance Council)制定的用來類比決策支援類應用的一個測試集。目前在學術界和工業界普遍採用它來評價決策支援技術方面應用的效能。
TPC-H是根據真實的生產運行環境來建模,類比了一套銷售系統的資料倉儲。其共包含8張表,資料量可設定從1 GB~3 TB不等。其基準測試共包含了22個查詢,主要評價指標各個查詢的回應時間,即從提交查詢到結果返回所需時間。測試結果可以綜合反映系統處理查詢時的能力。詳情請參見TPC-H基準。
操作步驟
本測試情境直接使用TPC-H中的22條查詢語句進行測試。測試資料量會直接影響測試結果,TPC-H的產生工具中使用SF(scale factor)控制產生資料量的大小,1SF對應1 GB。
以上資料量僅針對未經處理資料的資料量,不包括索引等空間佔用,因此在準備環境時,您需要預留更多的空間。
準備工作。
您需要準備OLAP查詢情境所需的基礎環境。
說明為減少可能對測試結果有影響的變數,建議您每次使用新建立的執行個體進行測試,不要使用升降配的執行個體。
建立ECS執行個體,詳情請參見執行個體建立方式介紹。
本文測試的ECS執行個體規格如下:
執行個體規格:ecs.g6e.4xlarge
作業系統:CentOS 7.9
資料盤:磁碟類型為ESSD雲端硬碟,具體資料容量根據需要測試的資料量大小決定。
建立StarRocks執行個體,詳情請參見建立執行個體。
本次測試BE計算資源配置選擇了8 CU(即8核32 GB)。您可以根據實際業務需求,選擇計算資源配置。
說明建議StarRocks執行個體與ECS執行個體在同一地區的同一VPC下。
組態工具包參數。
登入ECS執行個體,詳情請參見串連ECS執行個體。
執行以下命令,下載starrocks-benchmark測試載入器包並解壓。
wget https://emr-olap.oss-cn-beijing.aliyuncs.com/packages/starrocks-benchmark-for-serverless.tar.gz tar xzvf starrocks-benchmark-for-serverless.tar.gz
執行以下命令,進入starrocks-benchmark-for-serverless目錄。
cd starrocks-benchmark-for-serverless
執行
vim group_vars/all
命令,配置Benchmark所需參數。# mysql client config login_host: fe-c-8764bab92bc6****-internal.starrocks.aliyuncs.com login_port: 9030 login_user: admin login_password: xxxx # oss config bucket: "" endpoint: "" access_key_id: "" access_key_secret: "" # benchmark config scale_factor: 1 work_dir_root: /mnt/disk1/starrocks-benchmark/workdirs dataset_generate_root_path: /mnt/disk1/starrocks-benchmark/datasets
參數詳細描述如下表所示。
參數
描述
備忘
login_host
StarRocks執行個體中FE的內網地址。
您可以在StarRocks執行個體的執行個體詳情頁簽的FE詳情地區,查看內網地址。
重要不建議使用公網地址。
用戶端串連StarRocks服務的參數。
login_port
StarRocks執行個體中FE的服務連接埠,預設為9030。
您可以在StarRocks執行個體的執行個體詳情頁簽的FE詳情地區,查看查詢連接埠。
login_user
StarRocks執行個體的初始使用者。
login_password
StarRocks執行個體的初始使用者的密碼。
bucket
OSS Bucket名稱。
選擇性參數,OSS配置。配置後測試資料集會產生到OSS。
endpoint
OSS的訪問網域名稱。
access_key_id
阿里雲帳號的AccessKey ID。
access_key_secret
阿里雲帳號的AccessKey Secret。
scale_factor
資料集的比例因素,控制產生資料量的大小。預設值為1,單位為GB。
Benchmark配置。
work_dir_root
工作目錄的根目錄,用於存放TPCH相關的建表語句、執行SQL等資料。預設值為/mnt/disk1/starrocks-benchmark/workdirs。
dataset_generate_root_path
存放產生測試資料集的路徑。預設值為/mnt/disk1/starrocks-benchmark/datasets。
如果配置了OSS,則會將對應的Bucket mount到該路徑。
執行以下命令,進行全流程自動化TPC-H測試。
bin/run_tpch.sh
全流程自動化進行TPC-H測試,主要包括database、table、22條SQL Queries、以及dataset的產生和載入、並執行Query進行測試。
其他動作:
執行以下命令,單獨執行資料集載入。
bin/run_tpch.sh reload
執行以下命令,單獨執行TPC-H查詢測試。
bin/run_tpch.sh query
查看測試結果。
測試結果概覽。
bin/run_tpch.sh
命令執行完後會直接輸出測試結果。測試結果類似下所示。TASK [tpc_h : debug] **************************************************************************************************************************************** ok: [10.1.**.**] => { "command_output.stdout_lines": [ "[info] 2022-03-01 09:51:23.295 | Run sql queries started.", "[info] 2022-03-01 09:51:23.330 | Run q10.sql started.", "[info] 2022-03-01 09:51:23.913 | Run q10.sql finished. Time taken: 0:00:00, .557 seconds", "[info] 2022-03-01 09:51:23.923 | Run q11.sql started.", "[info] 2022-03-01 09:51:24.026 | Run q11.sql finished. Time taken: 0:00:00, .100 seconds", "[info] 2022-03-01 09:51:24.038 | Run q12.sql started.", "[info] 2022-03-01 09:51:24.192 | Run q12.sql finished. Time taken: 0:00:00, .151 seconds", "[info] 2022-03-01 09:51:24.204 | Run q13.sql started.", "[info] 2022-03-01 09:51:24.553 | Run q13.sql finished. Time taken: 0:00:00, .347 seconds", "[info] 2022-03-01 09:51:24.563 | Run q14.sql started.", "[info] 2022-03-01 09:51:24.665 | Run q14.sql finished. Time taken: 0:00:00, .098 seconds", "[info] 2022-03-01 09:51:24.675 | Run q15.sql started.", "[info] 2022-03-01 09:51:24.852 | Run q15.sql finished. Time taken: 0:00:00, .175 seconds", "[info] 2022-03-01 09:51:24.864 | Run q16.sql started.", "[info] 2022-03-01 09:51:25.008 | Run q16.sql finished. Time taken: 0:00:00, .142 seconds", "[info] 2022-03-01 09:51:25.018 | Run q17.sql started.", "[info] 2022-03-01 09:51:25.269 | Run q17.sql finished. Time taken: 0:00:00, .248 seconds", "[info] 2022-03-01 09:51:25.280 | Run q18.sql started.", "[info] 2022-03-01 09:51:25.800 | Run q18.sql finished. Time taken: 0:00:00, .518 seconds", "[info] 2022-03-01 09:51:25.810 | Run q19.sql started.", "[info] 2022-03-01 09:51:25.943 | Run q19.sql finished. Time taken: 0:00:00, .130 seconds", "[info] 2022-03-01 09:51:25.953 | Run q1.sql started.", "[info] 2022-03-01 09:51:26.295 | Run q1.sql finished. Time taken: 0:00:00, .339 seconds", "[info] 2022-03-01 09:51:26.305 | Run q20.sql started.", "[info] 2022-03-01 09:51:26.708 | Run q20.sql finished. Time taken: 0:00:00, .400 seconds", "[info] 2022-03-01 09:51:26.720 | Run q21.sql started.", "[info] 2022-03-01 09:51:27.323 | Run q21.sql finished. Time taken: 0:00:00, .600 seconds", "[info] 2022-03-01 09:51:27.334 | Run q22.sql started.", "[info] 2022-03-01 09:51:27.403 | Run q22.sql finished. Time taken: 0:00:00, .065 seconds", "[info] 2022-03-01 09:51:27.415 | Run q2.sql started.", "[info] 2022-03-01 09:51:27.632 | Run q2.sql finished. Time taken: 0:00:00, .213 seconds", "[info] 2022-03-01 09:51:27.648 | Run q3.sql started.", "[info] 2022-03-01 09:51:27.917 | Run q3.sql finished. Time taken: 0:00:00, .262 seconds", "[info] 2022-03-01 09:51:27.936 | Run q4.sql started.", "[info] 2022-03-01 09:51:28.150 | Run q4.sql finished. Time taken: 0:00:00, .210 seconds", "[info] 2022-03-01 09:51:28.172 | Run q5.sql started.", "[info] 2022-03-01 09:51:28.954 | Run q5.sql finished. Time taken: 0:00:00, .778 seconds", "[info] 2022-03-01 09:51:28.976 | Run q6.sql started.", "[info] 2022-03-01 09:51:29.080 | Run q6.sql finished. Time taken: 0:00:00, .103 seconds", "[info] 2022-03-01 09:51:29.096 | Run q7.sql started.", "[info] 2022-03-01 09:51:29.445 | Run q7.sql finished. Time taken: 0:00:00, .346 seconds", "[info] 2022-03-01 09:51:29.460 | Run q8.sql started.", "[info] 2022-03-01 09:51:32.692 | Run q8.sql finished. Time taken: 0:00:03, 3.229 seconds", "[info] 2022-03-01 09:51:32.703 | Run q9.sql started.", "[info] 2022-03-01 09:51:33.318 | Run q9.sql finished. Time taken: 0:00:00, .611 seconds", "[info] 2022-03-01 09:51:33.324 | Run sql queries finished. Time taken: 0:00:10, 10.026 seconds" ] } TASK [tpc_h : debug] ******************************************************************************************************************************************************************************** ok: [10.1.0.91] => { "work_dir": "/mnt/disk1/starrocks-benchmark/workdirs/tpc_h/sf1" }
測試結果詳情。
成功執行
bin/run_tpch.sh
命令後,系統會構建好整個TPC-H測試的工作目錄並輸出<work_dir>目錄的路徑資訊,您可以切換到該路徑下查看相關的Query語句、建表語句和執行日誌等資訊。說明本樣本的<work_dir>為/mnt/disk1/starrocks-benchmark/workdirs/tpc_h/sf1。
您可以通過命令
cd <work_dir>/logs
進入工作目錄的Logs下,查看測試結果以及執行SQL的詳細結果。<work_dir>的目錄結果如下所示。
<work_dir>/ ├── config # run.sh run_mysql.sh指令碼的配置。 ├── logs # 最近一次TPC-H執行日誌。 │ ├── *.sql.err │ ├── *.sql.out │ └── run.log ├── queries # TPC-H涉及的22條SQL Query。 │ ├── ddl │ │ └── create_tables.sql # TPC-H建表語句。 │ └── *.sql ├── run_mysql.sh ├── run.sh # 全量執行TPC-H的Query。 └── tpch_tools # dbgen工具包。