GreatSQL TPC-H 效能測試報告正式釋出!

GreatSQL發表於2024-02-28

file

GreatSQL TPC-H 效能測試報告 - (2024 年 2 月28日)

完整效能測試報告:https://greatsql.cn/docs/8032-25/user-manual/10-optimze/3-3-benchmark-greatsql-tpch-report.html

1、概述

本次測試針對GreatSQL資料庫基於標準 TPC-H 場景的測試。

TPC-H(商業智慧計算測試)是美國交易處理效能委員會(TPC,TransactionProcessing Performance Council)組織制定的用來模擬決策支援類應用的一個測試集。目前,學術界和工業界普遍採用 TPC-H 來評價決策支援技術方面應用的效能。這種商業測試可以全方位評測系統的整體商業計算綜合能力,對廠商的要求更高,同時也具有普遍的商業實用意義,目前在銀行信貸分析和信用卡分析、電信運營分析、稅收分析、菸草行業決策分析中都有廣泛的應用,TPC-H 查詢包含八張資料表和 22 條複雜 SQL 查詢,大多數查詢包含多表聯接(JOIN)、子查詢和聚合查詢等。

GreatSQL資料庫是一款開源免費資料庫,可在普通硬體上滿足金融級應用場景,具有高可用高效能高相容高安全等特性,可作為MySQL或Percona Server for MySQL的理想可選替換。

2、測試環境

配置 備註
作業系統 OS:CentOS Linux release 7.9.2009 (Core)
核心:3.10.0-1160.el7.x86_64
CPU Intel(R) Xeon(R) Gold 6238 CPU @ 2.10GHz * 4
記憶體 251G
磁碟 INTEL SSDPE2KE032T8
資料庫 GreatSQL 8.0.32-25, Release 25, Revision 79f57097e3f

提示:在下面執行TPC-H測試時,設定了Rapid引擎最大可使用的記憶體及執行緒數。

greatsql> SET GLOBAL rapid_memory_limit = 68719476736;
greatsql> SET GLOBAL rapid_worker_threads = 32;

3、測試表結構和資料量

各表資料量對比:

表名 TPC-H SF100資料量 TPC-H SF300資料量 備註
region 5 5 地區資訊
nation 25 25 國家表
supplier 1000000 3000000 供應商資訊
part 20000000 60000000 零件表
customer 15000000 45000000 消費者表
partsupp 80000000 240000000 配件供應表
orders 150000000 450000000 訂單表
lineitem 600037902 1799989091 訂單明細表

Rapid引擎表空間壓縮率:

庫名 InnoDB表空間檔案總大小 Rapid引擎表空間總大小 壓縮率
TPC-H SF100 184570593436 28728373248 6.42
TPC-H SF300 591644573888 74334864443 7.96

各表結構關係如下圖所示:

file

4、測試結果

GreatSQL 8.0.32-25中,採用全新的Rapid儲存引擎,使得其在TPC-H效能測試中表現大大優於此前的其他版本,也大大優於MySQL社群版、Percona Server MySQL、MariaDB等資料庫。

在TPC-H SF100場景下,執行完全部22個TPC-H查詢SQL總耗時為79.28秒。在TPC-H SF300場景下,執行完全部22個TPC-H查詢SQL總耗時為386.195秒

每條SQL詳細耗時如下:

TPC-H Query GreatSQL TPC-H SF100(32C64G)耗時(秒) GreatSQL TPC-H SF300(32C64G)耗時(秒)
Q1 1.184 3.537
Q2 0.924 3.865
Q3 1.324 4.167
Q4 3.678 22.712
Q5 1.287 4.119
Q6 0.344 0.959
Q7 5.48 50.217
Q8 1.13 3.534
Q9 7.311 31.872
Q10 2.885 15.301
Q11 0.477 0.921
Q12 0.799 2.294
Q13 3.758 10.997
Q14 0.966 2.471
Q15 2.831 11.898
Q16 1.194 3.487
Q17 8.537 27.523
Q18 13.007 108.237
Q19 1.892 4.046
Q20 4.21 10.668
Q21 11.965 60.084
Q22 2.513 3.286
總耗時 77.696 386.195

GreatSQL SF100 vs SF300(32C64G)對比示意圖如下

file

5、測試步驟

5.1 安裝 GreatSQL

請參考GreatSQL手冊內容:安裝指南 ➥https://greatsql.cn/docs/8032-25/user-manual/4-install-guide/0-install-guide.html 完成GreatSQL安裝。

5.2 生成 TPC-H 測試資料

請參考GreatSQL手冊內容:TPC-H效能測試 ➥https://greatsql.cn/docs/8032-25/user-manual/10-optimze/3-2-benchmark-tpch.html 完成TPC-H工具編譯安裝。

執行 TPC-H dbgen 工具,生成資料檔案,一共會生成 8 個表對應的 tbl 資料檔案,例如:

$ ./dbgen -vf -s 100
...

$ ls -l *tbl
-rw-r--r-- 1 root root  2463490271 Sep 26 09:20 customer.tbl
-rw-r--r-- 1 root root 79579694556 Sep 26 09:20 lineitem.tbl
-rw-r--r-- 1 root root        2224 Sep 26 09:20 nation.tbl
-rw-r--r-- 1 root root 17793116301 Sep 26 09:20 orders.tbl
-rw-r--r-- 1 root root 12209211160 Sep 26 09:20 partsupp.tbl
-rw-r--r-- 1 root root  2453234158 Sep 26 09:20 part.tbl
-rw-r--r-- 1 root root         389 Sep 26 09:20 region.tbl
-rw-r--r-- 1 root root   142869803 Sep 26 09:20 supplier.tbl

也可以參考 duckdb_dbgen.pyhttps://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/tpch/3.0.1/duckdb_dbgen.py 指令碼做法,利用duckdb並行生成測試資料。

5.3 建立 TPC-H 測試資料庫表並匯入資料

參考GreatSQL社群提供的TPC-H資料庫表初始化指令碼:tpch-create-table.sqlhttps://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/tpch/3.0.1/tpch-create-table.sql 完成TPC-H測試資料庫表建立。

$ mysql -f < tpch-create-table.sql
$ mysqlshow tpch100
Database: tpch100
+----------+
|  Tables  |
+----------+
| customer |
| lineitem |
| nation   |
| orders   |
| part     |
| partsupp |
| region   |
| revenue0 |
| supplier |
+----------+

利用GreatSQL的 parallel load data特性https://greatsql.cn/docs/8032-25/user-manual/5-enhance/5-1-highperf-parallel-load.html 並行匯入TPC-H測試資料。

需要先修改GreatSQL選項secure_file_priv設定,指向上述 workdir 所在目錄,重啟GreatSQL使之生效。

參考GreatSQL社群提供的併發匯入指令碼:load-data-parallel.shhttps://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/tpch/3.0.1/load-data-parallel.sh 完成資料匯入。

提示:執行LOAD DATA匯入資料時,可能會在 tmpdir 產生臨時檔案,因此要保證 tmpdir 有足夠的剩餘可用磁碟空間。

5.4 確認Rapid引擎設定,並載入資料到secondary engine

資料匯入完成後,在開始執行TPC-H測試前,需要先將測試資料載入到secondary engine引擎中。

先執行下面命令,動態修改Rapid引擎最大可使用記憶體,其餘相關選項均為預設值:

greatsql> SET GLOBAL rapid_memory_limit = 68719476736;
greatsql> SET GLOBAL rapid_worker_threads = 32;

之後,執行以下命令載入測試資料到secondary engine:

greatsql> alter table customer secondary_load;
alter table lineitem secondary_load;
alter table nation secondary_load;
alter table orders secondary_load;
alter table part secondary_load;
alter table partsupp secondary_load;
alter table region secondary_load;
alter table supplier secondary_load;

這個過程需要一定時間,請耐心等待。

5.5 執行 TPC-H 測試

參考GreatSQL社群提供的TPC-H效能測試指令碼,完成測試,並記錄各個SQL的耗時。

該測試指令碼大概工作模式如下:

  1. 先執行22個查詢SQL,進行資料預熱,每條SQL各執行2次。

  2. 再分別執行22個查詢SQL,每個SQL各執行3次。

  3. 每次執行SQL都會記錄其起止時間,及其耗時,如下面例所示:

[2023-09-27 01:38:45] BEGIN RUN TPC-H Q1 1 times
[2023-09-27 01:38:46] TPC-H Q1 END, COST: 1.301s


[2023-09-27 01:38:46] BEGIN RUN TPC-H Q1 2 times
[2023-09-27 01:38:47] TPC-H Q1 END, COST: 0.787s

上述結果中的 COST: 1.301s ,即為本SQL的執行耗時:1.301秒。

完整效能測試報告:https://greatsql.cn/docs/8032-25/user-manual/10-optimze/3-3-benchmark-greatsql-tpch-report.html


Enjoy GreatSQL 😃

關於 GreatSQL

GreatSQL是適用於金融級應用的國內自主開源資料庫,具備高效能、高可靠、高易用性、高安全等多個核心特性,可以作為MySQL或Percona Server的可選替換,用於線上生產環境,且完全免費併相容MySQL或Percona Server。

相關連結: GreatSQL社群 Gitee GitHub Bilibili

GreatSQL社群:

社群部落格有獎徵稿詳情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技術交流群:

微信:掃碼新增GreatSQL社群助手微信好友,傳送驗證資訊加群

image-20221030163217640

相關文章