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 |
各表結構關係如下圖所示:
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)對比示意圖如下
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.py ➥ https://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.sql ➥ https://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.sh ➥ https://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的耗時。
該測試指令碼大概工作模式如下:
-
先執行22個查詢SQL,進行資料預熱,每條SQL各執行2次。
-
再分別執行22個查詢SQL,每個SQL各執行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
技術交流群:
微信:掃碼新增
GreatSQL社群助手
微信好友,傳送驗證資訊加群
。