金倉資料庫在 TPCE(dbt5,tpsE)測試框架方面的實踐和突破
人大金倉資料庫在為某專案認證時,需要提供TPCE測試框架和測試的結果可以達到比較高的測試資料。為此我們利用現有的開源技術和技術改造,成功的完成了認證並拿到資質證照。
具體介紹如下:
首先介紹TPCE相關和編譯相關的知識。
和測試工具dbt-5介紹
什麼是 TPC-E
TPC 測試基準 E (下文稱 TPC-E) 是由事務處理效能委員會 (下稱 TPC) 開發的一個新的用於測試 OLTP 負載的測試基準(基準於 2007 年被稽核通過)。 TPC-E 通過模擬了證券交易公司的業務來測試資料庫的 OLTP 效能。TPC-E 測試的重點是資料庫,更多關注的是這個資料庫處理來自證券公司和其客戶賬號的相關交易。 儘管在 TPC-E 測試基準之下的業務模型是一個證券公司的業務,但是資料庫的表結構和資料分佈,以及交易本身和實現規則都是盡最大程度的測試當下的 OLTP 資料庫系統。
為什麼我們需要一個新的 OLTP 測試基準?
IBM 在 1992 年 9 月份釋出了它的第一個 TPC-C 的測試結果。 14 年之後(本文寫於 2007 年),由 TPC 成員公司釋出的最新 TPC-C 的測試結果,相比於第一次的結果而言,也有著五個數量級的差距。 考慮到在過去的 14 年裡,工業界發生了非常大的變化。 我們也不能再使用一個為 1990 年代技術開發的測試基準來測試如今的系統。
TPC 在數年之前也意識到了這件事:TPC-C 作為一個最重要的測試 OLTP 的測試基準已經到了垂暮之年。 隨後,一個由超過半數 TPC 會員組成的開發委員會提出了一個新的測試框架的提案。從那時開始,TPC-E 的開發委員會已經花費了極多的時間提升,完善和提出 TPC-E 的原型。
TPC-E 和 TPC-C 究竟有什麼區別?
一個關鍵的區別是,TPC-E 基準配置將更像一個真實客戶會實際使用的配置。 這意味著基準測試中使用的軟體和硬體配置應與客戶端使用的軟體相似或相同。 TPC-C 配置的絕對大小不能反映典型的客戶端配置。 下表顯示了兩個基準之間的其他一些主要區別。
客戶從 TPC-E 能得到什麼好處?
某種程度上,引入新的 OLTP 基準可以降低現有 TPC-C 結果的價值。 但是,TPC-E 的引入並不意味著可以立即更換 TPC-C,並且不應該立即取代 TPC-C 的結果。 TPC-C 能夠取代 TPC-A 和 TPC-B 是因為 TPC-C 在經過數年而不不僅僅是數月的時間中證明了自己的價值。
當供應商使用新的基準測試時,他們將使用自己的產品來確定新和具體有象徵意義的 “機會”。 對於新的基準測試來說,這是典型的做法。新的基準只有在被不斷使用的過程中才能成熟起來成為一個最終的產品。使用新的基準確定的產品改進很有可能對客戶環境產生積極的影響。 另一方面,針對 TPC-C 的改進對客戶生產環境的發揮的作用可能也要小得多。同時,針對 TPC-C 進行優化的空間也已經不多了(畢竟已經 從 2007 年算起已經 14 年了;如果從翻譯本文的時間算起,已經30年了)。
DBT-5
DBT-5
can be used for the OLTP load test, it simulated a Broker's Firm's activities. DBT-5 is a very useful TPC-ETM benchmark test specification of TPC.
The GIT link:
git://osdldbt.git.sourceforge.net/gitroot/osdldbt/dbt5
或
表介紹:
窗體頂端 分類 窗體底端 |
表名 |
中文表名 |
字首 |
客戶類 |
ACCOUNT_PERMISSION |
客戶賬目許可表 |
AP_ |
CUSTOMER |
客戶資訊表 |
C_ | |
CUSTOMER_ACCOUNT |
客戶賬目表 |
CA_ | |
CUSTOMER_TAXRATE |
客戶稅率表 |
CX_ | |
HOLDING |
客戶股票持有表 |
H_ | |
HOLDING_HISTORY |
客戶股票持有歷史表 |
HH_ | |
HOLDING_SUMMARY |
客戶股票持有總表 |
HS_ | |
WATCH_ITEM |
客戶觀察證券列表 |
WI_ | |
WATCH_LIST |
客戶觀察證券表 |
WL_ | |
經紀人類 |
BROKER |
經紀人表 |
B_ |
CASH_TRANSACTION |
現金交易表 |
CT_ | |
CHARGE |
交易費用表 |
CH_ | |
COMMISSION_RATE |
佣金率表 |
CR_ | |
SETTLEMENT |
結算表 |
SE_ | |
TRADE |
交易表 |
T_ | |
TRADE_HISTORY |
交易歷史表 |
TH_ | |
TRADE_REQUEST |
交易請求表 |
TR_ | |
TRADE_TYPE |
交易型別表 |
TT_ | |
交易所類 |
COMPANY |
公司表 |
CO_ |
COMPANY_COMPETITOR |
公司競爭者表 |
CP_ | |
DAILY_MARKET |
日常市場統計表 |
DM_ | |
EXCHANGE |
交易所表 |
EX_ | |
FINANCIAL |
財政表 |
FI_ | |
INDUSTRY |
行業表 |
IN_ | |
LAST_TRADE |
最後交易表 |
LT_ | |
NEWS_ITEM |
新聞項表 |
NI_ | |
NEWS_XREF |
公司新聞參照表 |
NX_ | |
SECTOR |
公司領域表 |
SC_ | |
SECURITY |
證券表 |
S_ | |
因素類 |
ADDRESS |
地址表 |
AD_ |
STATUS_TYPE |
交易狀態表 |
ST_ | |
TAXRATE |
稅率表 |
TX_ | |
ZIP_CODE |
郵政編碼表 |
ZC_ |
TPC-E標準中定義的事務有12種,每個事務對應資料庫管理系統中的一個或多個帶輸入和輸出引數的儲存過程,單個儲存過程叫做一個事務幀。事務的種類有如下幾種:
(1) Broker-Volume :經紀人交易統計事務,包含1個事務幀;
(2) Customer-Position :客戶價值統計事務,包含3個事務幀;
(3) Market-Watch :市場觀察事務,包含1個事務幀;
(4) Security-Detail :證券資訊事務,包含1個事務幀;
(5) Trade-Lookup :交易查詢事務,包含4個事務幀;
(6) Trade-Order :交易執行事務,包含6個事務幀;
(7) Trade-Status :交易狀態事務,包含1個事務幀;
(8)Trade-Update :交易修正事務,包含3個事務幀;
(9) Market-Feed :市場跟蹤事務,包含1個事務幀,該事務由TradeOrder事務引起;
(10)Trade-Result :交易結果更新事務,包含6個事務幀,該事務由TradeOrder事務引起;
(11)Data-Maintenance :資料維護事務,包含1個事務幀,每60秒執行一次;
(12)Trade-Cleanup :交易清理事務,包含1個事務幀,測試開始時執行一次,不強制使用。
前8種事務由證券公司執行,第9-10號事務由交易所執行,最後兩種事務屬於資料庫維護事務,與客戶操作無關。
編譯準備
原始碼包下載
$git clone osdldbt-dbt5
Linux作業系統,可支援x86和arm架構平臺
Cmake
gcc
dbt-5
- 修改CMakeList.txt
增加sys_config查詢路徑
FIND_PROGRAM(PG_CONFIG sys_config)
為
FIND_PROGRAM(PG_CONFIG sys_config)
/home/km/kes為kes某個版本的安裝目錄
2.執行編譯
$make
3.安裝
$make install DESTDIR=/home/km/dbt5
/home/km/dbt5為安裝dbt-5的目錄
4.
EGen
進入egen/prj
$
cd egen/prj
$make -f Makefile.pgsql
顯示:
在egen/bin下有兩個可執行程式:
EGenLoader
EGenValidate
5. storedprocs functions
進入 storedprocs/pgsql/c
$
make
$ make install
執行make install顯示:
/bin/mkdir -p '/home/km/kes/share/postgresql/contrib'
/bin/mkdir -p '/home/km/kes/lib/postgresql'
/usr/bin/install -c -m 644 broker_volume.sql customer_position.sql market_feed.sql market_watch.sql security_detail.sql trade_lookup.sql trade_order.sql trade_result.sql trade_status.sql trade_update.sql data_maintenance.sql trade_cleanup.sql '/home/km/kes/share/postgresql/contrib/'
/usr/bin/install -c -m 755 broker_volume.so customer_position.so market_feed.so market_watch.so security_detail.so trade_lookup.so trade_order.so trade_result.so trade_status.so trade_update.so data_maintenance.so trade_cleanup.so '/home/km/kes/lib/postgresql/'
1、dbt5測試主要程式
安裝完成後在安裝目錄的bin下有如下檔案:
-rwxr-xr-x 1 km mqm 1619147 10月 27 09:58 BrokerageHouseMain
-rwxr-xr-x 1 km mqm 9923 10月 27 01:41 dbt5-generate-report
-rwxr-xr-x 1 km mqm 416 10月 27 01:41 dbt5-get-os-info
-rwxr-xr-x 1 km mqm 612 10月 27 01:41 dbt5-pgsql-backup-db
-rwxr-xr-x 1 km mqm 3490 10月 27 01:41 dbt5-pgsql-build-db 建庫和輸入測試資料
-rwxr-xr-x 1 km mqm 2717 10月 27 01:41 dbt5-pgsql-check-db
-rwxr-xr-x 1 km mqm 1374 10月 27 01:41 dbt5-pgsql-create-db
-rwxr-xr-x 1 km mqm 30291 10月 27 01:41 dbt5-pgsql-create-indexes
-rwxr-xr-x 1 km mqm 22206 10月 27 01:41 dbt5-pgsql-create-tables
-rwxr-xr-x 1 km mqm 22590 10月 27 01:41 dbt5-pgsql-db-plans
-rwxr-xr-x 1 km mqm 3824 10月 27 01:41 dbt5-pgsql-db-stat
-rwxr-xr-x 1 km mqm 521 10月 27 01:41 dbt5-pgsql-drop-db
-rwxr-xr-x 1 km mqm 2753 10月 27 01:41 dbt5-pgsql-drop-tables
-rwxr-xr-x 1 km mqm 1736 10月 27 01:41 dbt5-pgsql-load-stored-procs
-rwxr-xr-x 1 km mqm 618 10月 27 01:41 dbt5-pgsql-restore-db
-rwxr-xr-x 1 km mqm 1061 10月 27 01:41 dbt5-pgsql-start-db 啟動資料庫
-rwxr-xr-x 1 km mqm 470 10月 27 01:41 dbt5-pgsql-stop-db 停止資料庫
-rwxr-xr-x 1 km mqm 4024 10月 27 01:41 dbt5-plot-transaction-rate
-rwxr-xr-x 1 km mqm 5094 10月 27 01:41 dbt5-post-process 生成報告
-rwxr-xr-x 1 km mqm 19029 10月 27 01:41 dbt5-run-workload 執行測試
-rwxr-xr-x 1 km mqm 2509 10月 27 01:41 dbt5-sysstats
-rwxr-xr-x 1 km mqm 3339405 10月 27 09:58 DriverMain
-rwxr-xr-x 1 km mqm 2098150 10月 27 09:59 MarketExchangeMain
-rwxr-xr-x 1 km mqm 4511380 10月 27 09:59 TestTxn
其中dbt5打頭的是shell和python指令碼,
BrokerageHouseMain 券商伺服器程式
DriverMain 客戶交易程式
MarketExchangeMain 交易所服務程式
TestTxn
2、egen程式
EGen is a TPC provided software package that accompanies TPC-E and it is
designed to facilitate its implementation. The main components of EGen are EGen-Loader, EGenDriver and EGenTxnHarness. EGenLoader is used to generate data
for the database; it has two built-in loaders, one that generates output flat files,and another that loads a Microsoft SQL Server database; EGenLoader can be ex-tended to support direct loading of other databases. We extended EGenLoader tosupport PostgreSQL, as we will show in the next section. EGenDriver facilitatesthe implementation of a driver; it has the following components: EGenDriverCE(Customer Emulator), EGenDriverMEE (Market Exchange Emulator) and EGen-DriverDM (Data Maintenance). EGenTxnHarness is a TPC provided C++ class
that defines the transaction logic, such class is not allowed to be changed by thesponsors. This logic is used together with the transactions defined on the database server.
目錄資訊如下:
bin
EGenLoader
EGenValidate
flat_out
flat_in
測試環境準備
- Python 和 R語言環境
版本:R version 3.0.1 (2013-05-16) -- "Good Sport"
編譯方式:
1)將原始碼包解壓。
tar xvfz R-3.01.tar.gz
2)編譯安裝
$./configure --prefix=/usr/local/R/R-3 --with-gnu-ld --with-cairo --with-x --enable-R-shlib
$make
$make install
2.R語言rpy2 外掛
版本:2.1.8
將原始碼解壓
$tar -zxvf rpy2-2.1.8.tar.gz
3.程式碼修改
修改 rpy2-2.1.8版本中
rpy/rinterface/rinterface.c中1415行中
extern void Rf_PrintWarnings(void);
Rf_PrintWarnings(); /* show any warning messages */
註釋這兩行
/*
extern void Rf_PrintWarnings(void);
Rf_PrintWarnings(); */ /* show any warning messages */
4.編譯安裝
$ python setup.py build --r-home /usr/local/R/R-3/lib64/R/ install
建庫命令:dbt5-pgsql-build-db
Usage:
./dbt5-pgsql-build-db [option]
./dbt5-pgsql-build-db -h
Options:
-b <integer>
Beginning customer ordinal position 開始客戶序號位置
-c <integer>
Number of customers for this instance 資料庫例項有多少個客戶
-d <dbname>
KESDATABASE name KES資料庫名
-h
this help
-i <path>
Path to EGen EGen編譯安裝的路徑
-l <port>
database port 資料庫監聽埠
-p <database_parameters>
PostgreSQL database parameters
-r
Drop existing database before building a new database
-s <scale factor>
Scale factor (customers per 1 trtps)
-t <integer>
Number of customers (total) 客戶總數
-u
Use tablespaces
-w <days>
Initial trade days (business days) to populate
使用指定埠進行測試的命令:
dbt5-pgsql-build-db -l 54322 -c 1000 -t 1000 -s 500 -w 1 -p "-p 54322"
dbt5-run-workload
usage: run_workload.sh
-c <number of customers> 資料庫中的客戶數(在冊的客戶數)
-d <duration of test> 測試時間
-u <number of users> 同時線上的使用者數(客戶數)
other options:
-a <pgsql> 使用pg
-b <database parameters> 傳輸給資料庫的引數列表
-f <scale factor. (default 500)> 比例因子?
-h <database host name. (default localhost)> 資料庫地址
-i <egen_path> egen程式路徑或者使用環境變數EGENDIR指定
-l <pacing delay. (default 0)>
-n <database name. (default dbt5)> 資料庫名稱
-o <result output dir> 結果輸出目錄
-p <database port number. (default 5432)> 資料庫埠
-q <event1,[event2,...]> (Linux perf events)
-r <random number seed, invalidates test>
-s <delay between starting threads in milliseconds (default 1000)>
-t <customers total> 客戶總數
-w <initial trade days. (default 300)> 初始交易天數
-x (oprofile)
-y (readprofile)
-z <comment describing this test run>
Example: sh run_workload.sh -c 1000 -t 300 -u 3 -i 10
Test will be run for 300 seconds with 3 users, on a 1000 customers database with 10 initial trade days, and seed 5
使用指定埠進行測試的命令:
dbt5-run-workload -a pgsql -c 500 -t 500 -d 120 -u 1 -f 500 -w 300 -p 54322 -n dbt5test -o ./results
- kingbase資料庫服務程式
- dbt5測試程式
包括dbt5,egen,storedprocs
- 安裝kingbase資料庫服務程式
$tar -zxvf kingbase########.tar.gz
2.準備dbt5測試程式安裝包
kingbase版本使用以下的安裝包:
$tar -zxvf osdldbt-dbt5_kb.tar.gz
3.編譯安裝
按照第4章步驟編譯安裝
$mkdir dbt5test
5.在測試目錄下建立setp檔案
setp檔案內容如下:
export EGENDIR=/home/km/osdldbt-dbt5/egen egen程式碼目錄
export DBT5DBNAME=dbt5test 資料庫例項名稱
export DBT5KBDATA=/home/km/dbt5test/data 資料庫資料目錄
export DBT5TSDIR=/home/km/dbt5test dbt5測試目錄,為當前目錄
export KB_HOME=$HOME/kingbase 資料庫安裝目錄
export DBT5_HOME=$HOME/dbt5 dbt5測試程式安裝目錄
export R_HOME=/usr/local/R/R-3/lib64/R R語言安裝目錄
export PATH=.:$R_HOME/bin:$KB_HOME/bin:$DBT5_HOME/bin:$PATH
PATH路徑包括:
R語言,資料庫安裝目錄bin,dbt5安裝目錄bin
export 、LD_LIBRARY_PATH=$KB_HOME/lib:$R_HOME/lib:$LD_LIBRARY_PATH
動態庫路徑包括:資料庫安裝目錄lib,R語言lib
執行setp
$ . ./setp
6.建庫建立資料
使用預設埠和預設配置:
$dbt5-pgsql-build-db -c 1000 -t 1000 -s 5 -w 1
使用指定埠54322和資料庫例項名稱
$ dbt5-pgsql-build-db -l 54322 -c 1000 -t 1000 -s 500 -w 1 -p " -d ${DBT5DBNAME} -p 54322"
7.執行測試程式
使用預設埠和預設配置:
$ dbt5-run-workload -a pgsql -c 1000 -t 1000 -d 120 -u 1 -f 500 -w 300 -n dbt5test -o ./results
使用指定埠:
$ dbt5-run-workload -b " -d ${DBT5DBNAME} -p 54322" -a pgsql -c 500 -t 500 -d 120 -u 1 -f 500 -w 300 -p 54322 -n dbt5test -o ./results
執行完dbt5-run-workload
結果如下顯示:
其中29.9為tpse。
效能指標(tpsE, transactions per second E)和價效比(美元/tpsE)。
改造,突破
可以看到,tpse還是比較低的。
由此我們對dbt5測試工具做了以下改造:
先看一下dbt5執行拓撲圖:
在使用dbt5測試的過程中,我們發現了一些問題,最主要的問題就是當增加user數時(併發處理能力),dbt5的股票交易所模組程式會有大量的程式被建立出來,且持續增加,這樣一來就會將當前伺服器環境的檔案控制程式碼和程式資源等計算資源快速消耗光,導致無法繼續測試下去。
由此,通過閱讀和理解dbt5原程式的程式碼邏輯,分析了出現以上問題的起因,故對dbt5原架構做了以下的優化,過程如下:
優化前:
tpsE將以Trade_result的統計流程為主要統計資料。
優化後:
這樣一來,消除了在做TPCE測試時增加user數,(通過增加user數,增加併發處理能力),出現的大量程式和執行緒產生的情況,測試的結果tpsE也有了顯著提升。
tpsE由改造前100以內,提高改造後的2000左右。(伺服器的CPU核數為64 核)。
【更多人大金倉資料庫資訊, 詳見 】
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015730/viewspace-2883642/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Jepsen 測試框架在圖資料庫 Nebula Graph 中的實踐框架資料庫
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 九、python讀金倉資料庫資料庫MySqlPython
- Doris和Flink在實時數倉實踐
- [JM_08]JMeter連線Mysql資料庫測試實踐JMeterMySql資料庫
- 以資料思維和技能提升資料應用測試實踐
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 五、python讀mysql寫入金倉資料庫資料庫MySqlPython
- API介面的測試步驟和返回資料展示API
- 介面測試框架接入效能測試實踐分享框架
- 應用實踐——新東方實時數倉實踐
- 實時數倉在滴滴的實踐和落地
- 自動化測試框架選型和落地實踐路徑框架
- 位元組跳動資料湖在實時數倉中的實踐
- 基於代理的資料庫分庫分表框架 Mycat實踐資料庫框架
- 金倉資料庫資料遷移實戰:從MySQL到KES的順利遷移資料庫MySql
- 高德在提升定位精度方面的探索和實踐
- BES 在大規模向量資料庫場景的探索和實踐資料庫
- B站運維數倉建設和資料治理實踐運維
- 大資料測試與 傳統資料庫測試大資料資料庫
- 詩和遠方:螞蟻金服 Service Mesh 深度實踐 | QCon 實錄
- openGauss資料庫在CentOS上的安裝實踐資料庫CentOS
- 資料庫測試指南資料庫
- 金倉資料庫KingbaseES儲存過程 RETURN語句資料庫儲存過程
- 金倉資料庫KingbaseES PLSQL 支援語句級回滾資料庫SQL
- 金倉資料庫KingbaseES等待事件之LWLock lock_manager資料庫事件
- HTTP框架Hertz實踐入門:效能測試指南HTTP框架
- GoLang快速上手單元測試(思想、框架、實踐)Golang框架
- 虎牙直播在微服務改造方面的實踐和總結微服務
- 圖資料庫 Nebula Graph 的程式碼變更測試覆蓋率實踐資料庫
- 【Maven】配置多個倉庫(第三方和公司內部倉庫)Maven
- 第三方資料庫框架 - GreenDao簡介資料庫框架
- SaaS 模式雲資料倉儲 MaxCompute 資料安全最佳實踐模式
- 向量資料庫落地實踐資料庫
- DM資料庫操作實踐資料庫
- 在持續測試中使用哪種測試?談談DevOps在測試策略中的實踐!dev
- PHP 單元測試與資料庫測試PHP資料庫
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 六、python讀mysql資料庫資料庫MySqlPython
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 七、python讀oceanBase資料庫資料庫MySqlPython
- 2.4. 測試資料庫資料庫