金倉資料庫在 TPCE(dbt5,tpsE)測試框架方面的實踐和突破

戴眼鏡的肚子發表於2022-03-23

        人大金倉資料庫在為某專案認證時,需要提供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

  1. 修改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

     

    測試環境準備

  1. 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

        

  1. kingbase資料庫服務程式
  2. dbt5測試程式

包括dbt5,egen,storedprocs

         

  1. 安裝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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章