频道栏目
读书频道 > 数据库 > Oracle > Oracle内核技术揭密
1.2.3 ASSM与L3、L2、L1块的意义
2015-04-01 16:01:59     我来说两句
收藏   我要投稿

本文所属图书 > Oracle内核技术揭密

本书是首本国内作者深入剖析Oracle原理的技术书籍。虽以内部原理为主线,但又不乏很多实际的应用案例,希望读者可以将学到的原理与实际应用相结合,提高对Oracle的运维能力。本书第1章主要讲述Oracle的空间存储管  立即去当当网订购

ASSM的目的是大并发插入,这应该是DBA要掌握的基本知识。在输入输出能力满足的情况下,使用ASSM就能有大并发插入吗?这可不一定。工具再好,还要看我们如何使用工具。

在了解ASSM的使用注意事项之前,先来分析一下ASSM。为什么Oracle对外宣称ASSM可以支撑大并发插入应用呢?

ASSM的整体结构是3层位图块+数据块,即共4层的树状结构。

第一层位图块称为L3块,一个L3块中可以存放多个L2块的地址,一个L2块中可以存放多个L1块地址,一个L1块中可以存放多个数据块地址,如图1-2所示。



第一个L3块一般是段头。如果段头中存放了太多L2块的信息,空间不足,Oracle会再分配第二个L3块。当然,段头中会有第二个L3块的地址。如果第二个L3块空间也用完了,会再分配第三个。第二个L3块中会存放第三个L3块的地址。通常情况下,一个L3块就够了。有两个L3块就已经是非常罕有的情况了,基本上不会出现需要3个L3块的情况。

Oracle是如何使用4层树状结构(3层位图块+数据块)来确定向哪个块中插入的呢?

第一步,查找数据字典(就是dba_segments数据字典视图的基表),确定段头位置。

第二步,在段头中找到第一个L2块位置信息。

第三步,到L2块中根据执行插入操作进程的PID号,做HASH运算,得到一个随机数N,在L2中,找到第N个L1块的位置信息。

第四步,到第三步中确定的L1块中,再根据执行插入操作进程的PID号,做HASH运算,得到一个随机数M,在L1中找到第M号数据块。

第五步,向第M号数据块中插入。

L3块中虽然可以有多个L2块,但插入操作不会选择多个L2块,每次只会选择同一个L2块。

直到这个L2块下面的所有数据块都被插满了,才会选择下一个L2块。

在L2中选择某个L1的时候,就是随机的了。不同Session,只要有可能,就会被分配到不同的L1中。在L1中找数据块时也是一样。

现在我们可以回答这个问题了:Oracle为什么宣称ASSM可以支持大并发插入。

假设一个L2中有100个L1,每个L1中有64个数据块,可以算一下,100×64,如果Oracle的随机算法真的够随机,如果有6400个进程一起执行插入操作,Oracle会随机地将它们分配到6400个数据块中。

Oracle的随机算法一向都是值得信赖的。

所以,在Oracle的所有资料中,都宣称ASSM可以支撑大并发插入。

但实际情况往往不像想象中的这么简单。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.2.2 典型问题:堆表是有序的吗
下一篇:1.2.4 值得注意的案例:ASSM真的能提高插入并发量吗
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站