第2章 震惊,体验物理体系之旅
2.1 必须提及的系列知识
本章知识体系如图2-1所示。
图2-1 物理体系学习
“上了这么久的课,大家累不累啊?”梁老师笑着问大家。
“不累!”小莲脱口而出,她觉得这次培训还真有意思,时间也过得特别快。
“原来不累啊,那算了,如果累了就给大家说一个故事调节一下。”
“累啊!”
“好累啊!”
“累死了!”
“讲故事吧!”
这一小段时间的接触后,同学们都觉得这个梁老师很随和,很有趣,所以大家也真够大胆了,听说累了有故事听,台下传来一片夹杂着阵阵欢笑的叫苦声,真是一个独特的风景。
“好吧,好吧,那讲故事吧。”梁老师笑了。
“我的故事肯定和 Oracle 课程是有关系的,否则要是随便乱讲,传出去了,梁老师岂不是要被开除了。
之前晶晶回答过我,说无论开发、管理、优化还是设计,基本原理都是必学的,回答得非常好。而基本原理中,体系结构又是首当其冲需要了解的知识,因此我的故事就和体系结构有关。在讲故事之前,首先让我们看看物理体系结构图是什么样子的,请看图2-2。
图2-2 Oracle体系结构图
这个体系结构图看似简单,其实很有玄机,我们平时遇到的数据库相关的各种问题,很多都可以从体系结构中找到解决方法,理解体系结构非常重要。
这里我先简单描述一下Oracle的体系结构,我先粗略地说如下5点,大家要记得时刻回头看看这幅图。
① Oracle 由实例和数据库组成,我特意用两个虚框标记出来,上半部的直角方框为实例instance,下半部的圆角方框为数据库Database,大家可以看到我在虚线框左上角做的标注。
② 实例是由一个开辟的共享内存区SGA(System Global Area)和一系列后台进程组成的,其中SGA最主要被划分为共享池(shared pool)、数据缓冲区(db cache)和日志缓冲区(log buffer)三类。后台进程包括图2-2中所示的PMON、SMON、LCKn、RECO、CKPT、DBWR、LGWR、ARCH等系列进程。
③ 数据库是由数据文件、参数文件、日志文件、控制文件、归档日志文件等系列文件组成的,其中归档日志最终可能会被转移到新的存储介质中,用于备份恢复使用。
④ 大家请注意看图2-2中的圆形虚线框标记部分的一个细节,PGA(Program Global Area)区,这也是一块开辟出来的内存区,和SGA最明显的差别在于,PGA不是共享内存,是私有不共享的,S 理解为共享的首字母。用户对数据库发起的无论查询还是更新的任何操作,都是在PGA先预处理,然后接下来才进入实例区域,由SGA和系列后台进程共同完成用户发起的请求。
PGA起到的具体作用,也就是前面说的预处理,是什么呢?主要有三点:第一,保存用户的连接信息,如会话属性、绑定变量等;第二,保存用户权限等重要信息,当用户进程与数据库建立会话时,系统会将这个用户的相关权限查询出来,然后保存在这个会话区内;第三,当发起的指令需要排序的时候,PGA(Program Global Area)正是这个排序区,如果在内存中可以放下排序的尺寸,就在内存 PGA 区内完成,如果放不下,超出的部分就在临时表空间中完成排序,也就是在磁盘中完成排序。
⑤ 我在图中标识了三块区域(大家注意看虚线框的左下角标注),分别是1区圆形虚线框, 2区直角方形虚线框,3区圆角方形虚线框。用户的请求发起经历的顺序一般如下:
1区→2区→3区;或者1区→2区。”
“用户的请求为什么会有不访问3区Database区的情况啊?”小莲忽然想到,不禁脱口而出,打断了梁老师。
“这位同学提问得很好,不过我不告诉你答案。”
台下一片笑声……
“梁老师,为什么SGA内存区要分成共享池、数据缓冲区、日志缓冲区三部分啊,它们分别是什么作用?”胖小伙子敬昱忽地站起身来提问。
“这位同学提问得很好,不过……”梁老师故意放慢了语气。
“我不告诉你答案。”台下的同学异口同声地喊出来……
台下的又是一片笑声……
“安静安静,大家真聪明啊,都知道我后半段话要说啥。这两位同学提出来的问题,大家只要后续认真听讲,就自然有答案了。大家再看看这幅体系结构图,哦,不对,是大家再闭上眼睛想想这幅体系结构图。”
台下同学全闭了眼,梁老师忍不住乐了,一群刚离开校园的新人,真是可爱。
“好了,大家先别闭了,看幻灯片,大家再多看两眼,回想一下我说的这 5 点,然后闭上眼睛回忆,再看看能否把这幅体系结构图牢记在心上,不能记全了再睁开眼睛看看,直到全部印在脑海为止。我们接下来描述的故事就和这个体系结构图紧密相关,记不住故事就不讲了。”
提及故事这两个字眼,台下异常安静,大家努力记忆这幅体系结构图,同时期待着梁老师的故事。