ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RECORDS_PER_BLOCK的作用

RECORDS_PER_BLOCK的作用

原创 Linux操作系统 作者:netfairy 时间:2011-11-22 10:03:08 0 删除 编辑

RECORDS_PER_BLOCK参数用于设定每个BLOCK中记录数的最大值,其先找到当前表所有BLOCK中容纳的最大行数,并会把这个数字记录到数据字典,以后任何导致BLOCK行数超过这个数字的插入都会被拒绝。

测试:(环境10.2.0.1.0 - 64bi)

create table test(id number,name varchar2(100));

BEGIN

  FOR I IN 1 .. 1000 LOOP

    INSERT INTO TEST VALUES (I, 'NAME' || I);

  END LOOP;

  COMMIT;

END;

/

SELECT dbms_rowid.rowid_block_number(ROWID),COUNT(0)

FROM test

GROUP BY dbms_rowid.rowid_block_number(ROWID);

     BLOCK   COUNT(0)

                     33411    427

                     33410    439

                     33412    134

可以看到在缺省情况下,每个BLOCK可以存放430条左右的记录。

将表重建,然后插入10条记录,之后先执行:

alter table test minimize records_per_block;

然后再插入100条记录,查看BLOCK的分步情况:

BLOCK  COUNT(0)

33414   10

33411   10

(后面省略)

经过多次测试发现:执行alter table test minimize records_per_block;之后,目前BLOCK中的记录数(的最大值)会应用到以后的新增数据中,也就是,当以后再往表中INSERT数据时,每个BLOCK中可以包含的记录数将与设定records_per_block之前的最大值保持一致。

需要注意的是:

l  不能对空表设定此参数。

l  每个BLOCK中可以包含的记录数的最低下限是2。

l  不能在已经有 bitmap 的表中使用records_per_block参数,也就是说,如果要使用records_per_block参数,必须先alter table xxx minimize records_per_block,然后才能在表上建立索引。

如果字段的类型、大小、个数发生了改变,那么就会导致一个比较差的结果,这就说明了,这项功能只在于使用在静态的环境中,比如数据仓库。

主要用途:

l  通过减少同一个block中的记录数,使记录分布于更多的数据块中,可以优化等待块类型为data block的Buffer Busy Wait事件。

l  其主要用途是提高BITMAP INDEX的存储性能

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

下一篇: EMCA引发的事故
请登录后发表评论 登录
全部评论

注册时间:2011-11-17

  • 博文量
    14
  • 访问量
    65728