Oracle 参数之deferred_segment_creation的测试

 deferred_segment_creation参数的主要作用是控制分区表中段的创建,例如很多情况下我们会预先创建未来一段时间某个表的分区表,但是我们还不想让这些预先创建的分区表占用过多的空间,在这种情况下我们设置deferred_segment_creation为false,那么在dba_objects中会有相关分区表的记录,但是dba_segements中不会有相关预先创建的分区表的记录,也就是预先创建的分区表实际不会占用存储空间。

 

***************************************
当参数deferred_segment_creation为true时
***************************************

SQL> show parameter segment

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation         boolean     TRUE
rollback_segments             string
transactions_per_rollback_segment    integer     5




1.创建range分区表

CREATE TABLE tab_seg (ID number(20),datetime date) PARTITION BY RANGE (datetime) 
(PARTITION P1 VALUES LESS THAN (TO_DATE('2018-11-1', 'YYYY-MM-DD')), 
PARTITION P2 VALUES LESS THAN (TO_DATE('2018-12-1', 'YYYY-MM-DD')), 
PARTITION P3 VALUES LESS THAN (TO_DATE('2019-1-1', 'YYYY-MM-DD')), 
PARTITION P4 VALUES LESS THAN (TO_DATE('2019-2-1', 'YYYY-MM-DD')), 
PARTITION P5 VALUES LESS THAN (TO_DATE('2019-3-1', 'YYYY-MM-DD')), 
PARTITION P6 VALUES LESS THAN (TO_DATE('2019-4-1', 'YYYY-MM-DD')), 
PARTITION P7 VALUES LESS THAN (TO_DATE('2019-5-1', 'YYYY-MM-DD')), 
PARTITION P8 VALUES LESS THAN (TO_DATE('2019-6-1', 'YYYY-MM-DD')), 
PARTITION P9 VALUES LESS THAN (TO_DATE('2019-7-1', 'YYYY-MM-DD')), 
PARTITION P10 VALUES LESS THAN (TO_DATE('2019-8-1', 'YYYY-MM-DD')), 
PARTITION P11 VALUES LESS THAN (TO_DATE('2019-9-1', 'YYYY-MM-DD')), 
PARTITION P12 VALUES LESS THAN (TO_DATE('2019-10-1', 'YYYY-MM-DD')), 
PARTITION P13 VALUES LESS THAN (TO_DATE('2019-11-1', 'YYYY-MM-DD')), 
PARTITION P14 VALUES LESS THAN (TO_DATE('2019-12-1', 'YYYY-MM-DD')), 
PARTITION P15 VALUES LESS THAN (TO_DATE('2020-1-1', 'YYYY-MM-DD')), 
PARTITION P16 VALUES LESS THAN (TO_DATE('2020-2-1', 'YYYY-MM-DD')), 
PARTITION P17 VALUES LESS THAN (MAXVALUE));





2.插入数据

declare
i number;
dd date;
BEGIN
dd := sysdate;
i:= 0;
for x in 1..5000 loop 
--if mod(i,100)=0 then
insert into tab_seg(id,datetime) values(i,dd);
dd := dd+1/12; 
i := i+1;
end loop;
END;
/








3.查询有数据插入的P15分区


SQL> select * from dba_objects where SUBOBJECT_NAME='P15'

OWNER                   OBJECT_NAME        SUBOBJECT_NAME            OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE     CREATED        LAST_DDL_TIME      TIMESTAMP       STATUS  T G S  NAMESPACE EDITION_NAME
------------------------------ -------------------- ------------------------------ ---------- -------------- ------------------- ------------------ ------------------ ------------------- ------- - - - ---------- ------------------------------
DAYU                   TAB_SEG            P15                 87258           87258 TABLE PARTITION     22-OCT-18        22-OCT-18           2018-10-22:18:52:37 VALID   N N N      1



SQL> select bytes from dba_segments where PARTITION_NAME='P15';

     BYTES
----------
   8388608



      


4.查询没有数据插入的P16分区
  

SQL> select * from dba_objects where SUBOBJECT_NAME='P16';

OWNER                   OBJECT_NAME        SUBOBJECT_NAME            OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE     CREATED        LAST_DDL_TIME      TIMESTAMP       STATUS  T G S  NAMESPACE EDITION_NAME
------------------------------ -------------------- ------------------------------ ---------- -------------- ------------------- ------------------ ------------------ ------------------- ------- - - - ---------- ------------------------------
DAYU                   TAB_SEG            P16                 87259           87259 TABLE PARTITION     22-OCT-18        22-OCT-18           2018-10-22:18:52:37 VALID   N N N      1





 SQL> select BYTES from dba_segments where PARTITION_NAME='P16'; 

no rows selected



5.结论:当deferred_segment_creation为true时,未插入数据的分区在dba_objects会有有相应的记录,但是在dba_segments中没有相应的记录。


***************************************
当参数deferred_segment_creation为false时
***************************************
 
SQL> show parameter segment

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation         boolean     FALSE
rollback_segments             string
transactions_per_rollback_segment    integer     5
SQL> 


1.创建range分区表

CREATE TABLE tab_seg (ID number(20),datetime date) PARTITION BY RANGE (datetime) 
(PARTITION P1 VALUES LESS THAN (TO_DATE('2018-11-1', 'YYYY-MM-DD')), 
PARTITION P2 VALUES LESS THAN (TO_DATE('2018-12-1', 'YYYY-MM-DD')), 
PARTITION P3 VALUES LESS THAN (TO_DATE('2019-1-1', 'YYYY-MM-DD')), 
PARTITION P4 VALUES LESS THAN (TO_DATE('2019-2-1', 'YYYY-MM-DD')), 
PARTITION P5 VALUES LESS THAN (TO_DATE('2019-3-1', 'YYYY-MM-DD')), 
PARTITION P6 VALUES LESS THAN (TO_DATE('2019-4-1', 'YYYY-MM-DD')), 
PARTITION P7 VALUES LESS THAN (TO_DATE('2019-5-1', 'YYYY-MM-DD')), 
PARTITION P8 VALUES LESS THAN (TO_DATE('2019-6-1', 'YYYY-MM-DD')), 
PARTITION P9 VALUES LESS THAN (TO_DATE('2019-7-1', 'YYYY-MM-DD')), 
PARTITION P10 VALUES LESS THAN (TO_DATE('2019-8-1', 'YYYY-MM-DD')), 
PARTITION P11 VALUES LESS THAN (TO_DATE('2019-9-1', 'YYYY-MM-DD')), 
PARTITION P12 VALUES LESS THAN (TO_DATE('2019-10-1', 'YYYY-MM-DD')), 
PARTITION P13 VALUES LESS THAN (TO_DATE('2019-11-1', 'YYYY-MM-DD')), 
PARTITION P14 VALUES LESS THAN (TO_DATE('2019-12-1', 'YYYY-MM-DD')), 
PARTITION P15 VALUES LESS THAN (TO_DATE('2020-1-1', 'YYYY-MM-DD')), 
PARTITION P16 VALUES LESS THAN (TO_DATE('2020-2-1', 'YYYY-MM-DD')), 
PARTITION P17 VALUES LESS THAN (MAXVALUE));





2.插入数据

declare
i number;
dd date;
BEGIN
dd := sysdate;
i:= 0;
for x in 1..5000 loop 
--if mod(i,100)=0 then
insert into tab_seg(id,datetime) values(i,dd);
dd := dd+1/12; 
i := i+1;
end loop;
END;
/






3.查询有数据插入的P15分区
SQL>select * from dba_objects where SUBOBJECT_NAME='P15'

OWNER                   OBJECT_NAME        SUBOBJECT_NAME            OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE     CREATED        LAST_DDL_TIME      TIMESTAMP       STATUS  T G S  NAMESPACE EDITION_NAME
------------------------------ -------------------- ------------------------------ ---------- -------------- ------------------- ------------------ ------------------ ------------------- ------- - - - ---------- ------------------------------
DAYU                   TAB_SEG            P15                 87280           87280 TABLE PARTITION     22-OCT-18        22-OCT-18           2018-10-22:19:03:02 VALID   N N N      1




SQL> select bytes from dba_segments where PARTITION_NAME='P15';

     BYTES
----------
   8388608


   

4.查询没有数据插入的P16分区
   
SQL> select * from dba_objects where SUBOBJECT_NAME='P16';

OWNER                   OBJECT_NAME        SUBOBJECT_NAME            OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE     CREATED        LAST_DDL_TIME      TIMESTAMP       STATUS  T G S  NAMESPACE EDITION_NAME
------------------------------ -------------------- ------------------------------ ---------- -------------- ------------------- ------------------ ------------------ ------------------- ------- - - - ---------- ------------------------------
DAYU                   TAB_SEG            P16                 87281           87281 TABLE PARTITION     22-OCT-18        22-OCT-18           2018-10-22:19:03:02 VALID   N N N      1


SQL> select bytes from dba_segments where PARTITION_NAME='P16';

     BYTES
----------
   8388608

5.结论:当deferred_segment_creation为false时,未插入数据的分区在dba_objects会有有相应的记录,在dba_segments也会预先分配空间,有相应的记录。

 

posted @ 2018-10-23 09:16  dayu.liu  阅读(2608)  评论(0编辑  收藏  举报