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) 是資料倉儲系統的主要應用,支援複雜的分析操作,側重決策支援,並且提供直觀易懂的查詢結果。典型的應用就是複雜的動態的報表系統。對實時性要求不高,資料量大
測試標準-OLTP
OLTP測試模型一直是TPC組織的重點測試標準,TPC-C測試模擬了一個比較複雜的OLTP應用環境, 是一個線上零售公司,此公司對10W種商品進行銷售,TPC-E是對TPC-C升級版本,但是目前POC選型時普通使用的仍然是TPC-C標準,先簡單介紹兩個標準的差異
TPC-C介紹
TPC-C業務資料模型:
tpc-c模擬的是一個線上零售公司,假如以一個倉庫為例,倉庫對10W種商品進行銷售,具備針對使用者進行水平擴充套件的能力,即建立更多的倉庫。
每個倉庫負責10個區域,每個區域有單獨的訂單系統,每個區域管理3000個顧客,因此一個倉庫負責3W個客戶。樹狀圖如下圖
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業務資料模型:
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個倉庫)
[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個倉庫)
[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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL技術大講堂 - 第46講:poc-tpch測試SQL
- PostgreSQL技術大講堂 - 第31講:SQL調優技巧SQL
- PostgreSQL技術大講堂 - 第33講:並行查詢管理SQL並行
- PostgreSQL技術大講堂 - 第34講:調優工具pgBagder部署SQL
- PostgreSQL技術大講堂 - 第32講:資料庫引數調整SQL資料庫
- PG技術大講堂 - 第13講:PostgreSQL Full-Page Writes 全頁寫SQL
- PostgreSQL技術大講堂 - Part 2:PostgreSQL原始碼安裝SQL原始碼
- PG技術大講堂 - Part 3:PostgreSQL建庫與使用SQL
- PG技術大講堂 - Part 10:PostgreSQL資料庫管理SQL資料庫
- PG技術大講堂 - Part 4:PostgreSQL例項結構SQL
- PostgreSQL技術大講堂 - Part 8:PG物件許可權管理SQL物件
- PostgreSQL技術大講堂 - Part 9:pg_hba.conf配置SQL
- RUP大講堂(第四講)-業務建模技術實踐
- PostgreSQL技術大講堂 - Part 6:PG使用者與角色管理SQL
- PostgreSQL技術大講堂 - Part 7:PG使用者schema相互關係SQL
- 大資料測試技術——課堂測試大資料
- 從小白到專家 PostgreSQL技術大講堂 - Part 5:PG資料庫結構SQL資料庫
- 今天開講,6 大演講主題、5 位技術大咖!龍蜥大講堂 5 月精彩直播預告搶先看
- 沃趣微講堂 | Oracle叢集技術(一)Oracle
- OneAPM大講堂 | 誰更快?JavaScript 框架效能評測JavaScript框架
- 工信部ICpower大講堂(南京)開班,特邀國際名家做核心技術分享
- 【新炬網路名師大講堂】oracle application server之核心技術opmnOracleAPPServer
- 從小白到專家 PG技術大講堂 - Part 2:PG原始碼安裝原始碼
- 技術分享| 快對講,全球對講
- 中美技術人才矽谷大講堂 | JTalk 掘金線下活動第六期
- 不要跟我講技術
- 沃趣微講堂 | Oracle叢集技術(二):GI與Oracle RACOracle
- 大資料技術與應用課堂測試-資料清洗同步大資料
- 技術分享| 快對講-5G對講
- 【新炬網路名師大講堂】軟體測試中常見問題與解決辦法
- 視訊對講技術
- 7 大主題、9 位技術大咖!龍蜥大講堂7月硬核直播預告搶先看,今天見
- postgresql從入門到精通教程 - 第36講:postgresql邏輯備份SQL
- MySQL45講基礎篇MySql
- 手機app測試講座APP
- 安全大講堂|海南金融行業網路安全知識講座成功舉辦行業
- PostgreSQL從小白到高手教程 - 第47講:JMETER工具使用SQLJMeter
- 【軟體測試自動化-QTP系列講座 5】== DOM技術的應用 ==QT