openGauss/MogDB的TPCH測試
TPC-H是一個決策支援基準(Decision Support Benchmark),它由一套面向業務的特別查詢和併發資料修改組成。查詢和填充資料庫的資料具有廣泛的行業相關性。這個基準測試演示了檢查大量資料、執行高度複雜的查詢並回答關鍵業務問題的決策支援系統。TPC-H報告的效能指標稱為TPC-H每小時複合查詢效能指標(QphH@Size),反映了系統處理查詢能力的多個方面。這些方面包括執行查詢時所選擇的資料庫大小,由單個流提交查詢時的查詢處理能力,以及由多個併發使用者提交查詢時的查詢吞吐量。
TPC-H 測試標準模擬了一個零部件線上銷售的系統,共定義了8個表:
表名稱 | 說明 |
---|---|
REGION | 區域表 |
NATION | 國家表 |
SUPPLIER | 供應商表 |
PART | 零部件表 |
PARTSUPP | 零部件供應表 |
CUSTOMER | 客戶表 |
ORDERS | 訂單表 |
LINEITEM | 訂單明細表 |
對應測試有22條SQL,涉及不同型別的業務。
查詢語句 | 說明 | 主要涉及業務 |
---|---|---|
Q1 | 價格統計報告查詢 | 帶有分組、排序、聚集操作並存的單表查詢操作。這個查詢會導致表上的資料有95%到97%行被讀取到。 |
Q2 | 最小代價供貨商查詢 | 帶有排序、聚集操作、子查詢並存的多表查詢操作。查詢語句沒有從語法上限制返回多少條元組,但是TPC-H標準規定,查詢結果只返回前100行(通常依賴於應用程式實現)。 |
Q3 | 運送優先順序查詢 | 帶有分組、排序、聚集操作並存的三表查詢操作。查詢語句沒有從語法上限制返回多少條元組,但是TPC-H標準規定,查詢結果只返回前10行(通常依賴於應用程式實現)。 |
Q4 | 訂單優先順序查詢 | 帶有分組、排序、聚集操作、子查詢並存的單表查詢操作。子查詢是相關子查詢。 |
Q5 | 本地供應商收入量查詢 | 帶有分組、排序、聚集操作、子查詢並存的多表連線查詢操作。 |
Q6 | 預測收入變化查詢 | 帶有聚集操作的單表查詢操作。查詢語句使用了BETWEEN-AND運算子,有的資料庫可以對BETWEEN-AND進行最佳化。 |
Q7 | 批次出貨查詢 | 帶有分組、排序、聚集、子查詢操作並存的多表查詢操作。子查詢的父層查詢不存在其他查詢物件,是格式相對簡單的子查詢。 |
Q8 | 國家市場份額查詢 | 帶有分組、排序、聚集、子查詢操作並存的查詢操作。子查詢的父層查詢不存在其他查詢物件,是格式相對簡單的子查詢,但子查詢自身是多表連線的查詢。 |
Q9 | 產品型別利潤估量查詢 | 帶有分組、排序、聚集、子查詢操作並存的查詢操作。子查詢的父層查詢不存在其他查詢物件,是格式相對簡單的子查詢,但子查詢自身是多表連線的查詢。子查詢中使用了LIKE運算子,有的查詢最佳化器不支援對LIKE運算子進行最佳化。 |
Q10 | 貨運存在問題的查詢 | 帶有分組、排序、聚集操作並存的多表連線查詢操作。查詢語句沒有從語法上限制返回多少條元組,但是TPC-H標準規定,查詢結果只返回前10行(通常依賴於應用程式實現)。 |
Q11 | 庫存價值查詢 | 帶有分組、排序、聚集、子查詢操作並存的多表連線查詢操作。子查詢位於分組操作的HAVING條件中。 |
Q12 | 貨運模式和訂單優先順序查詢 | 帶有分組、排序、聚集操作並存的兩表連線查詢操作。 |
Q13 | 消費者訂單數量查詢 | 帶有分組、排序、聚集、子查詢、左外連線操作並存的查詢操作。 |
Q14 | 促銷效果查詢 | 帶有分組、排序、聚集、子查詢、左外連線操作並存的查詢操作。 |
Q15 | 頭等供貨商查詢 | 帶有分排序、聚集、聚集子查詢操作並存的普通表與檢視的連線操作。 |
Q16 | 零件/供貨商關係查詢 | 帶有分組、排序、聚集、去重、NOT IN子查詢操作並存的兩表連線操作。 |
Q17 | 小訂單收入查詢 | 帶有聚集、聚集子查詢操作並存的兩表連線操作。 |
Q18 | 大訂單顧客查詢 | 帶有分組、排序、聚集、IN子查詢操作並存的三表連線操作。查詢語句沒有從語法上限制返回多少條元組,但是TPC-H標準規定,查詢結果只返回前100行(通常依賴於應用程式實現)。 |
Q19 | 折扣收入查詢 | 帶有分組、排序、聚集、IN子查詢操作並存的三表連線操作。 |
Q20 | 供貨商競爭力查詢 | 帶有排序、聚集、IN子查詢、普通子查詢操作並存的兩表連線操作。 |
Q21 | 供應商留單等待查詢 | 帶有分組、排序、聚集、EXISTS子查詢、NOT EXISTS子查詢操作並存的四表連線操作。查詢語句沒有從語法上限制返回多少條元組,但是TPC-H標準規定,查詢結果只返回前100行(通常依賴於應用程式實現)。 |
Q22 | 全球銷售機會查詢 | 帶有分組、排序、聚集、EXISTS子查詢、NOT EXISTS子查詢操作並存的四表連線操作。 |
如下是openGaus/MogDB測試TPCH的流程。可供參考:
上傳TPCH的工具包
連結: 提取碼: qjbc
一、建立壓測的資料庫和使用者
MogDB=# create database tpch_db; CREATE DATABASE MogDB=# create user tpch with password 'Abcd@1234' sysadmin; NOTICE: The encrypted password contains MD5 ciphertext, which is not secure. CREATE ROLE MogDB=# alter database tpch_db owner to tpch ; ALTER DATABASE tpch_db=# alter schema public owner to tpch ; ALTER SCHEMA
二、建測試表
gsql -p 23000 -d tpch_db -U tpch < createtab_og.sql
三、編譯dbgen軟體
解壓TPCH的包,進入dbgen的目錄
1.修改makefile檔案
[om3@lmt0003 TPC-H_Tools_v3.0.0]$ pwd /home/om3/TPCH-openGauss-TestTools/TPCH-openGauss-TestTools/TPC-H_Tools_v3.0.0 [om3@lmt0003 TPC-H_Tools_v3.0.0]$ cd dbgen/ [om3@lmt0003 dbgen]$ ls answers build.c dists.dss dsstypes.h permute.h queries rnd.h tests tpch.vcproj bcd2.c check_answers driver.c HISTORY PORTING.NOTES README rng64.c text.c update_release.sh bcd2.h column_split.sh dss.ddl load_stub.c print.c reference rng64.h tpcd.h variants bm_utils.c config.h dss.h makefile.suite qgen.c release.h shared.h tpch.dsw varsub.c BUGS dbgen.dsp dss.ri permute.c qgen.vcproj rnd.c speed_seed.c tpch.sln [om3@lmt0003 dbgen]$ cp makefile.suite makefile [om3@lmt0003 dbgen]$ vi makefile
修改其中103到112行
2.修改tpcd.h
[om3@lmt0003 dbgen]$ vi tpcd.h
在檔案末尾加上
#ifdef POSTGRESQL #define GEN_QUERY_PLAN "EXPLAIN PLAN" #define START_TRAN "SET TRANSACTION" #define END_TRAN "COMMIT;" #define SET_OUTPUT "" #define SET_ROWCOUNT "LIMIT %d\n" #define SET_DBASE "" #endif
修改完編譯配置檔案,可以編譯出程式
3.編譯dbgen
[om3@lmt0003 dbgen]$ make -f makefile
引數說明:
-v:詳細資訊
-f:覆蓋之前的檔案
-s:生成資料大小,單位GB
-C引數:表示把生成的資料分為幾份
-S引數:切分資料用,表示第幾個檔案,例如:“-S 1”表示第1個檔案,“-S 2”表示第2個檔案
四、生成資料
例:
1.生成1G資料
./dbgen vf -s 1
生成8個tbl檔案,對應8張表的資料。
也可以使用多個執行緒產生資料,加塊速率。例:8執行緒生成500G資料
#!/bin/sh ./dbgen -vf -s 500 -S 1 -C 8 & ./dbgen -vf -s 500 -S 2 -C 8 & ./dbgen -vf -s 500 -S 3 -C 8 & ./dbgen -vf -s 500 -S 4 -C 8 & ./dbgen -vf -s 500 -S 5 -C 8 & ./dbgen -vf -s 500 -S 6 -C 8 & ./dbgen -vf -s 500 -S 7 -C 8 & ./dbgen -vf -s 500 -S 8 -C 8 &
2.轉換資料(把tbl檔案轉換為csv檔案)
for i in `ls *.tbl`;do sed 's/|$//' $i > ${i/tbl/csv};echo $i;done;
五、匯入資料
建立指令碼,匯入資料
[om3@lmt0003 dbgen]$ vi copyin_tpch_db.sh
下面需要修改的部分為dir和opts部分,dir為上述csv的路徑。opts是gsql後需要加的引數,包含埠,資料庫名等,sch是指定schema。
dir=/home/om3/TPCH-openGauss-TestTools/TPCH-openGauss-TestTools/TPC-H_Tools_v3.0.0/dbgen opts='-p 23000 -d tpch_db' sch=public gsql $opts -c "COPY $sch.region FROM '$dir/region.csv' WITH (FORMAT csv,DELIMITER '|')" gsql $opts -c "COPY $sch.nation FROM '$dir/nation.csv' WITH (FORMAT csv,DELIMITER '|')" gsql $opts -c "COPY $sch.part FROM '$dir/part.csv' WITH (FORMAT csv,DELIMITER '|')" gsql $opts -c "COPY $sch.supplier FROM '$dir/supplier.csv' WITH (FORMAT csv,DELIMITER '|')" gsql $opts -c "COPY $sch.customer FROM '$dir/customer.csv' WITH (FORMAT csv,DELIMITER '|')" gsql $opts -c "COPY $sch.partsupp FROM '$dir/partsupp.csv' WITH (FORMAT csv,DELIMITER '|')" gsql $opts -c "COPY $sch.orders FROM '$dir/orders.csv' WITH (FORMAT csv,DELIMITER '|')" gsql $opts -c "COPY $sch.lineitem FROM '$dir/lineitem.csv' WITH (FORMAT csv,DELIMITER '|')"
六、建立所需函式
create or replace function NUMTOYMINTERVAL(float8, text) returns interval as $$ select ($1||' '||$2)::interval; $$ language sql strict immutable; create or replace function NUMTODSINTERVAL(float8, text) returns interval as $$ select ($1||' '||$2)::interval; $$ language sql strict immutable;
七、執行SQL資料夾下SQL(共22種SQL)
如下是遍歷執行全部22種SQL的指令碼
#!/bin/bash opts='-p 23000 -d tpch_db -U tpch -W 'Abcd@1234'' for i in `seq 1 22` do echo $i"'s result" gsql ${opts} -f ${i}.sql done
可以將8張表的匯入耗時以及22種SQL的執行耗時記錄下來,並做相應對比(測表匯入耗時可以copy前開啟\timing)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2996081/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- openGauss/MogDB列存表的delta表測試
- openGauss/MogDB-3.0.0 dcf測試(非om安裝)
- MogDB/openGauss 壞塊測試-對啟動的影響-測試筆記1筆記
- MOGDB/openGauss資料庫執行計劃快取/失效機制的測試資料庫快取
- MogDB openGauss故障排查流程
- openGauss/MOGDB與PG等待事件事件
- MogDB/openGauss中merge的語法解析
- MogDB openGauss常用查詢彙總
- openGauss/MogDB的uncommitted xmin問題解決MIT
- MogDB/openGauss如何實現事務的rollback
- MogDB-opengauss中的聚集與分組操作
- MogDB-openGauss default privileges 使用方法
- openGauss/MOGDB Copy支援容錯機制
- MogDB/openGauss如何實現自增主鍵
- MOGDB/openGauss索引推薦及虛擬索引索引
- MogDB/openGauss的三種函式穩定性關鍵字函式
- MogDB openGauss資料庫擴縮容的幾種方式資料庫
- MogDB/openGauss 生態工具-MTK對glibc版本的解決
- TPCH模型規範、測試說明及22條語句模型
- MogDB/openGauss學習筆記-獲取物件DDL筆記物件
- openGauss/MogDB列存表vacuum DELTAMERGE過程申請的鎖
- 根據openGauss/MogDB的lwtid檢視執行緒堆疊執行緒
- PostgreSQL技術大講堂 - 第46講:poc-tpch測試SQL
- MogDB/openGauss誤刪未歸檔的xlog日誌如何解決
- 遷移ORACLE資料到MogDB/openGauss時的字符集問題Oracle
- MOGDB/openGauss與PostgreSQL關於GBK字符集問題SQL
- MOGDB/openGauss與PostgreSQL關於GDK字符集問題SQL
- MOGDB/openGauss的txid_snapshot 資料型別和相關函式資料型別函式
- MOGDB/openGauss資料庫gs_dump備份指令碼及清理資料庫指令碼
- PostgreSQL/MogDB/openGauss怎樣獲取表上依賴於該表的檢視SQL
- MOGDB/openGauss的dbe_perf.Statement與pgstat.stat檔案關係驗證
- openGauss關於PL/SQL匿名塊呼叫測試SQL
- 測試測試測試測試測試測試
- 測試——水杯的測試用例
- 功能測試、自動化測試、效能測試的區別
- 軟體測試中的功能測試和非功能測試
- 小白測試系列:介面測試與效能測試的區別
- openGauss資料庫原始碼解析——慢SQL檢測資料庫原始碼SQL