大數(shù)據(jù)就業(yè)實(shí)戰(zhàn)培訓(xùn) Oracle就業(yè)實(shí)戰(zhàn)培訓(xùn)
TPC-C 測(cè)試
TPC-C 是一種衡量 OLTP 性能的基準(zhǔn)測(cè)試。TPC-C 混合了五種不同類型和復(fù)雜程度的并發(fā)交易,這五種并發(fā)交易又包括了在線執(zhí)行以及排隊(duì)延遲執(zhí)行。TPC-C 數(shù)據(jù)庫(kù)由九種類型的表組成,以每分鐘交易量(tmpC)來(lái)衡量具體性能。
前期準(zhǔn)備
部署 PolarDB-PG
在運(yùn)行前默認(rèn)已經(jīng)通過(guò)文檔 PolarDB 編譯部署:?jiǎn)螜C(jī)文件系統(tǒng) 部署好 PolarDB-PG 的本地實(shí)例。
安裝 Java 和 Ant
由于 TPC-C 測(cè)試工具 benchmarksql 需要通過(guò) Ant 來(lái)編譯,所以需要安裝 Java 和 Ant。這里安裝的 Java 版本為 8.0java-install,Ant 版本為 1.9.7ant-install。
::: tip 安裝 Java 和 Ant 的后需要修改環(huán)境變量。 :::
# 配置環(huán)境變量
vim /etc/profile
# 以下是本人機(jī)器上的配置,可以參考,路徑需要根據(jù)自己機(jī)器進(jìn)行調(diào)整
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JRE_HOME/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH
#ant environment
export ANT_HOME=/home/postgres/apache-ant-1.9.16
export PATH=$PATH:$ANT_HOME/bin
# 生效
source /etc/profile
驗(yàn)證 Java 和 Ant 安裝成功。
# java
$ java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
# ant
$ ant -version
Apache Ant(TM) version 1.9.16 compiled on July 10 2021
安裝 benchmarksql
我們將通過(guò) benchmarksql 工具來(lái)進(jìn)行 TPC-C 測(cè)試。
::: tip 下面鏈接中的 benchmarksql 采用的是 5.1 版本。相較于 5.0 版本,5.1 版本可以使用 Procedures,性能表現(xiàn)較好。推薦使用 5.1 版本。 :::
# 下載 benchmarksql
git clone https://github.com/petergeoghegan/benchmarksql
# 編譯
cd benchmarksql
ant
進(jìn)行 TPC-C 測(cè)試
TPC-C 測(cè)試主要分為四個(gè)步驟:載入數(shù)據(jù)、預(yù)熱數(shù)據(jù)、進(jìn)行測(cè)試、結(jié)果分析。下面將分別進(jìn)行說(shuō)明。
通過(guò)如下命令進(jìn)入到指定目錄:
cd run
TPC-C 配置文件
在使用 benchmarksql 運(yùn)行 TPC-C 測(cè)試的時(shí)候,需要指定配置參數(shù),配置包括要連接的數(shù)據(jù)庫(kù)類型(Oracle、PG)、IP、端口等。如下代碼塊說(shuō)明了具體的配置字段名以及含義:
::: tip 后續(xù)的載入數(shù)據(jù)、預(yù)熱數(shù)據(jù)、進(jìn)行測(cè)試都可以采用該配置文件,后續(xù)該配置文件的名稱都為 PolarDB_PG_Run.conf。 :::
# 要連接的數(shù)據(jù)庫(kù)類型,下面都以 postgres 為例
db=postgres
# 驅(qū)動(dòng)程序
driver=org.postgresql.Driver
# 連接的 IP 為 localhost, 端口為 5432, 數(shù)據(jù)庫(kù)為 tpcc
conn=jdbc:postgresql://localhost:5432/tpcc
# 數(shù)據(jù)庫(kù)用戶名
user=postgres
# 數(shù)據(jù)庫(kù)密碼
password=postgres
# 倉(cāng)庫(kù)數(shù)量,相當(dāng)于測(cè)試數(shù)據(jù)量
warehouses=10
# 裝載數(shù)據(jù)的進(jìn)程數(shù)量,可根據(jù)機(jī)器核數(shù)動(dòng)態(tài)調(diào)整
loadWorkers=20
# 運(yùn)行測(cè)試時(shí)的并發(fā)客戶端數(shù)量,一般設(shè)置為 CPU 線程總數(shù)的 2~6 倍。注意不能超過(guò)數(shù)據(jù)庫(kù)的最大連接數(shù)。 最大連接數(shù)可以通過(guò) show max_connections; 查看
terminals=20
# 每個(gè)終端運(yùn)行的事務(wù)數(shù),如果該值非 0,則運(yùn)行總事務(wù)數(shù)為 runTxnsPerTerminal * terminals。注意,runTxnsPerTerminal 不能和 runMins 同時(shí)非 0
runTxnsPerTerminal=0
# 運(yùn)行時(shí)間數(shù),單位為分鐘。注意,runTxnsPerTerminal 不能和 runMins 同時(shí)非 0
runMins=1
# 每分鐘執(zhí)行的最大事務(wù)數(shù),設(shè)置為0,則表示不加限制 ( Number of total transactions per minute )
limitTxnsPerMin=0
# 終端和倉(cāng)庫(kù)的綁定模式,設(shè)置為 true 時(shí)說(shuō)明每個(gè)終端有一個(gè)固定倉(cāng)庫(kù)。 一般采用默認(rèn)值 true
terminalWarehouseFixed=true
# 是否采用存儲(chǔ)過(guò)程,為 true 則說(shuō)明使用
useStoredProcedures=false
該配置的部分中文解釋說(shuō)明參考 benchmarksql 使用指南。
載入數(shù)據(jù)
腳本 runDatabaseBuild.sh 用來(lái)裝載數(shù)據(jù)。在裝載數(shù)據(jù)前,需要通過(guò) psql 命令 create database tpcc 創(chuàng)建 tpcc 數(shù)據(jù)庫(kù)。
執(zhí)行如下 bash 命令,執(zhí)行裝載數(shù)據(jù):
./runDatabaseBuild.sh PolarDB_PG_Run.conf
執(zhí)行成功的結(jié)果如下所示:
-- ----
-- Extra commands to run after the tables are created, loaded,
-- indexes built and extra\'s created.
-- PostgreSQL version.
-- ----
vacuum analyze;
預(yù)熱數(shù)據(jù)
腳本 runBenchmark.sh 用來(lái)執(zhí)行 TPC-C 測(cè)試。通常,在正式壓測(cè)前會(huì)進(jìn)行一次數(shù)據(jù)預(yù)熱。
數(shù)據(jù)預(yù)熱的命令如下:
./runBenchmark.sh PolarDB_PG_Run.conf
可能會(huì)出現(xiàn)的錯(cuò)誤以及解決方法
錯(cuò)誤日志:
ERROR jTPCC : Term-00, This session ended with errors!
解決方法:
該錯(cuò)誤說(shuō)明會(huì)話斷連,需要通過(guò)數(shù)據(jù)庫(kù)的日志來(lái)定位問(wèn)題,打印數(shù)據(jù)庫(kù)的錯(cuò)誤日志命令如下:
# 文件名需要替換成目錄中帶 error 的文件名
cat /home/postgres/tmp_master_dir_polardb_pg_1100_bld/pg_log/postgresql-2022-06-29_101344_error.log
進(jìn)行測(cè)試
數(shù)據(jù)預(yù)熱完,就可以進(jìn)行正式測(cè)試。正式測(cè)試的命令如下:
./runBenchmark.sh PolarDB_PG_Run.conf
結(jié)果分析
壓測(cè)結(jié)束后,結(jié)果如下所示:
11:49:15,896 [Thread-9] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 71449.03
11:49:15,896 [Thread-9] INFO jTPCC : Term-00, Measured tpmTOTAL = 164116.88
11:49:15,896 [Thread-9] INFO jTPCC : Term-00, Session Start = 2022-06-29 11:48:15
11:49:15,896 [Thread-9] INFO jTPCC : Term-00, Session End = 2022-06-29 11:49:15
11:49:15,896 [Thread-9] INFO jTPCC : Term-00, Transaction Count = 164187
Running Average tpmTOTAL / Measured tpmTOTAL:每分鐘平均執(zhí)行事務(wù)數(shù)(所有事務(wù))
Memory Usage:客戶端內(nèi)存使用情況
Measured tpmC (NewOrders) :每分鐘執(zhí)行的事務(wù)數(shù)(只統(tǒng)計(jì) NewOrders 事務(wù))
Transaction Count:執(zhí)行的交易總數(shù)量
該結(jié)果的部分解釋參考 benchmarksql 使用指南。
如何在不同場(chǎng)景下測(cè)試
本文檔主要提供了 PolarDB-PG 通用的 TPC-C 測(cè)試方式,如果需要進(jìn)行不同場(chǎng)景下的測(cè)試,比如:三節(jié)點(diǎn)、PFS 文件系統(tǒng)、Ceph 共享存儲(chǔ)等。需要通過(guò)對(duì)應(yīng)文檔創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例,然后修改數(shù)據(jù)庫(kù)的配置。修改配置方式有兩個(gè):
可以通過(guò) psql 命令 alter system set ...; 和 select pg_reload_conf(); 來(lái)修改配置。
二是修改數(shù)據(jù)庫(kù)配置文件來(lái)實(shí)現(xiàn)修改配置,命令如下:
# 修改配置文件
vim /home/postgres/tmp_master_dir_polardb_pg_1100_bld/postgresql.auto.conf
# 重啟數(shù)據(jù)庫(kù)
/home/postgres/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl -D /home/postgres/tmp_master_dir_polardb_pg_1100_bld restart
后續(xù),再根據(jù)該文檔進(jìn)行 TPC-C 測(cè)試。