Maclean Liu(刘相兵 发表于 2012-2-1 17:03:29

关于表空间的设计

Question:

我们业务中有4张大表,存储的是卡号,帐户等关键数据,大小都在10G以上,数据量在2亿条左右,现在业务上有规定每年要定期对这几个表中的    的数据进行清理,清理的规则就是找出业务上不再使用的卡号,将其导入到另一个备份库,然后再将数据从表中删除。目前计划是每年清理2次,每次    清理的数据量大概在几十万,基于这样的业务规则,目前比较担心的是每次清理后是否需要重建表和索引,这样删除会不会产生过多的碎片。    以其中一个表为例,该表所在的表空间设计如下:    create tablespace CARD datafile 'datafilename' size 8192m autoextend on next 1m maxsize unlimited    EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO     AUTOALLOCATE  和UNIFORM 在性能上哪种比较好点     表的存储参数该如何考虑,是否需要计算单行的大小等。    对INSERT和UPDATE很频繁的表来说,设计上需要注意哪些参数。

Maclean Liu(刘相兵 发表于 2012-2-1 17:04:38

Answer:

      10g若采用Extent本地管理模式,相比早期版本中表碎片造成的影响要小得多;针对存储大表的表空间,推荐使用UNIFORM区间分配模式,统一使用区间大小1MB/2MB。在10g中使用自动段管理模式下storage参数一般无需过多考虑;针对DML操作十分频繁的表可以为其指定较高的initrans初始化事务槽参数,以防止事务槽争用引起的等待,但该参数也不宜实质过大,因为一个事务槽要在标准块(一般为8k)上占用24 bytes的空间,其默认值为1,可以考虑设置为10~20。

      在大表上定期清除数据可能造成索引上碎片过多,进而导致性能问题;我们建议在清除数据后对索引进行在线重建(rebuild online)或合并操作(coalesce);以上2种操作都不会导致表被长期锁定。10g中针对表或索引上的碎片问题也可以考虑采用shrink操作,该命令也可以在线执行,不会长期锁表。但该命令只能对建立在自动段管理模式表空间上的对象执行,要使用该命令首先需要在表上启用ROW MOVEMENT,如:
                   ALTER TABLE TABNAME ENABLE ROW MOVEMENT;
                   ALTER TABLE TABNAME SHRINK SPACE;
                   ALTER INDEX INDNAME SHRINK SPACE;

  对INSERT和UPDATE很频繁的表,如果初始insert某些字段的值较短或为null,而且以后要update这些字段的值为较长值,那么在设计时最好考虑pctfree参数,通过测试取得较佳的pctfree,避免迁移行。

kobe24shou 发表于 2015-7-20 10:56:01

怎么没有考虑分区表,对以后数据的迁移也是大大的好啊
页: [1]
查看完整版本: 关于表空间的设计