PostgreSQL技術(shù)大講堂 - 第45講:poc-tpcc測(cè)試
最新學(xué)訊:近期OCP認(rèn)證正在報(bào)名中,因考試人員較多請(qǐng)盡快報(bào)名獲取最近考試時(shí)間,報(bào)名費(fèi)用請(qǐng)聯(lián)系在線老師,甲骨文官方認(rèn)證,報(bào)名從速!
我要咨詢(xún)
PostgreSQL從小白到專(zhuān)家,是從入門(mén)逐漸能力提升的一個(gè)系列教程,內(nèi)容包括對(duì)PG基礎(chǔ)的認(rèn)知、包括安裝使用、包括角色權(quán)限、包括維護(hù)管理、、等內(nèi)容,希望對(duì)熱愛(ài)PG、學(xué)習(xí)PG的同學(xué)們有幫助,歡迎持續(xù)關(guān)注CUUG PG技術(shù)大講堂。
第45講:POC-TPCC測(cè)試
PostgreSQL第45講:3月2日(周六)19:30,釘釘群(35822460)& 視頻號(hào)(數(shù)據(jù)庫(kù)老陳)直播
內(nèi)容1:TPC-C介紹
內(nèi)容2:TPC-C測(cè)試部署
內(nèi)容3:TPC-C報(bào)告
TPC背景介紹
TPC組織:
事務(wù)處理性能測(cè)試委員會(huì)TPC(Transaction process performance Council)是一個(gè)專(zhuān)門(mén)負(fù)責(zé)制定計(jì)算機(jī)事務(wù)處理能力測(cè)試標(biāo)準(zhǔn)并監(jiān)督其執(zhí)行的組織,其總部位于美國(guó),針對(duì)數(shù)據(jù)庫(kù)不同的使用場(chǎng)景TPC組織發(fā)布了多項(xiàng)測(cè)試標(biāo)準(zhǔn),其中被業(yè)界廣泛使用的有TPC-C 、TPC-E,TPC-H和TPC-DS,前兩者應(yīng)用到OLTP,后兩者應(yīng)用到OLAP場(chǎng)景。
OLTP與OLAP區(qū)別
聯(lián)機(jī)事務(wù)處理OLTP(on-line transaction processing) 主要是執(zhí)行基本日常的事務(wù)處理,比如數(shù)據(jù)庫(kù)記錄的增刪查改。比如在銀行的一筆交易記錄,就是一個(gè)典型的事務(wù)。高并發(fā),高性能,且滿(mǎn)足事務(wù)的ACID特性。
聯(lián)機(jī)分析處理OLAP(On-Line Analytical Processing) 是數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢(xún)結(jié)果。典型的應(yīng)用就是復(fù)雜的動(dòng)態(tài)的報(bào)表系統(tǒng)。對(duì)實(shí)時(shí)性要求不高,數(shù)據(jù)量大
測(cè)試標(biāo)準(zhǔn)-OLTP
OLTP測(cè)試模型一直是TPC組織的重點(diǎn)測(cè)試標(biāo)準(zhǔn),TPC-C測(cè)試模擬了一個(gè)比較復(fù)雜的OLTP應(yīng)用環(huán)境, 是一個(gè)在線零售公司,此公司對(duì)10W種商品進(jìn)行銷(xiāo)售,TPC-E是對(duì)TPC-C升級(jí)版本,但是目前POC選型時(shí)普通使用的仍然是TPC-C標(biāo)準(zhǔn),先簡(jiǎn)單介紹兩個(gè)標(biāo)準(zhǔn)的差異
TPC-C介紹
TPC-C業(yè)務(wù)數(shù)據(jù)模型:
tpc-c模擬的是一個(gè)在線零售公司,假如以一個(gè)倉(cāng)庫(kù)為例,倉(cāng)庫(kù)對(duì)10W種商品進(jìn)行銷(xiāo)售,具備針對(duì)用戶(hù)進(jìn)行水平擴(kuò)展的能力,即建立更多的倉(cāng)庫(kù)。
每個(gè)倉(cāng)庫(kù)負(fù)責(zé)10個(gè)區(qū)域,每個(gè)區(qū)域有單獨(dú)的訂單系統(tǒng),每個(gè)區(qū)域管理3000個(gè)顧客,因此一個(gè)倉(cāng)庫(kù)負(fù)責(zé)3W個(gè)客戶(hù)。樹(shù)狀圖如下圖
TPC-C業(yè)務(wù)數(shù)據(jù)模型:
TPC-C 業(yè)務(wù)涉及到的9張表以及ER圖介紹:
1)ITEM 商品信息表:10w條商品信息,保持不變
2)warehouse 倉(cāng)庫(kù)表:按需庫(kù)容,比如上圖表示有W個(gè)倉(cāng)庫(kù),則有W條記錄
3)Stock 庫(kù)存表:每個(gè)倉(cāng)庫(kù)有10W條商品的庫(kù)存信息,因此總數(shù)目為W*10w
4)district區(qū)域表: 每個(gè)倉(cāng)庫(kù)管理10個(gè)區(qū)域,因此有W*10條記錄
5) custoer客戶(hù)表:每個(gè)倉(cāng)庫(kù)負(fù)責(zé)10個(gè)區(qū)域,每個(gè)區(qū)域管理3000個(gè)客戶(hù),因此客戶(hù)數(shù)為W*3w
6 ) Order訂單表:每次客戶(hù)下單會(huì)生成一條記錄,會(huì)持續(xù)增長(zhǎng),不刪除,初始化為每個(gè)客戶(hù)一條訂單,因此初始值為W*3w
7) New-Order新訂單表:沒(méi)有發(fā)貨的訂單,發(fā)貨后即刪除,初始值為每個(gè)倉(cāng)庫(kù)9000條記錄,因此為W*9000
8)order-line訂單明細(xì)表:每個(gè)訂單會(huì)購(gòu)買(mǎi)5-15件商品(平均為10),對(duì)于每件商品都要記錄到這里,因此它的數(shù)目約為Order的10倍,會(huì)持續(xù)增長(zhǎng),不刪除,初始值為W*30w
9) history表:歷史信息表,沒(méi)有主鍵,不需要查詢(xún),每次支付的時(shí)候生成一條記錄,初始值為W*3w條
TPC-C業(yè)務(wù)數(shù)據(jù)模型:
TPC-C測(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環(huán)境變量
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 #執(zhí)行ant命令
5、編輯PG相關(guān)運(yùn)行參數(shù)
cd run/
vim props.pg
props.pg文件內(nèi)容:
db=postgres
driver=org.postgresql.Driver
conn=jdbc:postgresql://localhost:1922/tpcc
user=tpcc
password=123456
//warehouses與后面生成數(shù)據(jù)時(shí)指定的warehouses值要一致,根據(jù)客戶(hù)實(shí)際的需求設(shè)置
warehouses=10
//并發(fā)客戶(hù)端
terminals=10
runTxnsPerTerminal=0
//運(yùn)行時(shí)長(zhǎng),單位為分鐘
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,測(cè)試結(jié)果要達(dá)到下面每張表的交易要求才算通過(guò)
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
6、PG數(shù)據(jù)庫(kù)上創(chuàng)建tpcc數(shù)據(jù)庫(kù)以及tpcc用戶(hù),密碼為123456
7、建立測(cè)試庫(kù),并加載數(shù)據(jù)
./runDatabaseBuild.sh props.pg
8、運(yùn)行基準(zhǔn)測(cè)試
./runBenchmark.sh props.pg
測(cè)試結(jié)果
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 //每分鐘處理完成的事務(wù)數(shù),該值=第一次統(tǒng)計(jì)結(jié)果 new-order成功事務(wù)數(shù)/總運(yùn)行時(shí)間(分鐘)
生成html測(cè)試結(jié)果
1、安裝R命令
yum install epel-release
yum install R
2、產(chǎn)生html報(bào)告
./generateReport.sh my_result_2022-01-17_094510
3、報(bào)告指標(biāo)
New-Order :新訂單
Payment:支付
Order-Status:訂單查詢(xún)
Delivery:發(fā)貨
Stock-Level :庫(kù)存
4、html報(bào)告(5個(gè)倉(cāng)庫(kù))
[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)] //響應(yīng)耗時(shí)指標(biāo)必須超過(guò)90%通過(guò)才行
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報(bào)告(10個(gè)倉(cāng)庫(kù))
[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)] //響應(yīng)耗時(shí)指標(biāo)必須超過(guò)90%通過(guò)才行
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
數(shù)據(jù)一致性驗(yàn)證
6條驗(yàn)證數(shù)據(jù)一致性的sql,通過(guò)驗(yàn)證倉(cāng)庫(kù)和區(qū)域收入是否相等來(lái)判斷數(shù)據(jù)是否一致,預(yù)期以下6條sql結(jié)果都為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技術(shù)大講堂系列公開(kāi)課第45講-POC-TPCC測(cè)試的內(nèi)容,往期視頻及文檔,請(qǐng)聯(lián)系CUUG。
- 冉乃綱-老師CUUG金牌講師
- 冉老師 CUUG金牌講師 Oracle及RedHat高級(jí)講師、Unix/Linux 資深專(zhuān)家...[詳細(xì)了解老師]

- 陳衛(wèi)星-老師CUUG金牌講師
- 陳老師 CUUG金牌講師 精通Oracle管理、備份恢復(fù)、性能優(yōu)化 11年Ora...[詳細(xì)了解老師]
