LOB字段占用临时表空间情况研究

作者介绍:裴征峰,现就职于北京海天起点,专家组成员,南京办事处负责人,持有OCP 10g、OCP 11g、OCM 11g证书,主要从事客户的现场维护,重大问题的解决,数据库性能分析,服务质量保证等工作。拥有超过八年的Oracle服务经验,具备丰富的行业服务背景,对Oracle数据库有深刻的理解,在Oracle数据库RAC以及高可用解决方案方面具有深厚的实践经验,擅长数据库故障诊断,数据库性能调优。

问题说明

在对某系统进行维护时,发现临时表空间占用过高,通过以下SQL(GetTmpStatus.sql)检查临时表空间占用过高的会话:

经过检查7102会话,怀疑7102会话执行的过程BEGIN bss_data_extract.query_prod_action(:1, :2, :3, :4); END;有问题,

这个过程定义为:

针对这个存储过程编写测试过程。

环境准备

针对这个情况,把临时表空间调整为150M,并且是非自动扩展

测试1 – 使用包头中定义的CLOB变量

测试1 – 脚本样例

该脚本把CLOB变量定义在包头,观察临时段占用情况

调用过程样例

实例调用过程测试

在同一会话中,两次调用,观察临时段占用情况

再次执行,就报错了,表明临时段无法在会话内共享

结果说明

临时段在同一个会话中都无法重用

测试2 – 不使用包头中定义的CLOB变量

测试2 – 脚本样例

该脚本把CLOB变量定义在包体过程中,观察临时段占用情况

调用过程

一般测试

测试过程

在未设置60025 Event的会话中,执行调用过程二次

再次执行

发现临时段的使用没有增加,表明这种情况下可以在会话内共享临时段。

另开一个会话,再次执行调用:

结果说明

临时段可以在同一个会话中共享,但是对其它会话无法共享

Event 60025测试

设置60025 Event后,执行存储过程的会话需要重连生效。

测试过程

使用60025 Event后,临时段使用完后直接就释放了。不再进行会话内共享,其实这也算另一种形式的共享。

其它会话测试

说明

使用这种写法,并且在设置了Event 60025后,在会话执行完毕后未退出的情况下,LOB临时段就已经释放了。

如果不设置Event 60025,那么LOB字段占用的共享段在会话内共享。

测试结果说明

这个过程使用了最差的写法,导致在同一个会话中都无法重用LOB临时段,需要应用进行修改。

未经允许不得转载:Oracle一体机用户组 » LOB字段占用临时表空间情况研究

相关推荐