大型数据库技术实践实验报告03Word下载.docx
《大型数据库技术实践实验报告03Word下载.docx》由会员分享,可在线阅读,更多相关《大型数据库技术实践实验报告03Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
![大型数据库技术实践实验报告03Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/14/999f1912-a050-4a50-bc96-5b0f53bf97ea/999f1912-a050-4a50-bc96-5b0f53bf97ea1.gif)
姓 名
a
专业、班
d
实验地点
4#416
指导教师
c
实验时间
2014.6.25
一、实验目的及要求
a)通过实验,了解Oracle的Latch和等待机制
二、实验设备(环境)及要求
a)操作系统:
Windows2000或WindowsXP
b)数据库管理系统:
Oracle数据库
三、实验内容和要求
1通过实验展示系统变量绑定和无变量绑定的性能,并进行比较和分析
2显示之前运行过的哪些SQL因没绑定变量造成大量硬解析
3通过实验模拟表数据块热块冲突的场景,展示减小每块存储量对性能的影响,并进行比较和分析
4通过实验模拟索引数据块热块冲突的场景,展示反向索引对性能的影响,并进行比较和分析
5通过实验模拟段头数据块热块冲突的场景,展示自动段管理对性能的影响,并进行比较和分析
四、实验结果和分析
(1)通过实验展示系统变量绑定和无变量绑定的性能,并进行比较和分析
下面是一个在有绑定变量和不绑定变量情况下,latch资源争用的对比测试,测试时让一跳SQL语句执行10000次,然后给出各自的执行过程中产生的资源使用情况。
创建第一个存储过程p1,不使用变量绑定方式执行SQL10000次,创建第二个存储过程p2,使用变量绑定方式执行SQL10000次:
测试创建的性能采集包runStats_pkg分别在测试开始、存储过程p1运行结束、存储过程p2运行结束的3个时间点采集了性能数据,最后在报告中给出了2个存储过程个字的latch资源使用情况及对比情况。
从这个结果中可以清楚地看到不绑定变量的Latch征用时非常严重的,注意输出结果中几个librarycache的Latch在数值上的差异,可以看到,绑定变量时要比不绑定变量时这些Latch征用小得多。
(2)显示之前运行过的哪些SQL因没绑定变量造成大量硬解析
硬解析简言之即一条SQL语句没有被运行过,处于首次运行,则需要对其进行语法分析,语
义识别,跟据统计信息生成最佳的执行计划,然后对其执行。
而软解析呢,则是由于在librarycache已经存在与该SQL语句一致的SQL语句文本
、运行环境,即有相同的父游标与子游标,采用拿来主义,直接执行即可。
软解析同样经历语法分析,语义识别,且生成hashvalue,接下来
在librarycache搜索相同的hashvalue,如存在在实施软解析。
将v$sql视图中的数据用remove_constants处理后,更新到t1表中:
查出除了谓词条件不同的SQL语句和它们的执行次数,在这里是查询SQL没有被重用超过100次的SQL语句:
(3)通过实验模拟表数据块热块冲突的场景,展示减小每块存储量对性能的影响,并进行比较和分析
可以看到T表上每个数据块平均存放行数为70行左右:
T1表上将每个数据块上存放的记录数缩小为2条,这样T1表上有数据的数据块数量要远远多于T表
当我们分别从T,T1表中选出1000条数据时,可以看到两个表的执行计划是相同的,返回的结果集是相同的,但T1表的一致性读的数量是620,要比T表143大出很多,原因就是T1表中的行分布在更多的数据块上,导致Oracle需要读取得数据块来完成查询。
从另一个角度看,我们把数据分布到了更多的数据块上,大大降低了一个数据块被重复读取的概率。
但是这种方式的缺点是显而易见的,就是降低了数据读取的性能,在这种情况下,访问相同的数据意味着需要读取更多的数据块,性能会有所降低。
不过如果存在这样的情况,比如很多用户只修改1条记录并且各自更新的数据不同,那么这样做的好处就非常明显。
在T表中,一个数据块上大约有70条记录,就是说很可能70个用户会同时访问一个数据块,这必然导致热块的出现;
当我们让每个数据块只存放2条记录时,最多只会有2个用户会同时访问一个数据块,这样热块的概率将会被极大地降低。
(4)通过实验模拟索引数据块热块冲突的场景,展示反向索引对性能的影响,并进行比较和分析
对于一个在实际应用中非常常见的条件按范围的查询,在反向索引中,却只能够通过全表扫描或者全索引扫描的方式来实现,这就是反向索引的一个非常严重的缺陷,所以在生产环境下使用它时要十分慎重。
(5)通过实验模拟段头数据块热块冲突的场景,展示自动段管理对性能的影响,并进行比较和分析
在会话2中插入数据时间为
在会话1中插入数据时间为
经分析,自动段管理会使性能优化很多
五、分析与讨论
1本次实验我出现了无法连接到test用户上,原因是我没有打开数据库
2我了解到了:
绑定变量:
首先其实质是变量,有些类似于我们经常使用的替代变量,替代变量使用&
占位符,只不过绑定变量使用:
替代变量使用时为&
variable_para,相应的绑定变量则为:
bind_variable_para
通常一个SQL语句包含动态部分和静态部分,占位符实质是SQL语句中容易发生变化的部分,通常为其条件或取值范围。
动态部分在一般情
况下(数据倾斜除外),对执行计划的生成的影响是微乎其微的。
故同一SQL语句不同的动态部分产生的执行计划都是相同的。
六、教师评语
签名:
日期:
成绩