PostgreSQL技術大講堂 - 第45講:poc-tpcc測試

unix_5359發表於2024-03-15
PostgreSQL技術大講堂 - 第45講:poc-tpcc測試


PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色許可權、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。


第45講: POC-TPCC測試


PostgreSQL第45講:3月2日(週六)19:30,釘釘群(35822460)& 影片號(資料庫老陳)直播

內容1:TPC-C介紹

內容2:TPC-C測試部署

內容3:TPC-C報告


TPC背景介紹

TPC組織:

事務處理效能測試委員會TPC(Transaction process performance Council)是一個專門負責制定計算機事務處理能力測試標準並監督其執行的組織,其總部位於美國,針對資料庫不同的使用場景TPC組織釋出了多項測試標準,其中被業界廣泛使用的有TPC-C 、TPC-E,TPC-H和TPC-DS,前兩者應用到OLTP,後兩者應用到OLAP場景。

OLTP與OLAP區別

聯機事務處理OLTP(on-line transaction processing) 主要是執行基本日常的事務處理,比如資料庫記錄的增刪查改。比如在銀行的一筆交易記錄,就是一個典型的事務。高併發,高效能,且滿足事務的ACID特性。

聯機分析處理OLAP(On-Line Analytical Processing) 是資料倉儲系統的主要應用,支援複雜的分析操作,側重決策支援,並且提供直觀易懂的查詢結果。典型的應用就是複雜的動態的報表系統。對實時性要求不高,資料量大

PostgreSQL技術大講堂 - 第45講:poc-tpcc測試

測試標準-OLTP

OLTP測試模型一直是TPC組織的重點測試標準,TPC-C測試模擬了一個比較複雜的OLTP應用環境, 是一個線上零售公司,此公司對10W種商品進行銷售,TPC-E是對TPC-C升級版本,但是目前POC選型時普通使用的仍然是TPC-C標準,先簡單介紹兩個標準的差異

PostgreSQL技術大講堂 - 第45講:poc-tpcc測試


TPC-C介紹

TPC-C業務資料模型:

tpc-c模擬的是一個線上零售公司,假如以一個倉庫為例,倉庫對10W種商品進行銷售,具備針對使用者進行水平擴充套件的能力,即建立更多的倉庫。

每個倉庫負責10個區域,每個區域有單獨的訂單系統,每個區域管理3000個顧客,因此一個倉庫負責3W個客戶。樹狀圖如下圖

PostgreSQL技術大講堂 - 第45講:poc-tpcc測試

TPC-C業務資料模型:

TPC-C 業務涉及到的9張表以及ER圖介紹:

1)ITEM 商品資訊表:10w條商品資訊,保持不變

2)warehouse 倉庫表:按需庫容,比如上圖表示有W個倉庫,則有W條記錄

3)Stock 庫存表:每個倉庫有10W條商品的庫存資訊,因此總數目為W*10w

4)district區域表: 每個倉庫管理10個區域,因此有W*10條記錄

5) custoer客戶表:每個倉庫負責10個區域,每個區域管理3000個客戶,因此客戶數為W*3w

6 ) Order訂單表:每次客戶下單會生成一條記錄,會持續增長,不刪除,初始化為每個客戶一條訂單,因此初始值為W*3w

7) New-Order新訂單表:沒有發貨的訂單,發貨後即刪除,初始值為每個倉庫9000條記錄,因此為W*9000

8)order-line訂單明細表:每個訂單會購買5-15件商品(平均為10),對於每件商品都要記錄到這裡,因此它的數目約為Order的10倍,會持續增長,不刪除,初始值為W*30w

9) history表:歷史資訊表,沒有主鍵,不需要查詢,每次支付的時候生成一條記錄,初始值為W*3w條

TPC-C業務資料模型:

PostgreSQL技術大講堂 - 第45講:poc-tpcc測試


TPC-C測試部署

1、安裝JAVA (root)

gzip -d jdk-8u40-linux-x64.gz

tar –vxf jdk-8u40-linux-x64 -C /usr/local

2、安裝ant (root)

unzip apache-ant-1.9.15-bin.zip

mv apache-ant-1.9.15 /usr/local/

3、配置pg環境變數

export JAVA_HOME=/usr/local/jdk1.8.0_40

export PATH=$JAVA_HOME/bin:$PATH:/usr/local/apache-ant-1.9.15/bin/

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib:/usr/local/apache-ant-1.9.15/lib/ant-launcher.jar

4、解壓安裝包benchmarksql (pg)

unzip benchmarksql-5.0.zip

cd benchmarksql-5.0/

ant #執行ant命令

5、編輯PG相關執行引數

cd run/

vim props.pg

props.pg檔案內容:

db=postgres

driver=org.postgresql.Driver

conn=jdbc:postgresql://localhost:1922/tpcc

user=tpcc

password=123456

//warehouses與後面生成資料時指定的warehouses值要一致,根據客戶實際的需求設定

warehouses=10

//併發客戶端

terminals=10

runTxnsPerTerminal=0

//執行時長,單位為分鐘

runMins=3

limitTxnsPerMin=10000

//Set to true to run in 4.x compatible mode. Set to false to use the

//entire configured database evenly.

terminalWarehouseFixed=true

//The following five values must add up to 100

//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec,測試結果要達到下面每張表的交易要求才算透過

newOrderWeight=45

paymentWeight=43

orderStatusWeight=4

deliveryWeight=4

stockLevelWeight=4

6、PG資料庫上建立tpcc資料庫以及tpcc使用者,密碼為123456

7、建立測試庫,並載入資料

./runDatabaseBuild.sh props.pg

8、執行基準測試

./runBenchmark.sh props.pg

測試結果

07:55:13,970 [Thread-1] INFO jTPCC : Term-00,

07:55:13,970 [Thread-1] INFO jTPCC : Term-00,

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 3814.05

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Measured tpmTOTAL = 8499.38

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Session Start = 2022-01-04 07:52:13

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Session End = 2022-01-04 07:55:13

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Transaction Count = 25499

3814.05 TpmC //每分鐘處理完成的事務數,該值=第一次統計結果 new-order成功事務數/總執行時間(分鐘)

生成html測試結果

1、安裝R命令

yum install epel-release

yum install R

2、產生html報告

./generateReport.sh my_result_2022-01-17_094510

3、報告指標

New-Order :新訂單

Payment:支付

Order-Status:訂單查詢

Delivery:發貨

Stock-Level :庫存

4、html報告(5個倉庫)

PostgreSQL技術大講堂 - 第45講:poc-tpcc測試

[transaction percentage]

New-Orders:45.112%(>=45.0%) [OK]

Payment: 42.681% (>=43.0%) [NG]

Order-Status: 4.166% (>= 4.0%) [OK]

Delivery: 4.017% (>= 4.0%) [OK]

Stock-Level: 4.024% (>= 4.0%) [OK]

[response time (at least 90% passed)] //響應耗時指標必須超過90%透過才行

New-Order: 99.481% [OK]

Payment: 99.4% [OK]

Order-Status: 99.97% [OK]

Delivery: 99.99% [OK]

Stock-Level: 99.72% [OK]

Overall tpmC: 4324.00

Overall tpmTotal: 9585.00

4、html報告(10個倉庫)

PostgreSQL技術大講堂 - 第45講:poc-tpcc測試

[transaction percentage]

New-Orders:44.687%(<=45.0%) [NG]

Payment: 43.293% (>=43.0%) [OK]

Order-Status: 3.904% (<= 4.0%) [NG]

Delivery: 4.204% (>= 4.0%) [OK]

Stock-Level: 3.912% (<= 4.0%) [NG]

[response time (at least 90% passed)] //響應耗時指標必須超過90%透過才行

New-Order: 99.06% [OK]

Payment: 99.01% [OK]

Order-Status: 99.62%[OK]

Delivery: 99.93% [OK]

Stock-Level: 99.83% [OK]

Overall tpmC: 3975.33

Overall tpmTotal: 8896.00

資料一致性驗證

6條驗證資料一致性的sql,透過驗證倉庫和區域收入是否相等來判斷資料是否一致,預期以下6條sql結果都為0

第一條:

SELECT distinct w_ytd - ytd_sum

FROM bmsql_warehouse LEFT JOIN

(SELECT d_w_id, SUM(d_ytd) AS ytd_sum

FROM bmsql_district

GROUP BY d_w_id) d

ON w_id = d_w_id;

第二條:

select distinct * from

(SELECT (D_NEXT_O_ID - 1 - max_o_id) as id

FROM bmsql_district LEFT JOIN

(SELECT o_w_id, o_d_id, MAX(o_id) AS max_o_id

FROM bmsql_oorder

GROUP BY o_w_id, o_d_id) o

ON d_w_id = o_w_id AND d_id = o_d_id

ORDER BY d_w_id, d_id) tmp ;

第三條:

select distinct * from

(SELECT D_NEXT_O_ID - 1 - max_o_id

FROM bmsql_district LEFT JOIN

(SELECT no_w_id, no_d_id, MAX(no_o_id) AS max_o_id

FROM bmsql_NEW_order

GROUP BY no_w_id, no_d_id)

no_w_id ON d_w_id = no_w_id

AND d_id = no_d_id

ORDER BY d_w_id, d_id) as tmp;

第四條:

select distinct (count(no_o_id)-(max(no_o_id)-min(no_o_id)+1)) as diff

from bmsql_NEW_order

group by no_w_id,no_d_id;

第五條:

select distinct * from

(SELECT sum_cnt - count_id

FROM

( SELECT o_w_id, o_d_id, SUM(o_ol_cnt) as sum_cnt

FROM bmsql_oorder

GROUP BY o_w_id, o_d_id ) o LEFT JOIN

( SELECT ol_w_id, ol_d_id, COUNT(ol_o_id) count_id FROM bmsql_order_line

GROUP BY ol_w_id, ol_d_id )

ol_w_id ON o_w_id =ol_w_id AND o_d_id = ol_d_id) tmp;

第六條:

SELECT distinct sum_ytd - w_ytd

FROM

( SELECT d_w_id, SUM(d_ytd) AS sum_ytd

FROM bmsql_district

GROUP BY d_w_id) d

LEFT JOIN bmsql_warehouse w ON d_w_id = w_id;


CUUG PostgreSQL技術大講堂系列公開課第45講-POC-TPCC測試的內容,往期影片及文件,請聯絡CUUG。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/31544987/viewspace-3009078/,如需轉載,請註明出處,否則將追究法律責任。

相關文章