用Delete与Truncate清除表数据对高水位的影响(3)

       256         16    1048576        128    --从256块起,开始分配1M的空间作为1个extent

       384         17    1048576        128

       512         18    1048576        128

       640         19    1048576        128

       768         20    1048576        128

       896         21    1048576        128

      1024         22    1048576        128

      1152         23    1048576        128

 

从block_id字段的值可以发现,当在表中插入数据后,分配给表的block从128开始一直到1152,并且,开始的1-16个extent会以8个块(8*8=64K)为分配单位,而到了第17个extent之后,则以128个块(8*128=1M)为分配单位,目前ZLM1表共分配了24个extent

 

--查看测试表ZLM1的block分配情况

SQL> col segment_name for a10

SQL> select segment_name,header_file,header_block,blocks,bytes,extents,min_extents,max_extents,segment_type from dba_segments where segment_name like 'ZLM%';

 

SEGMENT_NA HEADER_FILE HEADER_BLOCK     BLOCKS      BYTES    EXTENTS MIN_EXTENTS MAX_EXTENTS SEGMENT_TYPE

---------- ----------- ------------ ---------- ---------- ---------- ----------- ----------- ------------------

ZLM1                 6          130       1152    9437184         24          1  2147483645 TABLE

 

这里可以发现一个规律,dba_segments中的header_block的值总是要比dba_extents查出来值的多2个块

 

--创建测试表ZLM2并查看block分配情况

SQL> create table zlm.zlm2 as select * from zlm.zlm1;

 

Table created.

 

SQL> select segment_name,header_file,header_block,blocks,bytes,extents,min_extents,max_extents,segment_type from dba_segments where segment_name like 'ZLM%';

 

SEGMENT_NA HEADER_FILE HEADER_BLOCK     BLOCKS      BYTES    EXTENTS MIN_EXTENTS MAX_EXTENTS SEGMENT_TYPE

---------- ----------- ------------ ---------- ---------- ---------- ----------- ----------- ------------------

ZLM2                 6         1282      1152    9437184         24           1  2147483645 TABLE

ZLM1                 6          130       1152    9437184         24           1  2147483645 TABLE

 

第2个表从1282个块开始分配,为什么是1282呢?1282=130+1152,也就是从测试表ZLM1之后的block开始分配

 

--delete测试表ZLM1中的数据

SQL> delete from zlm.zlm1;

 

75541 rows deleted.

 

SQL> commit;

 

Commit complete.

 

SQL> select table_name,num_rows,blocks,empty_blocks,avg_row_len,last_analyzed from dba_tables where table_name like 'ZLM%';

 

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN LAST_ANALYZED

------------------------------ ---------- ---------- ------------ ----------- ------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d821293225f705b2026f079d8982097a.html