理解local management tablespace的uniform和autoallocate的分配方式
来源:互联网 发布:java启动参数配置 编码 编辑:程序博客网 时间:2024/05/16 01:19
本文内容主要参考: 老盖的《循序渐进 Oracle数据库管理,优化与备份恢复》
以及博文 http://jolly10.itpub.net/post/7268/472662
1. 本地管理表空间的区大小分配方式
表空间的管理方式主要有:本地管理和数据字典管理。本地管理采用在位图记录区的分配情况,而数据字典管理的方式采用字典表记录区的分配情况,本地管理方式从10g开始渐渐被淘汰。区作为基本分配单位分配给段时,其大小也有区别的。
create tablespace lmt_bmb datafile 'lmt_bmb' size 100M autoextend off logging permanent extent management local uniform size 1M --uniform方式,区大小固定为1M blocksize 8k segment space management manual --段管理方式确认后,将无法修改,之能重建 flashback on; create tablespace lmt_bmb_auto datafile 'lmt_bmb_auto.dbf' size 100M autoextend off logging permanent extent management local autoallocate --autoallocate方式,区大小又系统自动分配 blocksize 8k segment space management manual flashback on;uniform方式按统一的区大小分配给段,而autoallocate方式会逐渐调整分配给段的大小。通过以下语句可以查询表空间的情况:
SQL> select tablespace_name, extent_management, allocation_type 2 from dba_tablespaces;TABLESPACE_NAME EXTENT_MANAGEMENT ALLOCATION_TYPE------------------------------ ----------------- ---------------SYSTEM LOCAL SYSTEMSYSAUX LOCAL SYSTEMUNDOTBS1 LOCAL SYSTEMTEMP LOCAL UNIFORMUSERS LOCAL SYSTEMADDDATA01 LOCAL SYSTEMADDDATA02 LOCAL SYSTEMADDINDX01 LOCAL SYSTEMADDINDX02 LOCAL SYSTEMADDTEMP01 LOCAL UNIFORMUNDOTBS001 LOCAL SYSTEMLMTS LOCAL SYSTEMLMT_BMB LOCAL UNIFORMLMT_BMB_AUTO LOCAL SYSTEM
system表示autoallocate方式,后续通过dump数据文件头来了解区的位图信息,以及区分配方式。
2. Uniform方式以及数据文件头的位图信息
SQL> create table test tablespace lmt_bmb as select * from dba_users where 1=0;Table createdSQL> select tablespace_name, extent_id, block_id, blocks from dba_extents where tablespace_name = 'LMT_BMB';TABLESPACE_NAME EXTENT_ID BLOCK_ID BLOCKS------------------------------ ---------- ---------- ----------LMT_BMB 0 9 128Test表创建时是从block_id为9的开始的,前8个block都被系统保留了.其中数据块1和2用于记录数据文件头的信息,
数据块3~8用于记录区间的位图信息. 通过dump前3个块查看区分配的问题信息.
SQL> select file_name, file_id, bytes/1024/1024 from dba_data_files where tablespace_name = 'LMT_BMB'; FILE_NAME FILE_ID BYTES/1024/1024-------------------------------------------------------------------------------- ---------- ---------------F:\PROGRAM_FILES\ORACLE\ADMINISTRATOR\PRODUCT\11.1.0\DB_1\DATABASE\LMT_BMB.DBF 40 100 SQL> alter system dump datafile 40 block min 1 block max 3;System alteredSQL> select 2 d.value || '/' || lower (rtrim (i.instance, chr (0))) || '_ora_' || p.spid || '.trc' trace_file_name 3 from ( 4 select p.spid 5 from v$mystat m, v$session s, v$process p 6 where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr 7 ) p , 8 ( 9 select t.instance 10 from v$thread t, v$parameter v 11 where v.name = 'thread' 12 and (v.value = 0 or t.thread# = to_number (v.value)) 13 ) i, 14 ( 15 select value 16 from v$parameter 17 where name = 'user_dump_dest') d; TRACE_FILE_NAME--------------------------------------------------------------------------------f:\program_files\oracle\administrator\diag\rdbms\ucs\ucs\trace/ucs_ora_7052.trc######### 分析trc文件File Space Bitmap Block:BitMap Control: RelFno: 40, BeginBlock: 9, Flag: 0, First: 1, Free: 63487 0100000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000从第3个块开始,记录了位图的信息.
01是16进制转换为二进制就是0000 0001,经过高位低位的字节交换得出的结果是1000 0000表示分配了一个区间。
SQL> alter table test allocate extent;Table alteredSQL> alter system dump datafile 40 block min 1 block max 3;System alteredSQL>分析trc信息如下:
BitMap Control: RelFno: 40, BeginBlock: 9, Flag: 0, First: 2, Free: 63486 0300000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000对第一个03转换后就是0000 0011, 进行高地位反转1100 0000,表示分配了2个区间.通过查询也可以看出这种情况:
SQL> select segment_name, tablespace_name, extent_id, block_id, blocks 1 from dba_extents 2 where tablespace_name = 'LMT_BMB'; SEGMENT_NAME TABLESPACE_NAME EXTENT_ID BLOCK_ID BLOCKS------------------------- ------------------------------ ---------- ---------- ----------TEST LMT_BMB 0 9 128TEST LMT_BMB 1 137 128
注意这里分配的2个区都是128 * 8K = 1M。
SQL> create table test2 tablespace lmt_bmb as select * from dba_users where 1=0;Table created SQL> select segment_name, tablespace_name, extent_id, block_id, blocks 1 from dba_extents 2 where tablespace_name = 'LMT_BMB'; SEGMENT_NAME TABLESPACE_NAME EXTENT_ID BLOCK_ID BLOCKS----------------- ------------------------------ ---------- ---------- ----------TEST LMT_BMB 0 9 128TEST LMT_BMB 1 137 128TEST2 LMT_BMB 0 265 128 SQL> alter table test2 allocate extent;Table altered SQL> alter table test2 allocate extent;Table alteredSQL> alter table test2 allocate extent;Table altered SQL> select segment_name, tablespace_name, extent_id, block_id, blocks 1 from dba_extents 2 where tablespace_name = 'LMT_BMB'; SEGMENT_NAME TABLESPACE_NAME EXTENT_ID BLOCK_ID BLOCKS----------------- ------------------------------ ---------- ---------- ----------TEST LMT_BMB 0 9 128TEST LMT_BMB 1 137 128TEST2 LMT_BMB 0 265 128TEST2 LMT_BMB 1 393 128TEST2 LMT_BMB 2 521 128TEST2 LMT_BMB 3 649 1286 rows selected SQL> alter system dump datafile 40 block min 1 block max 3;System altered######### 分析traceBitMap Control: RelFno: 40, BeginBlock: 9, Flag: 0, First: 6, Free: 63482 3F00000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 00000000000000003F转化之后为0011 1111 反转之后1111 0011, 所以是6个区.
drop掉test,观察分区和位图信息
SQL> drop table test purge;Table dropped SQL> select segment_name, tablespace_name, extent_id, block_id, blocks 1 from dba_extents where tablespace_name = 'LMT_BMB'; SEGMENT_NAME TABLESPACE_NAME EXTENT_ID BLOCK_ID BLOCKS--------------- ----------------- ---------- ---------- ----------TEST2 LMT_BMB 0 265 128TEST2 LMT_BMB 1 393 128TEST2 LMT_BMB 2 521 128TEST2 LMT_BMB 3 649 128 SQL> alter system dump datafile 40 block min 1 block max 3;System alteredSQL> ################ 分析dump文件信息BitMap Control: RelFno: 40, BeginBlock: 9, Flag: 0, First: 0, Free: 63484 3C00000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
对3C进行分析,得出0011 1100, 高地位为1100 0011, 也就是有4个区被分配,是一致的.
对于10g开始的回收站情况,可以通过以下sql语句进行查询和清理.
1)清除的方法如下: 1、purge table origenal_tableName; purge index origenal_indexName; 2、purge recyclebin;2)查询垃圾信息,可以用如下SQL语句: select t.object_name,t.type ,t.original_name from user_recyclebin t;3)删除Table不进入Recycle的方法: drop table tableName purge;
Autoallocate的区大小管理方式的位图信息和uniform的有稍微区别,uniform的位图表示分配了多少个区,而autoallocate方式则表示大小情况,每个表示64KB。
3.Autoallocate方式以及对应位图信息
先创建表,查看分区情况,dump文件头的3个块。
SQL> select tablespace_name, extent_management, allocation_type 2 from dba_tablespaces 3 where tablespace_name = 'LMT_BMB_AUTO'; TABLESPACE_NAME EXTENT_MANAGEMENT ALLOCATION_TYPE------------------------------ ----------------- ---------------LMT_BMB_AUTO LOCAL SYSTEM SQL>--allocate_type = system 表示是系统自动分配extent的大小SQL> select file_name, file_id, bytes/1024/1024 from dba_data_files 1 where tablespace_name = 'LMT_BMB_AUTO'; FILE_NAME FILE_ID BYTES/1024/1024-------------------------------------------------------------------------------- ---------- ---------------F:\PROGRAM_FILES\ORACLE\ADMINISTRATOR\PRODUCT\11.1.0\DB_1\DATABASE\LMT_BMB_AUTO.dbf 41 100SQL> create table test4 tablespace lmt_bmb_auto 2 as select * from all_objects where 1=0; Table createdSQL> select tablespace_name, segment_name, file_id, extent_id, block_id, blocks 2 from dba_extents 3 where tablespace_name='LMT_BMB_AUTO'; TABLESPACE_NAME SEGMENT_NAME FILE_ID EXTENT_ID BLOCK_ID BLOCKS------------------------------ ------------- ---------- ---------- ---------- ----------LMT_BMB_AUTO TEST4 41 0 9 8 SQL>
可以看出这个区大小为64KB,来看具体的位图信息
SQL> alter system dump datafile 41 block min 1 block max 3;System alteredSQL>############################# trc的位图信息File Space Bitmap Block: BitMap Control: RelFno: 41, BeginBlock: 9, Flag: 0, First: 1, Free: 63487 0100000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 000000000000000001转换成二进制是0000 0001,高低位转换后为1000 0000。由于是自动大小分配管理的区间,这里的1并不能代表分配了一个区间,只说代表分配了64K大小,因为区间尺寸可能是64K,1MB,8MB,64M或更大,不过都有一个通用尺寸64KB,所以64KB就是该表空间的一个位标记大小。通过向表中插入数据,可以查看出来。
SQL> insert into test4 select * from all_objects;68385 rows inserted SQL> select segment_name, blocks * 8 extent_size_KB, sum(blocks) * 8 total_KB, count(1) total_extents 2 from dba_extents 3 where segment_name = 'TEST4' and tablespace_name='LMT_BMB_AUTO' 4 group by segment_name, blocks; SEGMENT_NAME EXTENT_SIZE_KB TOTAL_KB TOTAL_EXTENTS--------------- -------------- ---------- -------------TEST4 1024 7168 7TEST4 64 1024 16 SQL> ############## trc 位图信息File Space Bitmap Block: BitMap Control: RelFno: 41, BeginBlock: 9, Flag: 0, First: 128, Free: 63360 FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000一共23个区,总大小7个1M的区,16个64K的区, 总大小7168 + 1024 = 8192KB.
可以看出exent的大小从64K变为了1M。
看看位图信息. 也就是 1111 1111 一共16组,每位代表64K,总大小: 16 * 8 * 64KB = 8192KB 跟统计的一样.
- 理解local management tablespace的uniform和autoallocate的分配方式
- 表空间uniform size和 autoallocate的区别
- 创建一个本地管理的表空间之AUTOALLOCATE和UNIFORM
- DB2 tablespace 和 bufferpool的理解
- TableSpace Manage 的 理解
- 表空间的本地管理(Local Management Tablespace)与字典管理(Dictionary Management TableSapce)的转化与常见错误
- C++ 堆和栈的区别 内存分配方式理解
- offline tablespace 的几种方式
- EJB的Remote访问方式和Local访问方式
- Maven的dependency management理解
- extents分配策略及AUTOALLOCATE碎片问题
- Maven-关于compile/install和local repository的理解
- 内存的分配方式
- 内存的分配方式
- 内存分配的方式
- 内存的分配方式
- 内存的分配方式
- 内存的分配方式
- 操纵文件类
- typedef用法总结
- Boatloader简介
- 13.1 异步工作流
- 圆的希望
- 理解local management tablespace的uniform和autoallocate的分配方式
- navicate how to create a stored procedure
- Windows 7上安装及卸载Oracle 10g(经验证可行)
- php 获取当前时间
- php_curl.dll找不出的问题解决
- SQL子查询简单分类
- CPU亲和力--affinity
- ubuntu minicom配置与使用
- 努力做一个内心强大的人