性能测试场景之一:
[1]03 临时表里有20W记录,发送ESB
说明:结算后台对完账后,在对账汇总确认菜单中点“确认”按钮,系
统会将已清算的数据信息插入资金库的临时表pac_biz_account_histmp中,然后逐步esb发送给物流订单系统进行分润处理。
一
通过工具生成20w笔记录1、 首先介绍一种很方便的方法:采用PL SQL Develop内嵌的data generator工具
1) 打
开PL SQL Develop,选择Tools/Data Generator,出现以下界面
2) Owner中选择资金库Pacioli,Table中选择临时表
pac_biz_account_histmp,number of records中输入200000(这些都可以根据具体的需要进行选择的噢)
然
后下面会出现临时表中所有的字段,根据实际情况进行配置后,显示如下:
3) 当然拉,为了防止ID和现有的表重复,我们是可以使用SEQUENCES的,点
击每个字段后面的…选项可以对每个字段进行设置
4) 所有的准备好之后,我们可以先测试一下Strat a test
run,测试通过后,可以选择窗口中左下角的create data in DB按钮即可生成数据到临时表中。
2.通过自动化工具实
现,下面以load runner为例
1) Load runner是一款负载压力测试工具,可以通过load
runner的Vurtual User Generator工具实现模拟业务场景然后系统向数据库中插入记录,跟进实际业务实现使用load
runner向表中插入记录,或者通过脚本来实现,现将脚本操作和运行过程分享下:
2) 打开Mercury
LoadRunner,选择applications/Vurtual User
Generator,在出现的窗口中选择Oracle(2-tier)如下图:
3) 点击ok后,在弹出的窗口中选择:
其中Program to record
选择电脑中plsqldev.exe的安装路径,然后点击ok,在弹出的窗口中输入以下脚本:
vuser_init()
{
unsigned
long rownum;
//初始化数据库部分
lrd_init(&InitInfo,
DBTypeVersion);
lrd_initialize_db(LRD_DBTYPE_ORACLE, 3, 0);
lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1, 0, 0);
lrd_ora8_handle_alloc(OraEnv1, SVCCTX, &OraSvc1, 0);//
lrd_ora8_handle_alloc(OraEnv1, SERVER, &OraSrv1, 0);
lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes1, 0);
//连接数据
库
lrd_server_attach(OraSrv1, "PAY", -1, 0, 0);//pay怎么得到的?
//
初化始句柄
lrd_ora8_attr_set_from_handle(OraSvc1, SERVER, OraSrv1, 0,
0);
//连接数据库
lrd_ora8_attr_set(OraSes1, USERNAME,
"adm_zhifb", -1, 0);
lrd_ora8_attr_set(OraSes1, PASSWORD,
"ali88", -1, 0);
//初始化句柄
lrd_ora8_attr_set_from_handle(OraSvc1,
SESSION, OraSes1, 0, 0);
//进程开始
lrd_session_begin(OraSvc1,
OraSes1, 1, 0, 0);
lrd_ora8_handle_alloc(OraEnv1, STMT,
&OraStm1, 0);
//设定语句
lrd_ora8_stmt(OraStm1, "insert into
zhifb.beyond_bank_pay_online(id,iw_account_no,gmt_create) values
(zhifb.seq_beyond_bank_pay_online.nextval,1234,to_date('2005-4-12
13:45:34','YYYY-MM-DD fmHH24fm:MI:SS'))",1,0,0);
//执行语句
lrd_ora8_exec(OraSvc1,
OraStm1, 0, 0,&rownum,0,0, 0, 0, 1);
return 0;
}
这
个脚本是师傅流川教我的,目前我也不大懂,有兴趣的同学以后可以和我一起学习这个哦,不过这个脚本在运行的时候向临时表插入有点问题,希望各位大虾指点下
二 直接通过SQL语句来实现 在表浏览视图,选择表后,按住鼠标左键将表拖到query
sql窗口,然后在弹出的快捷菜单中选择insert,然后在另一个表里面点select,修改where条件(这样就可以不用书写这么一大串SQL语句
了,直接通过鼠标操作实现)
insert into
pac_biz_account_histmp
(id, bank_name,
trans_code, digest_no, amount, trans_log_id, account_date,
compare_date, clear_date, voucher_no, batch_no, gmt_create,
gmt_modified, memo, standby_voucher_no, operator)
select id, bank_name,
trans_code, digest_no,amount,trans_log_id,account_date,
compare_date, clear_date, voucher_no,
batch_no, gmt_create, gmt_modified,
memo, standby_voucher_no, operator
from
pac_biz_account_history where rownum<5001
and bank_name = '宅急送快递' and
trans_code = '400322'
三 通过存储过程来
实现存储过程可以理解为是内嵌在ORACLE里面的包装好的SQL语句。存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般
SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
在公司内部,创建存储过程是必须通过DBA的批准的。在数据库中查找
存储过程很方便,在数据库浏览窗口中选择Procedures来查看,可以看一个简单的例子:
while()
{
callprocedure("p_test").;
}
create procedure
p_test(a,b,c)
begin
insert into t values(a,b,c);
end;
四 通过程序来实现 程序实现有两种方式
一种为通过for循环,链接数据库,然后执行insert操作实现,不过这种方式会每
insert一条记录然后就要链接一次数据库,而且还要网络传输数据到DB中,所以会比较慢
另一种也是通过程序,不过可以把链接数据库的操作在
for循环之前执行,然后insert多条数据的时候就只用耗费网络传输数据的时间了,这样比之前的一种操作要节约时间一些。
附上一个简单的例
子:
java
while()
{
callprocedure("p_test").;
}
create procedure p_test(a,b,c)
begin
insert into
t values(a,b,c);
end;
阅读(3081) | 评论(0) | 转发(0) |