第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内存区要分成共享池、数据缓存区、日志缓存区三部分啊,它们分别有什么作用?”胖小伙子敬昱忽地站起身来提问。
“这位同学提问得也很好,不过……”梁老师故意放慢了语气。
“我不告诉你答案。”台下的同学异口同声地喊出来……
台下又是一片笑声……
“安静安静,大家真聪明啊,都知道我后半段话要说什么。这两位同学提出来的问题,大家只要后续认真听讲,自然就有答案了。大家再看看这幅体系结构图,哦,不对,是大家再闭上眼睛想想这幅体系结构图。”
台下同学全闭上了眼,梁老师忍不住乐了,一群刚离开校园的新人,真是可爱。
“好了,大家先别闭眼,看一下幻灯片,大家再多看两眼,回想一下我说的这五点,然后闭上眼睛回忆,看能否把这幅体系结构图牢记在心中,不能记全的时候再睁开眼睛看看,直到全部印在脑海中为止。我们接下来描述的故事就和这个体系结构图紧密相关,记不住故事就不讲了。”
提及“故事”这个字眼,台下异常安静,大家努力记忆这幅体系结构图,同时期待着梁老师的故事。