缓冲区不再忙等待
在没有多个freelist的时候,每个Oracle表格和索引在表格的头部都曾有一个数据块,用来管理对象所使用的剩余区块,并为任何SQL插入声明所创建的新数据行提供数据块。当数据缓冲内的数据块由于被另一个DML事务处理锁定而无法使用的时候,缓冲区忙等待就会发生。当你需要将多个任务插入到同一个表格里的时候,这些任务就被强制等待,而同时Oracle会在同时分派剩余的区块,一次一个。
有了ASSM之后,Oracle宣称显著地提高了DML并发操作的性能,因为(同一个)位图的不同部分可以被同时使用,这样就消除了寻找剩余空间的串行化。根据Oracle的测试结果,使用位图freelist会消除所有分段头部(对资源)的争夺,还能获得超快的并发插入操作(图A)。
图A

Oracle公司对使用位图freelist进行SQL插入操作的测试结果
ASSM的局限性
尽管ASSM显示出了令人激动的特性并能够简化Oracle DBA的工作,但是Oracle9i的位图分段管理还是有一些局限性的:
- 一旦DBA被分配之后,它就无法控制tablespace内部的独立表格和索引的存储行为。
- 大型对象不能够使用ASSM,而且必须为包含有LOB数据类型的表格创建分离的tablespace。
- 你不能够使用ASSM创建临时的tablespace。这是由排序时临时分段的短暂特性所决定的。
- 只有本地管理的tablespace才能够使用位图分段管理。
- 使用超高容量的DML(例如INSERT、UPDATE和DELETE等)的时候可能会出现性能上的问题。
在我下一篇文章里,我将解释如何获得一些用于DBA的新工具,还有Oracle9i的ASSM特性。我还将看看你要如何将这些工具和ASSM一起使用。
