LMT and ASSM

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
LMT的管理方式

LMT就是指Oracle不再利用数据字典表来记录Oracle表空间里面的区的使用状况,而是在每个表空间的数据文件的头部加入了一个位图区,在其中记录每个区的使用状况。每个表文件头会有64K用于bit map。每当一个区被使用,或者被释放以供重新使用时,Oracle都会更新数据文件头部的这个记录,反映这个变化

区大小的管理
extent_management_clause(表空间级参数)
AUTOALLOCATE(默认值)
区的大小由系统来管理,如果数据块小于16K.则默认是64K,如果大于16K,则默认是1M.然后再根据表的情况分配区。大小是64K,1M,8M..
而系统表空间只能是autoallocate。
UNIFORM
规定了每个区的大小,而每个区至少包括5个数据库块大小

区属性的管理
segment_management_clause(表空间级参数)
MANUAL
用free lists来管理段空间
AUTO
这种段的管理方式也称为automatic segment-space management.它是用位图来管理段空间,
会忽略对像的PCTUSED, FREELIST和FREELIST GROUPS参数。oracle会自动管理表和索引的FREELISTS。对于ASSM而言,INITIAL最小的值是三个块。

下面就详细的说说ASSM
传统的管理方式中。PCTUSED的设置影响着freelist的联接。如果我们想充分的利用disk。就会设一个大大高于avg_row_len的value.相反,如果我们想提高insert的性能,我们就要设一个低的PCTUSED,确保所有的block有足够的空间来实现数据的更新。如果PCTUSED设置不合理,就会导致insert性能的降低。如果PCTUSED设置过大。使得新的数据无法在当前的块中更新,就必需去freelist中获取的别的。从而提高了I/O的争用。如果经过5次获取都无法insert这个数据,那oracle就会将HWM提高5块的空间。把这5个块分配给这个Insert使用。

用ASSM管理方式。oracle就会根据dba_tables.avg_row_Len来调整PCTUSED的大小。从而使性能提高。使用ASSM的最大的好处就是减少缓冲忙的等待。在oracle9i以前的版本中,缓冲忙的等待是最主要的问题。如果是用单个freelist的时候。oracle会在表头用一个块来管理表中空闲的块。如果多个用户向同一个表insert数据,oracle会向table的freelist申请空闲的块,每次只能处理一个请求。这样就会造成等待。

由于ASSM使用位图来管理空闲的块。一个对像中,文件头会占三个块,其中有一个是位图信息。打个比方,在一个表中,如果区大小是64K,那么前面16个块由第一个位图块管理,然后第17个块又是位图块,来管理17到31个数据块。以此类推。

如果是64K/区,那么,一个位图块管理16个数据块
如果是1M/区,那么,一个位图块管理64个数据块
如果是8M/区,那么,一个位图块管理256个数据块

 

补充说明TS定义为LMT,并且指定尺寸的时候(uniform size )的分配方法:
这是我做试验测试得到的结论,欢迎指正。

WINDOWS 2000 SERVER,ORACLE9205,DB_BLOCK_SIZE = 8K

1、当为TS指定UNIFORM SIZE 时,TS对在其上面创建的对象的EXTENT都统一
用此尺寸去划分大小,多留少补。

2、当为表指定NEXT,PCTINCREASE 时,这些参数只在创建时有效,之后
的扩展无效。

举例:创建一表空间,
CREATE TABLESPACE ASSM DATAFILE 'D:/oracle/oradata/encore/ASSM01.DBF'
SIZE 50M AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 3M
SEGMENT SPACE MANAGEMENT AUTO;

UNIFORM SIZE 为 3M

创建一表:CREATE TABLE ASSMTAB3 (COL1 NUMBER(3))
STORAGE (INITIAL 2M NEXT 5M MINEXTENTS 3 PCTINCREASE 100)
TABLESPACE ASSM;

查看创建结果

SQL> SELECT SEGMENT_TYPE, TABLESPACE_NAME, EXTENT_ID, BYTES, BLOCKS FROM USER_EXTENTS
2 WHERE SEGMENT_NAME = 'ASSMTAB3';

SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID BYTES BLOCKS
------------------ ------------------------------ ---------- ---------- ----------
TABLE ASSM 0 3145728 384
TABLE ASSM 1 3145728 384
TABLE ASSM 2 3145728 384
TABLE ASSM 3 3145728 384
TABLE ASSM 4 3145728 384
TABLE ASSM 5 3145728 384

SQL> select table_name,INITIAL_EXTENT,NEXT_EXTENT,PCT_INCREASE from user_tables
2 where table_name = 'ASSMTAB3';

TABLE_NAME INITIAL_EXTENT NEXT_EXTENT PCT_INCREASE
------------------------------ -------------- ----------- ------------
ASSMTAB3 17825792 3145728 0


INITIAL_EXTENT = 17825792B = 17M

可以看得出,这些参数 INITIAL 2M NEXT 5M MINEXTENTS 3 PCTINCREASE 100
确实有效:(2)+(5)+(5+5*100%) = 17 M
而由于 UNIFORM SIZE = 3M,所以必须 6 个 EXTENT 才可以满足(3M*6=18M)要求。

也就是说:这些参数在创建时是有效的,ORACLE使用统一的尺寸(3M)来为其分配EXTENT



再看看当初试分配的空间使用完后,NEXT EXTENT的分配情况:

往该表插入数据
SQL> begin
2 for i in 1..350000 loop
3 insert into ASSMTAB3 select 'swwwwwwwssssssssssssssssssssssssssssssssssssssssssssss' from dual;
4 end loop;
5 commit;
6 end;
7 /

PL/SQL procedure successfully completed.

SQL> SELECT SEGMENT_TYPE, TABLESPACE_NAME, EXTENT_ID, BYTES, BLOCKS FROM USER_EXTENTS
2 WHERE SEGMENT_NAME = 'ASSMTAB3';

SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID BYTES BLOCKS
------------------ ------------------------------ ---------- ---------- ----------
TABLE ASSM 0 3145728 384
TABLE ASSM 1 3145728 384
TABLE ASSM 2 3145728 384
TABLE ASSM 3 3145728 384
TABLE ASSM 4 3145728 384
TABLE ASSM 5 3145728 384
TABLE ASSM 6 3145728 384

7 rows selected.

比之之前的,多了一个EXTENTS,大小为3M,也就是说,此时PCTINCREASE 100 已经不起作用了,
ORACLE 一次只分配一个3M的EXTENT给该表。

这样看来,一开始的 INITIAL 2M NEXT 5M MINEXTENTS 3 PCTINCREASE 100,实际上和
INITIAL 17M 没什么两样。ORACLE仍旧会使用SIZE 3M的尺寸标准来分配空间

从这个意义上讲,NEXT,MINEXTENTS,PCTINCREASE等这些参数确实失效了。

Oracle PCTfree assm,Oracle 12C LMT & ASSM 完美测试 本帖最后由 sunyunyi 于 2017-9-7 17:35 编辑目前服务于电力行业,致力于帮助客户解决生产过程中出现的问题,提高生产效率, 爱好书法,周易!愿结交志同道合之士!共同进步! 微信号:sunyunyi_sunversion: 12.2.0.1.0需要测试的表空间信息:DBMS_METADATA.GET_DDL('TABLESPACE','DATA_01')-------------... 阅读详情

相关推荐

oracle 表空间 碎片,Oracle表空间碎片整理

作为影响数据库性能的一个因素,数据库表空间碎片,应当引起DBA的重视,及时发现并整理碎片是DBA基本维护内容,以提高数据库性能。Oracle数据库表空间、段、区、块简述表空间(tablesapce)表空间是数据库中的基本逻辑结构,一组数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。段(segment)段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,...

weixin_33941859的博客 1944

本地管理表空间(LMT)与自动段空间管理(ASSM)概念(未看)

本地管理表空间(LMT)与自动段空间管理(ASSM)概念 创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM)。 extent management local(本地管理表空间)是在表空间的头部用位图区记录extent(区)的使用情况(是否为free

haiross的专栏 7736

Oracle 自动段空间管理(ASSM:auto segment space management)

一. 官网说明 Logical Storage Structures http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/logical.htm#CNCPT7668 其中有关ASSM 的内容如下: Logical Space Management Oracle Database must use log...

qjoycn 328

本地管理表空间(LMT)与自动段空间管理(ASSM)概念

创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM)。 extent management local(本地管理表空间)是在表空间的头部用位图区记录extent(区)的使用情况(是否为free)。与之相对的是字典管理表空间,用数据字典记录extent使用信息。 ...

weixin_30654583的博客 717

77-Oracle 表空间管理(官方推荐)LMT-ASSM

SYSTEM表空间在10g前强制DMT,10g+可支持LMT(需创建时显式指定),从 11g 到 23ai,​新建的非系统表空间均默认启用 LMT+ASSM,不用显式声明。新建表空间直接默认是lmt+assm,从DMT到LMT的演进,到了上云和多租户时代,最佳黄金搭档是LMT+ASSM了。 表空间管理方式对比​特性​​DMT​(已淘汰)​LMT​​管理位置​数据字典(SYSTEM表空间)数据文件头部位图​锁争用​高(enq: SQ - contention)无​碎片处理​需手动COALESCE自动合并​适用

远方的专栏 1146

dmt、lmt、mssm,assm 总结

 dmt、lmt、mssm,assm总结表空间是由段(segment)组成的,段是由范围(extent)组成的,范围是由连续的(block)组成的。这里也可以通过一幅众所周知的图来表示:当在表空间里创建一个table,index等对象时其实对我们使用者而言称其为对象,但是从oracle存储的角度来说把它称其为segment。我们都知道oracle最小的读写单位是block,但是在为对象分配空间时单位却是extent,这样做的好处其实就是为了提高效率。上面提到段是由范围组成的,当一个extent被分配给一个s

easyjsf的专栏 3828

LMT & ASSM数据文件块分配图示

根据dump的结果,在word里面画了一个非常简单的示意图,每个数据文件最前面的8个块,是LMT用于管理extent分配的。更详细的文档可以参考itpub电子杂志internal专刊中piner关于LMTASSM的文章。数据文件(LMT+ASSM)(每格为1个block,block size为8k)        

Kamus' Oracle World 3248

dmt,lmt,mssm,assm

1.  DMT在Oracle8i或之前是默认的,LMTOracle9i或之后的版本是默认的。备注: LMT,DMT是针对表空间中extent的管理.   在Oracle 8i之前,包括8i,一直用的是DMT(Dictionary ManagementTablespace)字典管理表空间,它工作的原理是向uet$(代表used-extent table)、fet$(代表free-exten

hugh 's Oracle 10g blog 1259

assm的结构_ASSM的局限性(转摘)

FENNG也不转载全打PP为了保持其最强大和最灵活数据库的地位,Oracle在最近发布的几个版本里一直都在创建新的机制来对表格和索引的存储进行简化和分块。从Oracle8i开始,Oracle开始在tablespace内部将对象管理进行自动化。第一个增强的地方原来叫做本地管理tablespace(或者简写作LMT)。在LMT里,Oracletablespace里的信息从数据字典的表格空间里移出去,...

weixin_35662417的博客 1547

oracle 表空管理方式(LMT)、ASSM段管理方式、一级位图块、二级位图块、三级位图块。

今天是2013-12-16,今天我收到一个消息,在大约5月7号左右接到了杨廷琨老师的面试,由于自身技术原因没有机会和他一起学习,他一直都是我学习 榜样。可是明天他就来我现在工作单位进行技术支持,我就可以请教他问题,心里感到非常有幸,这也许就是缘分。    今天晚上进行了一下表空间管理方式的学习,在此记录一下笔记。  对于oracle数据库最小i/0单位是数据块,最想分配空间单位是区,对于表空间

Rhys learn oracle! 3261

本地管理表空间LMT&自动段空间管理ASSM

本地管理表空间LMT:改进了表空间中对象的性能,并且减轻了表空间的管理,不再存在表空间的存储碎片。 LMT通过位图跟踪表空间的空闲空间 执行任何LMT空间相关操作时可以减少或消除回滚信息。因为表空间中位图的更新没有记录在数据字典中,所以不会为该事物生成任何回滚信息。 通过本地托管盘区,这些盘区管理操作都会被重新分配到数据文件头中的位图块上,这同时也提高了性能,因为数据库的每个表空间都只包含自

wbj19890107的专栏 1165

DMT、LMT、MSSM、ASSM

dmt,lmt是管理segment中的extent的,而mssm和assm是管理extent中的block的。 1、dmt (dictionary managed tablespace)        表空间里相应的数据文件中的extent是被使用了还是处于空闲是记录在两个数据字典表中(uet$:used extent;fet$:free extent),也就是说Oracle updates

关注系统性能调优 3181

Oracle数据库中利用ASSM改善分段存储

为了保持其最强大和最灵活数据库的地位,Oracle在最近发布的几个版本里一直都在创建新的机制来对表格和索引的存储进行简化和分块。从Oracle8i开始,Oracle开始在tablespace内部将对象管理进行自动化。第一个增强的地方原来叫做本地管理tablespace(或者简写作LMT)。在LMT里,Oracletablespace里的信息从数据字典的表格空间里移出去,而直接将其保存到table

无双小宝 816

LMT ASSM

可以认为这两个是Oracle空间分配和管理的相关内容要理解充分,对Oracle空间的理解和其他问题都有很好的帮助adm文档中表空间的部分也有部分lmt相关内容转载本地管理表空间——大家继续...

199

FREELIST, HWM , LMT, DMT,ASSM, MSSM

FREELIST, HWM , LMT, DMT,ASSM, MSSM 1. DMT在Oracle8i或之前是默认的,LMTOracle9i或之后的版本是默认的。备注: LMT,DMT是针对表空间中extent的管理....

cuixie2370的博客 234

oracle mssm,关于oracle 中的dmt_lmt_mssm_assm其间的关系

在了解dmt和lmt之前,先来简单的熟悉一下oracle数据库的逻辑结构,逻辑结构描速起来非常简单:表空间是由段(segment)组成的,段是由范围(extent)组成的,范围是由连续的(block)组成的。这里也可以通过一幅众所周知的图来表示:当在表空间里创建一个table,index等对象时其实对我们使用者而言称其为对象,但是从oracle存储的角度来说把它称其为segment。我们都知道or...

weixin_34331737的博客 574

dmt、lmt、mssm,assm的一点总结!

<br />转载于 http://warehouse.itpub.net/post/777/431280<br /> <br /><br />这几个名词涉及的内容实在是太多了,尽最大能力总结一下,希望能和大家一起分享!<br />一下写不完,会不停的补充、完善!<br /><br />感觉比讲课还累:) <br />未完,不停的整理,修正,完善当中,欢迎大家拍砖!<br />[php]<br />在了解dmt和lmt之前,先来简单的熟悉一下oracle数据库的逻辑结构,逻辑结构描速起来非常简单:表空<br

507
上一篇: linux中设置组
下一篇: 在联机状态改变redo logfile大小的方法
tesge
博客等级 码龄23年 3粉丝 128原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值