欢迎来到天天文库
浏览记录
ID:38806667
大小:161.50 KB
页数:5页
时间:2019-06-19
《浅谈存储过程在性能测试中的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、浅谈存储过程在性能测试中的应用Ⅰ.背景介绍:在信息化时代的今天,信息管理软件日益发展强大。随着数据量的激增,人们对于软件的性能越来越关注。性能测试变得越来越重要。负载和数据容量测试是重要的性能测试类型。如何快速创建大量的有效数据成为性能测试的前提条件。在本文中,我们结合oracle数据库介绍一种快速插入数据的方法,即存储过程构造数据法。这种方法应用方便,直接在数据库端编写和运行代码,方便调试和维护,为性能测试创造有利的数据条件。Ⅱ.存储过程的定义:存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数
2、)来执行它。存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。在oracle中,复杂的应用规则和业务可以作为过程存储。存储过程是一组sql和pl/sql语句,它允许我们把加强的业务规则从应用移动到数据库中。存储过程允许被重复使用,使用存储过程大大提高数据的访问效率和提升应用系统的性能。Ⅲ.存储过程使用前提:为了创建一个过程对象,必须拥有创建procedure的系统权限。
3、如果此过程对象在另一个用户的领域中,则必须拥有createanyprocedure的权限。因为存储过程与数据库的表关联,所以过程的所有者必须对表有操作权限,而执行这些过程对象的用户并不需要在所给予的表上拥有特权,仅需要excute权限即可。Ⅳ.存储过程应用于性能测试实例:某系统为该市中考考生成绩查询系统。该市共有将近10万名考生,要求在查询成绩显示时间不大于5秒。1.下面是基本的性能测试流程:来看“数据准备”这一过程,根据这一需求进行性能测试。要模拟10万名考生,显然通过系统逐条录入数据不太现实。这里通过存储过程将很轻松的解决这个问题。2.
4、分析数据库中相关的表结构:在插入有关联关系的表的数据时,首先要理清表之间的关联。从上图关联关系中可以看出:(1)首先构造学生基本表的数据,学生ID是主键,这里引用序列作为ID;(2)构造考试科目表的数据,科目ID是主键,引用科目序列作为ID;(3)构造成绩表的数据,成绩表引用学生表的ID和科目表ID作为成绩表的外键,这里运用游标来实现;3.编写脚本过程:⑴创建序列:①创建学生表序列供引用:Createsequencestudent_seqMinvalue1Maxvalue1000000Startwith1Increamentby1Nocac
5、he;②创建科目表序列供引用:Createsequencesubject_seqMinvalue1Maxvalue10000Startwith1Increamentby1Nocache;⑵用存储过程依次创建学生基本信息表、科目表、成绩表的数据:①创建学生表数据:createorreplaceprocedurepro_studentisStudentidvarchar2(20);Studentnamevarchar2(20);Studentsexvarchar2(20);Studentagevarchar2(20);Studentschool
6、varchar2(100);Txtsqlvarchar2(1000);Layer1number;BeginForlayer1in1..100000loopTxtsql:=‘insertintostudent(student_id,student_name,student_sex,student_age,student_school)values(’;Selectstudent_seq.nextvalintostudentidfromdual;Studentname:=‘,‘‘STU_‘
7、
8、studentid
9、
10、’’’’;Studentsex
11、:=‘,‘‘女’’’;Studentage:=‘,‘‘14’’’;Studentschool:=‘,‘‘育民中学’’)’;Txtsql:=txtsql
12、
13、studentid
14、
15、studentname
16、
17、studentsex
18、
19、studentage
20、
21、studentschool;Excuteimmediatetxtsql;Commit;Endloop;Endpro_student;②创建科目表数据:createorreplaceprocedurepro_subjectisSubjectidvarchar2(20);Subjectnamevar
22、char2(20);Txtsqlvarchar2(1000);Layer2number;BeginForlayer2in1..10loopTxtsql:=‘insertintos
此文档下载收益归作者所有