体系架构概念
·系统的体系架构指系统有哪些组成部分,以及这些组成部分之间的关系。
·Oracle的体系架构,是指Oracle数据库管理系统的组成部分和这些组成部分之间的相互关系,如进程(程序,如word,excel都算是一个进程)、内存、数据库的物理与逻辑结构等。
Oracle引入体系架构原因
·为了高效地使用计算机最宝贵的资源:内存,同时保证不会丢失数据库中的任何数据。所以Oracle引入了一个非常复杂的体系结构。
问题:为什么计算机中内存是最宝贵的?
·访问内存中的数据是电子速度,硬盘是机械速度,电子速度远远大于机械速度。在内存中计算的速度是最快的。如计算得到一个结果,先放到硬盘中,要的时候再从硬盘中读取;第二种:先将结果放到内存中,要的时候再从内存中读取,后者的速度要快很多。而用户都需要速度快(如游戏加载的时间都希望越短越好)。
·内存是有限的,同时内存也比硬盘昂贵
系统架构基础
·基础:程序运行以后 = 进程(process) + 内存 + 读取的文件 (如WORD)
·扩展:Oracle运行以后,要用程序要管理数据库文件,所以它的结构变为
·Oracle = (程序部分)+(数据部分)
·程序部分 = 进程(instance,实例)+内存(SGA+PGA)
Oracle体系架构分为实例和数据库,而实例分为内存和进程。
下面先来看看内存,理解内存组成和作用。
SGA:system global area(系统全局区,全局就是都能访问,如全局变量),指所有程序都能共享的内存区。
共享SQL编译结果:大家知道,运行SQL真正运行前要先编译、分析而且消耗的时间很长,所以编译分析的结果保留在服务器的内存中;一个用户登录可能执行:select * from 用户表 where 帐号=? and 密码=?;另一个用户登录时执行SQL就不会再编译分析了,直接取前一个用户的编译分析结果。这叫共享。
共享数据字典:还有查询时需要表结构(如 select * from stu,*在查询时要取出stu表真正的字段。如果一个用户最先查询时,则必须取;另一个用户再查询时就不需要再取了。一个表的有哪些字段,这是数据字典中的一个部分。)
PGA:program global area(程序全局区)。程序一登录时和数据库要连接,数据库就为这个程序单独分区一块小的专用内存。程序一与数据库断开,则内存释放。
作用:SGA和PGA都是内存,通常由DBA用来设计大小,从而调整数据库的速度(性能)。一般程序员用不着。
PGA和SGA区别
·SGA相当于公司(数据库)的大厅;PGA相当于会客室。
·SGA是在数据库启动时自动分配。PGA是在客户端程序与数据库连接自动分配。
·SGA通常较大,PGA较小。
SGA组成 = 日志~ + 数据~ + 共享池 + 大池
日志缓冲区
·重做日志(增删改):每次修改数据(增删改)时,除了要在表中写入数据外,还要在日志文件中记录相关信息。Oracle将日志先写到内存,积累到一定数量,再一次性写入到磁盘,从而提高了效率。(为什么会提高效率?因为写入内存的速度>磁盘的速度)。所以加大日志缓冲区的设置,可以提高增删改的速度。
·数据缓冲区(查):第一个用户查询商品信息,数据必须从磁盘上读取;Oracle可以将查询的数据保存内存中,其它用户查询商品则直接从内存中读取,从而提高查询效率。这个内存区叫~。从数据缓冲区中读取数据,又叫缓存命中率(cache hit)。所以加大数据缓冲区,可以提高查询速度(因为减少磁盘读取而加快)。
·共享池(语句):主要的作用是保存了SQL的编译结果,从而执行相同的SQL语句不需要再次编译,节约了CPU资源。所以加大共享缓冲区,可以提高查询速度(因为减少SQL的分析时间而加快)。
·大池:主要为大的内存操作提供相对独立的操作空间,如数据库的备份和恢复。所以加大大池区,可以提高备份和恢复速度。
PGA = 排序区 + 会话信息 + 游标状态 + 堆栈空间 (了解)
·排序区:某个程序发出了order by语句,将临时排好顺序的数据放在此区。就象是要将公司员工的工资进行排序,就要在草稿上先将数据排好。草稿 = 排序区。设置大一些,有利于加快order by语句的执行。
·会话信息:包括了如权限、角色等信息。
·游标状态:所执行的SQL语句相关的信息。
·堆栈空间:保存SQL中的变量信息。
再来了解一下Oracle有哪些进程。
PMON 进程监控进程: process 清洁工
·清理出现故障的进程。
·释放所有当前挂起的锁定。
·释放故障进程使用的资源。
SMON 系统监控进程 system moniter
·在Oracle因断电而重启时,进行数据库进行必要的修复。
DBWR 数据写入进程 : database writer
·管理数据缓冲区,将最近使用过的块保留在内存中。
·将修改后的缓冲区数据写入数据文件中。
LGWR 日志写入进程 :log writer (记录员)
·负责将日志缓冲区中的日志数据写入日志文件。
·系统有多个日志文件,该进程以循环的方式将数据写入文件。
ARCH 归档进程
·将记录员记录的东西放到档案室
CKPT 检查点进程
· 与Oracle事务相关
体会:Oracle是一个庞大的系统(如跨国公司),分工很明确。
问题:分工的好处是什么? (提高效率)。
数据库的概念:本义是指数据所在仓库(数据的集合)。
数据库管理的信息,分为:
·系统数据:如配置文件,如指定SGA的大小
·用户数据:业务系统数据
物理结构:就是从操作系统的角度,有哪些文件。因为文件,又叫物理文件。删除一个文件,又叫物理删除。
如:
CONTROL01.CTL ctl = control,控制文件(数据库实体的结构,如表结构)
CONTROL02.CTL
CONTROL03.CTL
CWMLITE01.DBF dbf = database file = 真正存储数据的文件(如员工具体信息)
DRSYS01.DBF
EXAMPLE01.DBF
INDX01.DBF 以index打头的dbf专门保存索引
ODM01.DBF
ODM02.DBF
REDO01.LOG 专门保存日志文件
REDO02.LOG
REDO03.LOG
SYSTEM01.DBF
TEMP01.DBF
TOOLS01.DBF
UNDOTBS01.DBF
USERS01.DBF
XDB01.DBF
XXX.ORA oracle = 初始化参数文件
XXX2.ORA
逻辑结构:指Oracle数据库文件的内部组成。
计算机管理基础
·计算机管理最小的单位是bit,相当一个带电开关(闭1断0),这就是二进制。
·计算机要通过数据类型来区别不同的数据,所以通过字节Byte来管理,一个字节有32位(32位计算机,或64位,对应64位计算机。计算机数位越多,管理的内存越大。如2的32次方,小于64次方。如电话号码用完了,要升位)。不同的数据类型分配不同的字节。如整数通过4个Byte,小数8个Byte。字符串由字符组成,字符本质是数字,如A就是65(整数)。
Oracle管理 块→区→段→表空间
·块,Block:最小的磁盘存储单位,通常是2K或2K的整数位。即使保存1,至少也用2K。
·区,extend:最小的磁盘分区单位,通常为8K。表示Oracle一次性最小给你分配8K。
·段,segment:不同类型的数据,保存在不同的段。如数据段,索引段。
·表空间,table space:不同的业务系统需要一个单独的存储空间,这个空间在SQLServer叫做“databse”(通过create databse获取),而在Oracle中叫表空间。至少要有5个表空间(system,user,index,tool,temp),用户表空间数量不限。也就是说,开发一个新的业务系统,通常就要在Oracle中新建一个表空间。
·模式,Schema:包含一个用户所有对象的的逻辑结构,模式名称就是控制该模式的用户名称。
·关系:一个数据文件只能归到某一个表空间上,每个表空间可以含一个或多个数据文件。
区别:
·物理结构:人有男人,女人组成
·逻辑结构:人由细胞组成。
块区段表空间比喻
·块:抽屉,放东西最少要占有一个抽屉;区:桌子,最少要买一个桌子;段:这几个桌子的抽屉放衣服,另外几个桌子的抽屉放裤子。
·表空间:就是用户的房间。张三所有桌子,衣服,在张三相对独立的房间中。
实例与数据库关系
·一个保安只在守一个数据库(单实例数据库)
·一个数据库可能雇佣多个保安(多实例数据库
三种进程
·用户进程=顾客,服务进程=跑堂,后台进程=(厨师,会计,出纳……)
相关概念:
理解“联机”的含义
·全称:联机重做日志缓冲区 。
·联机就是Online,联机日志,就是数据库运行以后时刻使用的日志,叫联机日志(肯定不能删除,受数据库保护);联机反过来就是脱机,如以前的日志备份。
理解日志的作用和“重做日志”的含义
·日志的作用是用于恢复数据。
·简单理解就是今天买了一本JAVA书,写日记“书名:JAVA……”。后来书丢掉了,于是看日记,购买了一本相同的书,这样就恢复了数据。本质上理解就是执行一条Insert,日志文件也有一件Insert。1号有10条数据,2号insert5条,2号晚上数据丢掉了。恢复数据步骤如下:首先要恢复数据到1号的数据有10条(通常DBA要备份原始数据),再执行日志,于是就有了15条。这就表示“重新做了一次”,所以恢复数据的动作叫“重做日志”。
理解数据缓冲区
·图书馆看报纸:第一个人从报架取下来,在阅读室看,然后不拿回报架;其它同学可以直接在阅读室看报纸。阅读室 = 数据缓冲区,报架 = 磁盘。
理解共享池
·看英文小说:第一个同学看英文小说,翻译为中文(时间比较长);其它同学直接看中文小说。
进程和线程
·进程:就是一个程序。如:单线程的孙只能一次打一个妖怪,打完一个再打另一个。如:dos中dir/s,停止以前不能做其它的事情。
·线程:就是程序运行以后,在内存中的一个COPY,两者在功能上是完全一样的。多线程的孙能变出很多个孙,每个孙单独一个妖怪。 但实际上电脑往往只有一个CPU,做不到真正的多线程。那就要求孙一个妖怪打一会儿,但是打得很快,好像就在同时和很多人打(如以前单核CPU电脑也能同时听歌和上网,只是切换得很从,体会不出来)
·打开一个WORD程序,同时读取两个WORD文档,WORD就要单独启动两份(要求两份独立的内存)
打开一个QQ程序,同时和两个好友聊天,QQ只要启动一份份(只要求一份独立的内存,好处在于可以共享内存中的相同的数据)
posted on 2012-09-05 16:12
kxbin 阅读(662)
评论(0) 编辑 收藏 所属分类:
ORACLE 、
转发