人大金仓数据库在为某项目认证时,需要提供TPCE测试框架和测试的结果可以达到比较高的测试数据。为此我们利用现有的开源技术和技术改造,成功的完成了认证并拿到资质证书。

具体介绍如下:

首先介绍TPCE相关和编译相关的知识。

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号事务由交易所执行,最后两种事务属于数据库维护事务,与客户操作无关。

编译准备

准备源代码包和库

源代码包下载

$git clone https://git.code.sf.net/p/osdldbt/dbt5 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)

/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章步骤编译安装

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

8.测试结果

运行完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 核)。

其他参考:

数据库TPCE benchmark测试工具_luke_wang的专栏-CSDN博客_tpce测试

【更多人大金仓数据库信息, 详见 https://help.kingbase.com.cn/ 】

金仓数据库在 TPCE(dbt5,tpsE)测试框架方面的实践和突破相关推荐

  1. 金仓数据库 KingbaseES V8.3至V8.6迁移最佳实践(3. KingbaseES移植能力支撑体系)

    3. KingbaseES移植能力支撑体系 本章节包含以下内容: 迁移工具 KingbaseES应用能力概述 KingbaseES支撑系统割接能力 3.1. 迁移工具 KingbaseES 支持应用系 ...

  2. 金仓数据库 KingbaseES V8.3 至 V8.6 迁移最佳实践(4. V8.3 到 V8.6 数据库移植实战)

    4. V8.3 到 V8.6 数据库移植实战 由于 KingbaseES 内部兼容特性,在实际应用中,一般只需很少甚至不做任何修改,用户便可把 V8.3 数据库移植到 V8.6 环境中运行.不仅如此, ...

  3. 国产化适配之人大金仓数据库(一)安装启动测试

    本文章主要介绍金仓数据的安装.启动.数据库连接测试. 前言 虽然主流数据库用的人多,但是在某些场合和环境必须要用国产的东西,包括数据库和中间件等,如果系统在开发之初用的是国外主流的东西,那么在使用国产 ...

  4. 使用DbVisualizer连接和管理金仓数据库

    DbVisualizer下载链接: http://www.dbvis.com/download/ 安装DbVisualizer 添加金仓数据库驱动 我安装的DbVisualizer版本是8.0.1,首 ...

  5. 人大金仓数据库sql语句_人大金仓数据库总结(SQL和JDBC)

    人大金仓作为一款国产数据库,使用的人数和相关资料都比较少. 最近使用人大金仓数据库,做了个简单的SQL和java jdbc的测试,希望能够供大家参考. 1.SQL语句 创建表: CREATE TABL ...

  6. jpa 人大金仓数据库方言_兼容认证 | 人大金仓数据库管理系统完成与浪潮产品兼容认证...

    日前,人大金仓数据库管理系统KingbaseES V7.V8完成与浪潮GS Cloud数字化管理平台.iGIX数字化能力平台完成兼容认证. 测试结果显示:双方产品完全兼容,其功能.性能和兼容性等各方面 ...

  7. 金仓数据库KingbaseES表空间(tablespace)知多少

    金仓数据库KingbaseES表空间定义 金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等.一旦表空间被创建,那么就可以在创建数据库对象时通 ...

  8. 银河麒麟V10安装与运行人大金仓数据库

    一.操作系统 Linux-4.19.90-17.ky10.aarch64-aarch64-with-kylin-10-Tercel 64bit 二.准备工作 1. 数据库下载,人大金仓官网下载地址 h ...

  9. 人大金仓数据库:睡在甲骨文卧榻之侧

    北京中关村上地科技大厦4号楼是一座并不起眼的9层楼房,让人好奇的是两家知名的数据库公司紧挨在一起却又不相往来.5楼和6楼是中国本土的数据库一线品牌--北京人大金仓信息技术股份有限公司(以下简称&quo ...

  10. 金仓数据库KingBaseES V7安装指南

    1.按照教程操作 下载和系统符合的软件,解压,找到setup文件,点击install.exe (1)语言选择,默认汉语,想使用英语的可以自行选择 要选择完全安装 (2)检查依赖项 如果是这样的界面就不 ...

最新文章

  1. 数据爆发时代,英特尔携手腾讯构筑全面的数据长城
  2. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(四)
  3. 【OpenCV笔记】图像预处理
  4. 在linux下使用ZThread
  5. linux面向连接的协议,linuxTCP协议.ppt
  6. PHP扩展开发 - 构建第一个PHP扩展
  7. 定时任务 - 定时关闭超期未支付订单
  8. 骚年快答 | 为何微服务项目都使用单体代码仓库?
  9. aws lambda_Express.js和AWS Lambda —无服务器的爱情故事
  10. 1049. 最后一块石头的重量 II(JavaScript)
  11. SQL 合并列值和拆分列值
  12. js闭包原理与例子[转]
  13. 在sublime text 3中让.vue文件的内容变成彩色
  14. 自动与时间服务器时间同步,Windows系统时间同步(附时间同步服务器地址)
  15. 算法竞赛入门经典笔记
  16. 微信小程序——绘制时钟
  17. Qt -qss样式表
  18. AD7606分析讲解
  19. python 山脊图_《图像处理实例》 之 寻找山脊线
  20. vue后台管理侧边栏菜单布局

热门文章

  1. 【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码
  2. 用友t3服务器系统管理软件,T3用友通系统管理常见问题及解决方案
  3. Belief Propagation信念传播算法详解
  4. python的struck.pack的用法:浮点转字节
  5. flv.js播放报错
  6. 5G技术—5G网络架构及关键技术详述测试题目
  7. 射影几何----齐次坐标下的三点共线和非齐次坐标下的三点共线是等价的
  8. 牛客java选择题每日打卡Day12
  9. 【源码】6个超炫酷的HTML5电子书翻页动画
  10. 使用Maxima求解常微分方程~