oracle数据库体系架构详解
- 格式:pdf
- 大小:233.04 KB
- 文档页数:6
oracle数据库体系架构详解
在学习oracle中,体系结构是重中之重,⼀开始从宏观上掌握它的物理组成、⽂件组成
和各种⽂件组成。掌握的越深⼊越好。在实际⼯作遇到疑难问题,其实都可以归结到
体系结构中来解释。体系结构是对⼀个系统的框架描述。是设计⼀个系统的宏观⼯
作。这好⽐建⼀栋⼤楼。你⾸先应该以图纸的⽅式把整个⼤楼的体系架构描述出来。
然后⼀点点的往⾥⾯填充东西。下⾯我们先以⼀个图解的⽅式对oracle体系结构有⼀个
基本了解
根据⽰图,便于我们记忆,⽰图分三部分组成,左侧User Process、Server Process、PGA可以看做成Clinet端,上⾯的实例(Instance)和下
⾯的数据库(Database)及参数⽂件(parameter file)、密码⽂件(password file)和归档⽇志⽂件(archived logfiles)组成Oracle Server,所以整个
⽰图可以理解成⼀个C/S架构。 Oracle Server由两个实体组成:实例(instance)与数据库(database)。这两个实体是独⽴的,不过连接在⼀
起。在数据库创建过程中,实例⾸先被创建,然后才创建数据库。在典型的单实例环境中,实例与数据库的关系是⼀对⼀的,⼀个实例连接
⼀个数据库,实例与数据库也可以是多对⼀的关系,即不同计算机上的多个实例打开共享磁盘系统上的⼀个公⽤数据库。这种多对⼀关系被
称为实际应⽤群集(Real Application Clusters,RAC)RAC极⼤提⾼了数据库的性能、容错与可伸缩性(可能耗费更多的存储空间)并且是oracle⽹格(grid)概念的必备部分。
下⾯我们来详细看⼀下oracle数据库的体系架构
Oracle体系架构主要有两⼤部分组成:数据库实例(Instance)和数据库⽂件(database)
数据库实例
指数据库服务器的内存及相关处理程序,它是Oracle的⼼脏。与Oracle性能关系最⼤的是SGA(System Global Area,即系统全局区活共享内
存区),SGA包含三个部分:
1、数据缓冲区,可避免重复读取常⽤的数据;
2、⽇志缓冲区,提升了数据增删改的速度,减少磁盘的读写⽽加快速度;
3、共享池,使相同的SQL语句不再编译,提升了SQL的执⾏速度。
oracle数据库实例的另⼀部分就是⼀些后台进程了,他主要包括:
1.系统监控进程
2.进程监控
3.数据库写进程
4.⽇志写进程
5.检验点进程
6.其他进程
这些后台进程合起来完成数据库管理任务
在访问数据库的时候。器后台先启动实例。启动实例前要先分配内存区。然后在启动后台进程。数据库启动过程中必须启动上⾯的前五个进
程。否则实例⽆法创建。
注意:在启动oracle数据库的时候。因为有些进程是在开机启动项中⾃动启动的。所以占⽤了很⼤⼀部分内存。如果您电脑上还有⼀些其他
占⽤内存⽐较⼤的程序。在启动oracle数据库的时候有可能会因内存不⾜⽽启动失败。
Oracle服务器
Oracle服务器包括两部分:数据库实例和数据库⽂件。他们构成了也就是所谓的数据管理系统(DBMS)
物理结构:oracle的物理结构指的其实就是⼀些存在硬盘上的各种⽂件。其最终⽬的就是存储和获取相关数据。这些存在硬盘上的⽂件组成了oracle数据库的物理结构
Oracle中主要包括三种⽂件:
1.数据⽂件
2.控制⽂件
3.重做⽇志⽂件
参数⽂件和密码⽂件:
参数⽂件:定义了数据库实例的特性,他是正⽂⽂件
密码⽂件:授予⽤户启动和关闭数据库的实例。主要有⼆进制数据组成
Oracle数据库的内存结构:SGA和PGA
SGA:数据库实例的⼀部分。数据库实例的启动会⾸先分配系统全局区(SGA)
1.共享池:共享sql和pl/sql代码,即把解析的sql代码在这⾥缓存,PL/SQL不仅缓存还共享。这样⼤⼤提⾼了直接访问磁盘获得sql的速度。
1)库⾼速缓存:存储最近使⽤过的sql语句。利⽤LRU(最近最少使⽤)算法来管理缓存。最近最少使⽤算法是⼀种⽐较常⽤的算法。在这⾥当
库⾼速缓存接近满的时候。它会把缓存中最近最少使⽤的数据清除缓存中。加⼊新的缓存sql。
查看共享池的⼤⼩使⽤参数shared_pool_size
Sql>show parameter shared_pool_size
设置共享池⼤⼩
Sql>alter system set shared_pool_size=16M
注:在下⾯的的内容中。如果提到有关参数。如没有特殊说明。设置和查看参数值都是⽤以上类似⽅法。以后就不在重复了。并且这些参数
必须是在以系统管理员system登陆时才能查看和修改。⽤类似scott⽤户是不能查看和修改的。
Oracle提供了DB_CACHE_SIZE(数据库⼤⼩)和DB_BLOCK_BUFFERS(数据库块个数)设置库⾼速缓存的⼤⼩,即为两者的成绩。
2)数据字典⾼速缓存
存储数据⽂件、表、索引、列、⽤户、权限信息和其他⼀些数据库对象的定义。把相关的数据字典信息放⼊缓存来提⾼查询的响应时间。其
⼤⼩取决于共享池的⼤⼩。
2.数据库⾼速缓存
存储了最近从数据⽂件读⼊的数据块信息或⽤户更改后需要写回数据库的数据信息。内存读取⽐磁盘读取的速度快的多。提⾼了访问速度。
这⾥的存取也采⽤了LRU(最近最少使⽤)算法。
Oracle数据库引⼊了缓冲区顾问参数(Buffer cache advisory parameter)⽤于启动和关闭统计信息。这些信息⽤于预测不同缓冲区的⼤⼩导致
的不同⾏为特性。三种状态:OFF:ON:READY
设置顾问缓存为开启状态后。可以通过动态性能视图:v$db_cache_advice查看缓冲区的建议信息
3.重做⽇志缓存
在执⾏insert、update等操作后。数据发⽣了改变。这些变化的数据在写⼊数据库⾼速缓存前会先写⼊重做⽇志缓冲区。包括变化之前的数
据。可以通过初始化参数log_buffer查看它的⼤⼩。此参数为静态参数,不能修改。
4.⼤池和java池
⼤型池(Large Pool)
在SGA中⼤型池是可选的缓冲区。它可以根据需要有管理权进⾏配置。它可以提供⼀个⼤的区以供象数据库的备份与恢复等操作。
在以下⼏种情形下会启⽤:
⼀,backup 和 restore 操作的时候
⼆,当启动UGA, I/O slaves的时候
三,设置MTS服务器的时候,⽤户信息的存放也使⽤到Large Pool
可以使⽤以下命令进⾏更改Large Pool的⼤⼩:
ALTER SYSTEM SET Large_Pool_Size = 64m;Java池⽤于编译java语⾔编写的指令。通过java_pool_size查看和修改⼤⼩。⼤⼩由数据库在SGA⾃动分配和管理。所以查看的时候值为0;
Oracle的连接和会话
连接 (connection)与会话 (session)这两个概念均与⽤户进程 (user process)紧密相关,但⼆者⼜具有不同的含义。
连接 :⽤户进程和 Oracle 实例间的通信通道(communication pathway)。这个通信通道是通过进程间的通信机制(interprocesscommunication mechanisms)(在同⼀个计算机上运⾏⽤户进程和 Oracle 进程)或⽹络软件(network software)(当数据库应⽤程序与 Oracle 服
务器运⾏在不同的计算机上时,就需要通过⽹络来通信)建⽴的。
会话 :⽤户通过⽤户进程与 Oracle 实例建⽴的连接[此处连接与上⽂中的连接含义不同 ,主要指⽤户和数据库间的联系 ]。例如,当⽤户启
动 SQL*Plus 时必须提供有效的⽤户名和密码,之后 Oracle 为此⽤户建⽴⼀个会话。从⽤户开始连接到⽤户断开连接(或退出数据库应⽤程
序)期间,会话⼀直持续。
Oracle 数据库中的同⼀个⽤户可以同时创建多个会话。例如,⽤户名/密码为的SCOTT/TIGER ⽤户可以多次连接到同⼀个 Oracle 实例。
当系统没有运⾏在共享服务模式下时,Oracle 为每个⽤户会话创建⼀个服务进程(server process)。⽽当系统运⾏在共享服务模式下时,多
个⽤户会话可以共享同⼀个服务进程。
⼀、Oracle的逻辑结构
Oracle的逻辑结构是⼀种层次结构。主要由:表空间、段、区和数据块等概念组成。逻辑结构是⾯向⽤户的,⽤户使⽤Oracle开发应⽤程序
使⽤的就是逻辑结构。数据库存储层次结构及其构成关系,结构对象也从数据块到表空间形成了不同层次的粒度关系。
1.数据块(Data Blocks)
数据块是Oracle最⼩的存储单位,Oracle数据存放在“块”中。⼀个块占⽤⼀定的磁盘空间。特别注意的是,这⾥的“块”是Oracle的“数据块”,
不是操作系统的“块”。
Oracle每次请求数据的时候,都是以块为单位。也就是说,Oracle每次请求的数据是块的整数倍。如果Oracle请求的数据量不到⼀
块,Oracle也会读取整个块。所以说,“块”是Oracle读写数据的最⼩单位或者最基本的单位。
块的标准⼤⼩由初始化参数DB_BLOCK_SIZE指定。具有标准⼤⼩的块称为标准块(Standard Block)。块的⼤⼩和标准块的⼤⼩不同的块叫
⾮标准块(Nonstandard Block)。
操作系统每次执⾏I/O的时候,是以操作系统的块为单位;Oracle每次执⾏I/O的时候,都是以Oracle的块为单位。
Oracle数据块⼤⼩⼀般是操作系统块的整数倍。
数据块的格式(Data Block Format)
块中存放表的数据和索引的数据,⽆论存放哪种类型的数据,块的格式都是相同的,块由块头(header/Common and Variable),表⽬录(TableDirectory),⾏⽬录(Row Directory),空余空间(Free Space)和⾏数据(Row Data)五部分组成,如下图
块头(header/Common and Variable):存放块的基本信息,如:块的物理地址,块所属的段的类型(是数据段还是索引段)。
表⽬录(Table Directory):存放表的信息,即:如果⼀些表的数据被存放在这个块中,那么,这些表的相关信息将被存放在“表⽬录”中。
⾏⽬录(Row Directory):如果块中有⾏数据存在,则,这些⾏的信息将被记录在⾏⽬录中。这些信息包括⾏的地址等。
⾏数据(Row Data):是真正存放表数据和索引数据的地⽅。这部分空间是已被数据⾏占⽤的空间。
空余空间(Free Space):空余空间是⼀个块中未使⽤的区域,这⽚区域⽤于新⾏的插⼊和已经存在的⾏的更新。
头部信息区(Overhead):我们把块头(header/Common and Variable),表⽬录(Table Directory),⾏⽬录(Row Directory)这三部分合称为头部信
息区(Overhead)。头部信息区不存放数据,它存放的整个块的信息。头部信息区的⼤⼩是可变的。⼀般来说,头部信息区的⼤⼩介于84字节(bytes)到107字节(bytes)之间。
数据块中⾃由空间的使⽤
当往数据库中插⼊(INSERT)数据的时候,块中的⾃由空间会减少;当对块中已经存在的⾏进⾏修改(UPDATE)的时候(使记录长度增加),块中