《DBA-I 第一章 ORACLE体系结构(二).docx》由会员分享,可在线阅读,更多相关《DBA-I 第一章 ORACLE体系结构(二).docx(17页珍藏版)》请在第壹文秘上搜索。
1、ORAC1.E体系结构(二)我们前面学习了ORAC1.E如何实现客户的请求并连接到实例。客户端请求通过1.ISTENER审核,1.ISTENER会指示ORAC1.E分配一个效劳涔进程,并在客户端进程和效劳泯进程间建立了连接会话.我们称专有连接会话,ORAC1.E实例提供的是专有效劳。就是所谓的dedica1.e模式。默认情况下就是dedicate模式。ORAC1.E除了提供专有连接会话,还提供共享连接会话,ORAC1.E实例也提供共享效劳.我们接卜.来学习ORAe1.E提供的共享式效劳涔是怎么样实现的,有什么优势。共享效劳器大家可能是第次接触,有点不太好理解,这个不着急,现阶段只要初步了解下可
2、以了。我举个例子:你们谁安装的的orac1.e是在IinUX环境卜的?你建立一个sqp1.us会话,看看是不是多出一个OraCIe的OS进程gc1c117K711760014:53ptx/O(K):X):(XIrIwrnpMIP1.USfuture/futurcW11g我们看到,专有模式卜新建一个会话,就多出了一个进程。但是共享模式和这个不样,你开很多个会话在效劳器上表现为1个进程。就是1个进程多个会话一起用,就是共享效劳器的特点。那我再问卜.大家,共享模式3新开一个会话,进程一定不会增加吗?不一定的,有可能还是会增加0比方我们假设一个共享效劳器管理10个会话,现在已经有IO个了,再连一个就是
3、11个,哪么还是会增加个进程的。共享效劳器模式的主耍优势就是节约内存.好,有了上面的经验,我们来看看共享模式的特点。先看下书店的书柜陈列图我们前面讲的都是专有效劳模式的连接。我们再来看共享效劳器模式下,静安图45分店是如何效劳的。当小丽发出一个请求,要批发100O本中国机械出版社2009年后出版的经济类书,并通过轮船运到宁波自己的公司,并按日期进行排序掴绑存放存入小丽公司的仓库。如果采用共享效劳模式,那涉及下面儿个动作:店里为小明(用户进程D分配J售货处小英(效劳器进程1)为她效劳小英相小丽取了这1000本中国机械出版社2009年后出版的经济类书O小英并按出版日期排完序,并进行包装。并反应给小
4、雨检查是否按自己规定的顺序包装。小英招包装后的拈放到司机小思(效劳器进程2)货车里,这样司机小思来效劳小丽,帮这批货运道码头。司机小思将货开往码头这时售货员小英可以为小勇(用户进程2)去卖书。也就是个售货员小英跟小勇建立了会话,并进行效劳。小英可以效劳多个不同会话的任务(一、小丽批发经济类书,二、小勇买书),而不需要小英一直为小丽效劳,所以也不需要等待小丽在清小英卜.一个动作前无所事事。这时小英既知道小丽的情况,也知道小勇的情况。对应于ORAC1.E就是一个效劳器进程可以有多个会话(SESSION),多个会话信息需要让一个效劳共享,所以叫共享效劳器进程。司机小思帮助把货搬到船上,他的任务结束,
5、开车回书店。船长小川(效劳器进程3符货运到宁波。司机小宁(效劳器进程4)将货运到小丽宁波的公司。小丽这次的批发任务共有四个人梢它完成(为了简化,这里省略了ORK1.E调度器参与的角色),这些人都是受静安书店的委托效劳于小丽.而每个效劳器进程都会在执行完任务后反应给客户会话信息上图对应于ORAC1.E就是一个会话可以由多个效劳器进程来完成“而在专有效劳模式卜.,那小英要一直为小丽效劳,一直到把货运到小丽公司为止,它们建立的会话就结束了,而且进程也随之消亡。在这期间小英要既当营业员、司机、船长,而I1.这期间小丽要有事情要处理,比方去银行转帐,那么小英只有等待小丽回来才能继续工作,而不能去效劳其他
6、顾客,这很显然大量浪费了小英的效率。在ORRC1.E模式下,专有模式会话进程和效劳器进程一一对应,效劳器进程耍效劳到结束,最后一起消亡.而在共享效劳模式下,那小英在卖完书后,即使小丽这个时候去收银台交费.小英也不需要等待她,马上可.以去处理新的客户小勇,这样售货员的效率就提高了。即使小丽又要重新需要小英处理问题,如小阍拿了收银凭据,小英就要停下小勇的效劳,把小雨的书给她,并输入电脑,再回头处理小勇的工作。在OR八C1.E模式卜.共享模式,用户进程不需要效劳器进程处理的的时候,效劳器进程可以效劳别的用户进程,当原来的用户进程继续请求这个效劳器进程时,可以打断后一个用户进程,继续处理前一个用户进程
7、的工作。这里小丽再次找小英时,她们已经彼此认识,已经是朋友了,不需要再重新打交道,重新建立信任关系,节约了之间沟通的本钱.那小英知道了小丽的姓名,任务起始时间,结束时间,当前的状态,任务的目的等。也同样知道了小勇相应的信息。这也是会话信息,会话信息对所r的进程可以共享的,开始备课上节课我们开始DBA-I的第一节课给大家整体介绍了下OraCIe效劳器的体系结构及其主要组件,我们简单回忆下。第一个问题:ORAC1.ESERVER由什么组成?ORAC1.E效劳由个实例和个数据库组成.ORAC1.ESERVER的概念是,个ORAC1.ESERvER就是个DATABASE库文件加上一个INSTANCE,
8、按我们图书馆的例子就是上海图节蚀的静安书城店提供的就是一个ORAC1.ES1.-RVERe第二个问题:ORAC1.E实例(INSTANCE)由什么组成?主内存结构(SGA)+后台进程那RAC的概念是什么?RAC的概念就是多个实例关联一个数据库,ORAC1.ESERVER=1个DB+1个INSTANCEINSTANCE=MEMORY+PROCESSRC=N个ORAC1.ESERVER-1个DB+N个INSTANCE第三个问题:分别简述下SGA.PGA,UGA是什么?第四个问题:我们知道ORAC1.E的物理结构指的是OS里直接能查看到的文件。那ORAC1.EDB有哪几种物理文件?Contro1.f
9、i1.esDatafi1.esRedo1.ogfi1.es第五个问题:简单说下专有效劳罂和共享效劳器的区别?专有效劳器一个效劳器进程专门效劳一个用户进程,即使用户进程空闲,效劳器进程还是继续等待随时为该会话效劳,不能去干其他事情。专有模式会话进程和效劳器进程一一时应,效劳器进程要效劳到结束,最后一起消亡。共享效劳器个效劳器进程可以效劳多个用户进程,个用户进程也可以被多个效劳器进程效劳。共享模式,用户进程不需要效劳器进程处理的的时候,效劳器进程可以效劳别的用户进程,当原来的用户进程继续请求这个效劳黯进程时,可以打断后个用户进程,维续处理前个用户进程的工作。大家结合我们图书馆小丽买书,住货历小丽,
10、司机小思,船长小川,司机小宁为小丽效劳的例子再理解下。我们上节课讲到,在共享效劳模式卜.,那小英在卖完书后,即使小丽这个时候去收银台交费,小英也不需要等待她,马上可以去处理新的客户小勇,这样售货员的效率就提高了。即使小丽又要至新需要小英处理问题,如小丽拿了收银凭据,小英就要停下小勇的效劳,把小丽的书给她,并输入电脑,再回头处理小勇的工作。这是小丽再次找小英时,她们已经彼此认识,已经是朋友1.不需耍再重新打交道,重新建立信任关系,节约了之间沟通的本钱。那小英知道了小明的姓名,任务起始时间,结束时间,当前的状态,任务的目的等。也同样知道了小勇相应的信息。这些是会话信息,会话信息对于所有的进程可以共
11、享的。所以这里涉及进程中共享的信息如F:会话信息:这次任务起始时间,结束时间,当前的状态,排序的反应信息、任务的目的等.(TRSOR信息:CURSOR是什么?还有如小明批发这1000本书的方法等在也是可以让另一个售货员共享的,什么意思呢?就有点类似管理中的专人负贵,的特点,你只负货某一件事情,整体类似于流水线的概念。这在ORAC1.E中通过SQ1.语句实现,并将执行方案记录下来,我们称共享SQ1.区,放在共享池中。但是对于每发送一个语句,在专有模式,相对丁效劳器进程是私有的,所以我们称私有SQ1.g,输入进程内存。但是对于共享效劳模式,个会话的信息可以让所有的进程共享,那么属于会话生命周期里,
12、这个私有SQ1.区可以是共享的,也可以是执行完后吃式关闭.我们后面公学到SESSIONCACHECURSOR,私有SQ1.区或者称C1.RSOR.个SQI.就会对应个CURSOR.在C1.RSOR美例时释放,CURSOR(私有SQ1.区)这里有两个局部搜索100o本书方法(执行方案)有些称为固定局部,如小丽的姓名(绑定变量),这些信息在整个会话中可以不马上移放你既可以指定我不想要这些信息(一些程序的显式关闭游标),如procdure中c1.osecursor也可以让它自动去除这些信息(默认的SQ1.语句执行完就关闭游标),如se1.ect*fromtab;O当前取书已经到第999本了。这些是运
13、行时状态的信息,等SQ1.语句执行完就释放掉了。注意,每个会话会限制CURSOR数(任务数),如小丽刚刚的会话总共有四个效劳器进程效劳的四个任务。如果每次执行完一个CURSOR(任务)后不马上糅放这些CUROSR(任务)信息,那么超过openCUrSOrS数后会抛出OPenCUrSQr数超出错误,否则公占过多的资源“比方静安店最多效劳一个客户的子任务(CURSOR)数是3,比方卖书、司机运货到码头、45通过船运到宁波,而且每个任务做完后登记的信息没有去除,那么小宁要完成第四次子任务时候就不允许。这是因为怕一个大任务中小任务的信息太多造成大量内存使用。(特别是程序的循环操作,循环OPCnCUrS
14、Or个SQ1.千次,不执行CIoSC就会发生上述问题)所以对于应用程序代码,要仔细考虑CuRSOR的释放机制.而上面的这些CURSOR信息在共享效劳模式是共享的,属于UGA,并存放在SG八中,在有大池的情况卜存放在大池。还有一局部内存是完全私有的,比方有些局部变此作为程序的栈空间,还有些私有工作空间,如排序区,HASHJOIN区,位图合并区等,它们是在执行的时候调用全局区的,我们称为CG(Ca1.1.G1.oba1.ArCa)调用全局区,执行完就释放。为了诚少资源使用,CGA执行完就择放,是运行时状态,别的进程是无法看到的,还有栈空间调用完就释放的都是私有信息。但是执行结束后如果需要反应给用户
15、会话的数橱,如SE1.ECT的FI-TCH,则需要保存区的数据提供用户反应信息,这些信息保存在哪里?是不是CGA?注意CGA属于PGAe如我们排序区可以设置保存空间,这样这些SQ1.执行完排序完后,不马上锋放给操作系统,而是释放给UGA,最后FETCH反应给SEI.ECT的用户.CGA属于PGA与其他的全局区不同,CGA(Ca1.1.G1.oba1.Area调用全局区)的存在是it间的.它只存在于一个调用过程中.而UGA可能属于PGA或者SGAPGA是一段包含一个Orac1.e效劳或后台进程的数据和控制信息的内存.PGA的大小依模与系统的配置.在专用效劳(DedicatedServer)模式下,一个效劳进程与一个用户进程相关,PGA就包括了堆空间和UGA.而UGA(USerG1.oba1.Area用户全局区)由用户会话数据、游标状态和索引区蛆成.在共享效劳OrrS)模式下,一个共享效劳进程被多个用户进程共享,此时UGA是SharedP1.或1.argePOOI的一局部(依隙与配置)此时UGA属于SGAUGA根据连接模式的区别而有所区别大家设想一下,一个CGA的返回要怎么返回给用户?放在UGA里。我们排序区可以设置保存空间,这样这些