转载:ASSM内部存储研究大揭密

简介: 摘自:http://epub.itpub.net/9/7.htm倾力大奉献——ASSM内部存储研究大揭密 作者:Piner 一、 ASSM的基本情况 在920以前,表的剩余空间的管理与分配都是由连接列表freelist来完成的,因为freelist存在串行的问题,因此容易引起往往容易引起段头的争用与空间的浪费(其实这一点并不明显),最主要的还是因为需要DBA 花费大量的精力去管理这些争用并监控表的空间利用。

摘自:http://epub.itpub.net/9/7.htm

倾力大奉献——ASSM内部存储研究大揭密

作者:Piner

一、 ASSM的基本情况

920以前,表的剩余空间的管理与分配都是由连接列表freelist来完成的,因为freelist存在串行的问题,因此容易引起往往容易引起段头的争用与空间的浪费(其实这一点并不明显),最主要的还是因为需要DBA 花费大量的精力去管理这些争用并监控表的空间利用。

自动段空间管理(ASSM),它首次出现在Oracle920里。有了ASSM,连接列表freelist被位图所取代,它是一个二进制的数组,能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed SegmentsBMB 段)。

让我们看看位图freelist是如何实现的。我会从使用区段空间管理自动参数创建tablespace开始:

Create tablespace demo
datafile '/ora01/oem/demo01.dbf '
size 5m
EXTENT MANAGEMENT LOCAL -- Turn on LMT
SEGMENT SPACE MANAGEMENT AUTO -- Turn on ASSM;

一旦你定义好了tablespace,那么表和索引就能够使用各种方法很容易地被移动到新的tablespace里,带有ASSM的本地管理tablespace会略掉任何为PCTUSEDNEXTFREELISTS所指定的值。

当表格或者索引被分配到这个tablespace以后,用于独立对象的PCTUSED的值会被忽略,而Oracle9i会使用位图数组来自动地管理tablespace里表格和索引的freelist。对于在LMTtablespace内部创建的表格和索引而言,这个NEXT扩展子句是过时的,因为由本地管理的tablespace会管理它们。但是,INITIAL参数仍然是需要的,因为Oracle不可能提前知道初始表格加载的大小。对于ASSM而言,INITIAL最小的值是三个块。

新的管理机制用位图来跟踪或管理每个分配到对象的块,每个块有多少剩余空间根据位图的状态来确定,如>75%,50%-75%,25%-50%,也就是说位图其实采用了四个状态位来代替以前的pctused,什么时候该利用该数据块则由设定的pctfree来确定。

使用ASSM的一个巨大优势是,位图freelist肯定能够减轻缓冲区忙等待(buffer busy wait)的负担,这个问题在Oracle9i以前的版本里曾是一个严重的问题。

在没有多个freelist的时候,每个Oracle表格和索引在表格的头部都曾有一个数据块,用来管理对象所使用的剩余区块,并为任何SQL插入声明所创建的新数据行提供数据块。当数据缓冲内的数据块由于被另一个DML事务处理锁定而无法使用的时候,缓冲区忙等待就会发生。当你需要将多个任务插入到同一个表格里的时候,这些任务就被强制等待,而同时Oracle会在同时分派剩余的区块,一次一个。

有了ASSM之后,Oracle宣称显著地提高了DML并发操作的性能,因为(同一个)位图的不同部分可以被同时使用,这样就消除了寻找剩余空间的串行化。根据Oracle的测试结果,使用位图freelist会消除所有分段头部(对资源)的争夺,还能获得超快的并发插入操作。

尽管ASSM显示出了令人激动的特性并能够简化Oracle DBA的工作,但是Oracle9i的位图分段管理还是有一些局限性的:

·


目录
相关文章
|
5月前
|
存储 关系型数据库 MySQL
认真学习InnoDB的数据存储结构
认真学习InnoDB的数据存储结构
50 0
|
21天前
|
存储 人工智能 程序员
【重学C++】【内存】关于C++内存分区,你可能忽视的那些细节
【重学C++】【内存】关于C++内存分区,你可能忽视的那些细节
54 1
|
5月前
|
存储 缓存 Windows
探秘磁盘的奥秘:物理结构、缓存和虚拟内存的作用
本文介绍了磁盘的物理结构、磁盘缓存和虚拟内存的重要性,并解释了它们在计算机系统中的作用。了解磁盘的物理结构可以帮助我们更好地理解数据的存储和访问过程,从而进行系统优化和性能提升。磁盘缓存和虚拟内存则能够提高数据读取速度和运行程序的能力。深入了解这些知识,将为您的计算机系统带来更好的性能和效率。
214 1
|
5月前
|
存储 关系型数据库 MySQL
认真学习InnoDB的数据存储结构中的区、段与表空间
认真学习InnoDB的数据存储结构中的区、段与表空间
58 2
|
8月前
|
存储
数据在内存中的存储(超级无敌究极详细!)
数据在内存中的存储(超级无敌究极详细!)
|
8月前
|
区块链
FIL NEW持币生息系统开发(模式)|FIL NEW算力系统开发
区块链本身只是一种技术,它本身只能带来去中心化的可能
|
11月前
|
编译器
进程4GB空间简析,PE重定位表【滴水逆向三期50笔记+作业】
进程4GB空间简析,PE重定位表【滴水逆向三期50笔记+作业】
|
11月前
|
存储 算法 关系型数据库
深入浅出——InnoDB页结构详解,慎入!
上一篇文章对InnoDB的行格式进行了解析,但是却把记录头信息抛到这里来讲,那么开始吧,注意本片需要有一点数据结构和算法基础,如果基础薄弱,请先确保自己会二分查找和链表再来食用...
36 0
深入浅出——InnoDB页结构详解,慎入!
|
存储 小程序 编译器
【C/C++】庖丁解牛 深究数据在内存中如何存储
【C/C++】庖丁解牛 深究数据在内存中如何存储
143 0
|
存储 负载均衡 安全
(*长期更新)软考网络工程师学习笔记——Section 16 磁盘存储技术和网络规划设计
(*长期更新)软考网络工程师学习笔记——Section 16 磁盘存储技术和网络规划设计
(*长期更新)软考网络工程师学习笔记——Section 16 磁盘存储技术和网络规划设计