设为首页收藏本站

Botang唐波's Oracle Station

查看: 253|回复: 0

表空间管理

[复制链接]

745

主题

1118

帖子

8120

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8120
发表于 2018-7-14 17:00:24 | 显示全部楼层 |阅读模式
Screenshot.png


表空间管理主要就是回答两个问题:
1. 区怎么分配
2. 段内部哪些块算空块

Oracle 8以前:
问题1通过freelist来实现,数据文件头上放置第一个freelist指针,指向下一个未分配的区,该区头有第二个指针指向再下一个未分配的区。形成的整个链表反映成dba_extents和dba_free_space视图。
问题2也通过freelist来实现,段头块(一般是该段的第3个块)放置第一个freelist指针,指向下一个“空块”(靠pct_used来判断,低于pct_used标准的块算空块),该“空块”头有第二个指针指向再下一个“空块”。在堆表插入过程中,只有“空块”能被插入。

Oracle 8i到Oracle 9.2.03:
问题1通过bitmap来实现,数据文件头上放置一个bitmap,每一个bit代表一个未分配的区,整个bitmap表反映成dba_extents和dba_free_space视图,可以实现该数据文件上的区分配“自治”,叫做本地管理的表空间。
问题2默认仍旧通过freelist来实现,段头块(一般是该段的第3个块)放置第一个freelist指针,指向下一个“空块”(靠pct_used来判断,低于pct_used标准的块算空块),该“空块”头有第二个指针指向再下一个“空块”。在堆表插入过程中,只有“空块”能被插入。

Oracle 9.2.0.3以后:
问题1通过bitmap来实现,数据文件头上放置一个bitmap,每一个bit代表一个未分配的区,整个bitmap表反映成dba_extents和dba_free_space视图,可以实现该数据文件上的区分配“自治”,叫做本地管理的表空间。
问题2默认通过bitmap来实现,段头块(一般是该段的第3个块)放置一个bitmap,每4个bit代表一个块的空满状态(不靠pct_used来判断,0000/0001/00010/0011这类的会算空块)。在堆表插入过程中,只有“空块”能被插入。这种方法被称为segment space management auto(区别于之前的segment space management manual),解决了批量操作的buffer_busy_wait。

a.png

--------------------------------------------------------举例说明:
1. 故意创建一个Oracle 8i到Oracle 9.2.03的表空间:
b.png

   TABLESPACE_NAMEEXTENT_MANAGEMENTSEGMENT_SPACE_MANAGEMENT
1SYSTEMLOCALMANUAL
2SYSAUXLOCALAUTO
3UNDOTBS1LOCALMANUAL
4TEMPLOCALMANUAL
5USERSLOCALAUTO
6EXAMPLELOCALAUTO
7SSMMLOCALMANUAL

  1. create table hr.ssmm ( a number )
  2. tablespace ssmm;

  3. create table hr.ssma ( a number )
  4. tablespace users;

  5. select  t.table_name,t.pct_free,t.pct_used,t.pct_increase
  6.   from dba_tables t
  7.   where t.owner='HR' and t.table_name  in ('SSMM','SSMA');
复制代码

   TABLE_NAMEPCT_FREEPCT_USEDPCT_INCREASE
1SSMM1040
2SSMA10

对照观察一下dba_indexes:
  1. [oracle@station90 ~]$ sqlplus /nolog

  2. SQL*Plus: Release 12.1.0.2.0 Production on Sat Jul 14 17:17:02 2018

  3. Copyright (c) 1982, 2014, Oracle.  All rights reserved.

  4. SQL> conn / as sysdba
  5. Connected.
  6. SQL> desc dba_indexes
  7. Name                                           Null?    Type
  8. ----------------------------------------- -------- ----------------------------
  9. OWNER                                           NOT NULL VARCHAR2(128)
  10. INDEX_NAME                                   NOT NULL VARCHAR2(128)
  11. INDEX_TYPE                                            VARCHAR2(27)
  12. TABLE_OWNER                                   NOT NULL VARCHAR2(128)
  13. TABLE_NAME                                   NOT NULL VARCHAR2(128)
  14. TABLE_TYPE                                            VARCHAR2(11)
  15. UNIQUENESS                                            VARCHAR2(9)
  16. COMPRESSION                                            VARCHAR2(13)
  17. PREFIX_LENGTH                                            NUMBER
  18. TABLESPACE_NAME                                    VARCHAR2(30)
  19. INI_TRANS                                            NUMBER
  20. MAX_TRANS                                            NUMBER
  21. INITIAL_EXTENT                                     NUMBER
  22. NEXT_EXTENT                                            NUMBER
  23. MIN_EXTENTS                                            NUMBER
  24. MAX_EXTENTS                                            NUMBER
  25. PCT_INCREASE                                            NUMBER
  26. PCT_THRESHOLD                                            NUMBER
  27. INCLUDE_COLUMN                                     NUMBER
  28. FREELISTS                                            NUMBER
  29. FREELIST_GROUPS                                    NUMBER
  30. PCT_FREE                                            NUMBER
  31. LOGGING                                            VARCHAR2(3)
  32. BLEVEL                                             NUMBER
  33. LEAF_BLOCKS                                            NUMBER
  34. DISTINCT_KEYS                                            NUMBER
  35. AVG_LEAF_BLOCKS_PER_KEY                            NUMBER
  36. AVG_DATA_BLOCKS_PER_KEY                            NUMBER
  37. CLUSTERING_FACTOR                                    NUMBER
  38. STATUS                                             VARCHAR2(8)
  39. NUM_ROWS                                            NUMBER
  40. SAMPLE_SIZE                                            NUMBER
  41. LAST_ANALYZED                                            DATE
  42. DEGREE                                             VARCHAR2(40)
  43. INSTANCES                                            VARCHAR2(40)
  44. PARTITIONED                                            VARCHAR2(3)
  45. TEMPORARY                                            VARCHAR2(1)
  46. GENERATED                                            VARCHAR2(1)
  47. SECONDARY                                            VARCHAR2(1)
  48. BUFFER_POOL                                            VARCHAR2(7)
  49. FLASH_CACHE                                            VARCHAR2(7)
  50. CELL_FLASH_CACHE                                    VARCHAR2(7)
  51. USER_STATS                                            VARCHAR2(3)
  52. DURATION                                            VARCHAR2(15)
  53. PCT_DIRECT_ACCESS                                    NUMBER
  54. ITYP_OWNER                                            VARCHAR2(128)
  55. ITYP_NAME                                            VARCHAR2(128)
  56. PARAMETERS                                            VARCHAR2(1000)
  57. GLOBAL_STATS                                            VARCHAR2(3)
  58. DOMIDX_STATUS                                            VARCHAR2(12)
  59. DOMIDX_OPSTATUS                                    VARCHAR2(6)
  60. FUNCIDX_STATUS                                     VARCHAR2(8)
  61. JOIN_INDEX                                            VARCHAR2(3)
  62. IOT_REDUNDANT_PKEY_ELIM                            VARCHAR2(3)
  63. DROPPED                                            VARCHAR2(3)
  64. VISIBILITY                                            VARCHAR2(9)
  65. DOMIDX_MANAGEMENT                                    VARCHAR2(14)
  66. SEGMENT_CREATED                                    VARCHAR2(3)
  67. ORPHANED_ENTRIES                                    VARCHAR2(3)
  68. INDEXING                                            VARCHAR2(7)

  69. SQL>
复制代码
会发现dba_indexes里头,怎么没有pct_used,却有pct_free,这是因为对索引而言,值一定要按照顺序插入,不存在不让插入的问题,所以索引是不可能有pct_used。

  1.   create index hr.i_ssmm on hr.ssmm(a)  
  2.   tablespace ssmm;
  3.   
  4.   create index hr.i_ssma on hr.ssma(a)
  5.   tablespace users;
  6.   
  7.   select  i.index_name,i.pct_free,i.freelists,i.tablespace_name
  8.    from dba_indexes i
  9.    where i.owner='HR' and i.table_name  in ('SSMM','SSMA');
复制代码
   INDEX_NAMEPCT_FREEFREELISTSTABLESPACE_NAME
1I_SSMA10 USERS
2I_SSMM10 SSMM

还有因为索引块的行密度更大,所以遇到事务的几率就大,进而要准备更多的事务槽:
  1. select  t.table_name,t.ini_trans
  2.   from dba_tables t
  3.   where t.owner='HR' and t.table_name  in ('SSMM','SSMA');
复制代码
   TABLE_NAMEINI_TRANS
1SSMM1
2SSMA1

  1.    select  i.index_name,i.ini_trans
  2.    from dba_indexes i
  3.    where i.owner='HR' and i.table_name  in ('SSMM','SSMA');
复制代码
   INDEX_NAMEINI_TRANS
1I_SSMA2
2I_SSMM2

可以自由定义:
  1. create table hr.t05207_a ( a number )
  2. pctfree 80 pctused 20 initrans 5 tablespace ssmm;

  3. select t.table_name, t.pct_free, t.pct_used ,t.ini_trans
  4.   from dba_tables t
  5.   where t.owner='HR' and t.table_name='T05207_A';
复制代码
   TABLE_NAMEPCT_FREEPCT_USEDINI_TRANS
1T05207_A80205

其他的内容:
  1. select t.tablespace_name,t.allocation_type
  2. from dba_tablespaces t;

  3. select  * from dba_extents e
  4.   where e.owner='HR' and e.segment_name='T04209_UNAME';
  5.   
  6.   drop table hr.t04209_uname purge;
  7.   
  8.   create tablespace tbsuniform  datafile '/u01/app/oracle/oradata/orcl/tbsuniform01.dbf'
  9.   size 10M autoextend on     uniform size 512K;
  10.   
  11.   
  12.   create table hr.t05207_b ( a  number )  storage ( initial 10M );
  13.   
  14.    select  * from dba_extents e
  15.   where e.owner='HR' and e.segment_name='T05207_B';
  16.   
  17.   insert into  hr.t05207_b values ( 1 ) ;
  18.   
  19.   rollback;
  20.   
  21.     select  * from dba_extents e
  22.   where e.owner='HR' and e.segment_name='T05207_B';
复制代码
   OWNERSEGMENT_NAMEPARTITION_NAMESEGMENT_TYPETABLESPACE_NAMEEXTENT_IDFILE_IDBLOCK_IDBYTESBLOCKSRELATIVE_FNO
1HRT05207_B TABLEUSERS06256838860810246
2HRT05207_B TABLEUSERS16128010485761286
3HRT05207_B TABLEUSERS26140810485761286

permentent表空间看用量:
  1. select  sum(bytes)/1024/1024
  2. from dba_data_files df where df.tablespace_name='SYSTEM';
  3.   
  4. select  sum(bytes)/1024/1024
  5. from dba_free_space fs where fs.tablespace_name='SYSTEM';
复制代码
undo表空间看用量:
  1. select  sum(bytes)/1024/1024
  2. from dba_data_files df where df.tablespace_name='UNDOTBS1';
  3.   
  4. select  sum(bytes)/1024/1024
  5. from dba_undo_extents  ue where ue.status<>'EXPIRED' ;
复制代码
临时表空间看用量:
  1. select sum(bytes)/1024/1024
  2. from dba_temp_files df where df.tablespace_name='TEMP';

  3. select (t.bytes_cached+t.bytes_used)/1024/1024 from V$TEMP_EXTENT_POOL t;

  4. select t.bytes_cached/1024/1024 from V$TEMP_EXTENT_POOL t;
  5. select sum(t.bytes)/1024/1024 from V$TEMP_EXTENT_MAP t;

  6. select t.bytes_used/1024/1024 from V$TEMP_EXTENT_POOL t;
复制代码
   T.BYTES_USED/1024/1024
11

e.png



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Botang唐波's Oracle Station   

GMT+8, 2018-12-19 11:57 , Processed in 0.106733 second(s), 27 queries .

快速回复 返回顶部 返回列表