Oracle RAC数据库环境下临时表空间的设置问题

Oracle RAC数据库环境下临时表空间的设置问题

在RAC数据库中,有一个非常容易被忽视的问题,那就是RAC数据库的临时表空间的设置。这个问题对Oracle RAC数据库的其实非常重要,其对数据库的整体负载均衡以及请求的及时响应,都有非常重要的影响。

在RAC数据库中,临时表空间会被所有的数据库实例所共享。同时临时表空间会被划分为盘区,即Extent,同时这些盘区会被缓存在实例的SGA中。当一个服务进程要在临时表空间中分配空间的时候,它会首先从当前的实例中的缓存盘区中分配空间。实力会尝试平均的从临时表空间中的所有临时文件中来进行盘区的缓存,以便实现实例能够从所有的临时文件来缓存盘区,进而将负载分布到临时表空间的各个临时文件中。临时表空间临时文件的盘区缓存情况,可以通过如下SQL语句来查看:

selectinst_id,file_id,extents_cached,extents_used from gv$temp_extent_pool;

缓存盘区的大小,是有临时表空间的属性所控制的,这些属性值可以通过如下SQL语句来查询:

select tablespace_name,initial_extent,next_extent

from dba_tablespaces

where tablespace_name=’TEMP’;

盘区的缓存是一种软预留技术。假设某一个RAC实例上的用户会话,发起了进行大规模数据排序或表链接的操作,那么该实例就可能会使用了他缓存的所有盘区,因此该实例就会请求其他实例来释放软预留的一组盘区,在其他实例释放这些已缓存的盘区后,该数据库实例就可以再次将它们缓存。

在盘区进行缓存和释放的时候,是由SS Enquence队列来进行保护的。另外使用CI Enquence队列的DFS锁句柄机制,来实现触发其他实例释放盘区缓存。因此,过多的缓存和释放操作可能会导致SS Enquence队列的等待,以及DFS锁句柄的等待。因此从Oracle11G起,释放盘区缓存的操作是批处理进行的,每次操作100个盘区,因此大幅度降低了SS Enquence队列的争用等待。综上所述,在Oracle RAC数据库环境下,临时表空间的设置要采用如下原则:

Ø  在每一个所规划被使用的临时表空间中,要创建与实例个数相等的临时文件数。如一个拥有8个实例的RAC数据库,那么每个临时文件至少要有8个临时文件。这种策略可以明显的减少文件头的锁争用。

Ø  当在RAC数据库中添加新的数据库实例时,要以向临时表空间添加临时文件的方式,来增加临时表空间的大小。

Ø  如果存在使用过多临时表空间的应用组件(如:大规模数据分析类的应用),那么为该应用创建一个新的数据库用户,并创建单独的临时表空间,同时使用应用关联技术,将该应用关联限制到一个或几个RAC节点上。这种策略可以减少由于过度的盘区缓存和清空操作带来的不良影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值