数据块的空间参数

最近正好有朋友问起了块空间参数对性能的影响,简单写了几句,记录一下。 db_block_size是数据块的大小,也是数据库I/O的最小大小,对数据访问时的I/O性能影响大,而且创建好数据库后就不能修改了,所以最好在创建数据库之前确定 好,通常建议尽量使用较大的块,另外,块的大小也跟经常执行的并发事务数有关,过大的块也可能出现热点块竞争。对数据块的考虑通常从下面这几个方面考虑: 1、对查询来说数据块要足够大以减少I/O 2、对查询来说尽可能在块中放入更多的数据以减少I/O 3、对查询来说尽可能数据在最少的块中得到(减少行链、行迁移) 4、对DML操作来说应该减少并发事务带来的块头竞争这几点分别对应着块大小的初始化参数和数据块上设置的空间参数,块的空间参数主要有四个:INITRANS,MAXTRANS,PCTFREE,PCTUSED,下面列出了这四个空间 参数的含义以及对性能的影响: initrans是块头的初始事务槽数,每一个访问块的事务都必须首先获得数据块头的一个事务槽,所以如果块中数据的并发事务多,那么就需要准备更多的事务槽。如 果初始事务槽太小,那么在需要的时候就会动态扩展,动态扩展会导致事务槽等待分配,降低DML的速度;但是如果事务槽太大,没有那么多的并发事务,那么会浪 费块的空间,使块中的可用空间降低,块中容纳的行数减少,那么在查询数据时需要访问更多的块,增加了I/O,也会降低性能。所以设置的initrans应该能够满足 正常业务的需求,也就是与并发事务相关。 maxtrans是在事务槽不够的情况下,最大可以扩展的事务槽数。如果不够大,无法扩展,需要事务槽的事务则等待。 pctfree决定了为update保留的空间百分比,如果太小会产生大量的行迁移,造成单行的访问不得不读取多个块,做无谓的I/O;如果太大会造成空间浪费,一个块只 能容纳少量的数据,就需要更多的块存放数据,全表扫描和索引访问将需要扫描更多的数据块。 pctused决定了数据块合适回到可用状态。可用的块就是可以执行插入的块,不可用状态的块则只能执行删除和修改,所有处于可用状态的块被放 在freelist中,freelist是存放在段头的一个数据结构。pctused不能和pctfree离得太近,如果两个标记太紧的话,也就意味和pctused设置太大,例 如pctfree=20,pctused=75,两个只相差5%,这时候如果在块中发生大量的数据删除和插入时,数据块的状态可能会发生非常频繁的更改,而块状态被纪录 在freelist中,块被频繁的从freelist中插入和删除,会造成freelist的争用。当然,如果pctused设置太小,会使块长时间处于不可用状态,也就意味着这个块的 空闲空间无法使用,造成空间浪费,I/O的增多。所以这些空间参数的设置对数据块的访问性能有很大的关系,必须仔细设置这些参数。顺便说一句,如果段所在的表空间已经是ASSM(自动段空间管理)表空间了, 那么PCTFREE和PCTUSED这两个参数将不再被使用,块状态由数据库自动进行管理。[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20034375/viewspace-1004830/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20034375/viewspace-1004830/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值