炫“库”行动-人大金仓有奖征文---TPC-E测试工具osdldbt-dbt5编译和测试方法

Posted kangming7508

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了炫“库”行动-人大金仓有奖征文---TPC-E测试工具osdldbt-dbt5编译和测试方法相关的知识,希望对你有一定的参考价值。

文本正在参与【炫“库”行动—人大金仓有奖征文】,活动链接:CSDN 

1    TPC-E和测试工具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
    或
    https://git.code.sf.net/p/osdldbt/dbt5 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号事务由交易所执行,最后两种事务属于数据库维护事务,与客户操作无关。
2    编译准备
2.1    准备源代码包和库
源代码包下载
$git clone https://git.code.sf.net/p/osdldbt/dbt5 osdldbt-dbt5
    
2.2    编译环境准备
Linux操作系统,可支持x86和arm架构平台
Cmake
gcc
3    编译
3.1    编译dbt-5
1、    修改CMakeList.txt
增加pg_config查找路径
FIND_PROGRAM(PG_CONFIG pg_config)

FIND_PROGRAM(PG_CONFIG pg_config /home/km/pg12)
/home/km/pg12为pg某个版本的安装目录
2、    运行编译
$make
3、    安装
$make install DESTDIR=/home/km/dbt5
/home/km/dbt5为安装dbt-5的目录
3.2    编译EGen
进入egen/prj
$ cd egen/prj
$make -f Makefile.pgsql
显示:
在egen/bin下有两个可执行程序:
EGenLoader  
EGenValidate
3.3    编译 storedprocs functions
进入storedprocs/pgsql/c
$ make
$ make install
运行make install显示:
/bin/mkdir -p '/home/km/pg12/share/postgresql/contrib'
/bin/mkdir -p '/home/km/pg12/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/pg12/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/pg12/lib/postgresql/'
4    测试程序
4.1    测试程序
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

4.2    测试环境准备
1.    Python
2.    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
3.    R语言rpy2 插件
版本:2.1.8
1)    将源代码解压
$tar -zxvf rpy2-2.1.8.tar.gz

2)    代码修改
修改 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 */
3)    编译安装
$ python setup.py build  --r-home /usr/local/R/R-3/lib64/R/   install

4.3    建库程序介绍
建库命令: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>
        PGDATABASE name  PG数据库名
    -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"
4.4    运行程序介绍
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
5    测试步骤
5.1    测试安装包
1.    pg数据库或人大金仓KES数据库服务程序
2.    dbt5测试程序
包括dbt5,egen,storedprocs

5.2    安装测试程序
1、    安装pg或人大金仓KES数据库服务程序
$tar -zxvf pg12.tar.gz
$tar -zxvf kingbase########.tar.gz
2、    准备dbt5测试程序安装包
pg版本使用以下的安装包:
$tar -zxvf osdldbt-dbt5.tar.gz

kingbase版本使用以下的安装包:
$tar -zxvf osdldbt-dbt5_kb.tar.gz
3、    编译安装
按照第4章步骤编译安装

5.3    步骤
1、    创建测试目录
$mkdir dbt5test
2、    在测试目录下创建setp文件
Setp文件内容如下:

export EGENDIR=/home/km/osdldbt-dbt5/egen egen代码目录
export DBT5DBNAME=dbt5test 数据库实例名称
export DBT5PGDATA=/home/km/dbt5test/data  数据库数据目录
export DBT5TSDIR=/home/km/dbt5test          dbt5测试目录,为当前目录
export PG_HOME=$HOME/pg12                 数据库安装目录
export DBT5_HOME=$HOME/dbt5             dbt5测试程序安装目录
export R_HOME=/usr/local/R/R-3/lib64/R        R语言安装目录
export PATH=.:$R_HOME/bin:$PG_HOME/bin:$DBT5_HOME/bin:$PATH
PATH路径包括:
R语言,数据库安装目录bin,dbt5安装目录bin
export 、LD_LIBRARY_PATH=$PG_HOME/lib:$R_HOME/lib:$LD_LIBRARY_PATH

        动态库路径包括:数据库安装目录lib,R语言lib

执行setp

$ . ./setp

3、    建库创建数据

使用默认端口和默认配置:
$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"
4、    运行测试程序
使用默认端口和默认配置:
$ 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
5.4    测试结果
运行完dbt5-run-workload
结果如下显示:

其中29.9为tpse。
性能指标(tpsE, transactions per second E)。

以上是关于炫“库”行动-人大金仓有奖征文---TPC-E测试工具osdldbt-dbt5编译和测试方法的主要内容,如果未能解决你的问题,请参考以下文章

炫“库”行动-人大金仓有奖征文-KingbaseES V8R3 读写分离集群在线扩容案例

炫“库”行动-人大金仓有奖征文-KingbaseES V8R3 读写分离集群在线扩容案例

炫“库”行动-人大金仓有奖征文-KingbaseES V8R3 读写分离集群在线扩容案例

炫“库”行动-人大金仓有奖征文-KingbaseES V8R3 读写分离集群在线扩容案例

炫“库”行动-人大金仓有奖征文—金仓数据库入门体验

炫“库”行动-人大金仓有奖征文—金仓数据库的Windows安装教程