Chinaunix首页 | 论坛 | 博客
  • 博客访问: 165966
  • 博文数量: 72
  • 博客积分: 1426
  • 博客等级: 上尉
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-02 13:40
个人简介

一个做了几年技术的老白菜

文章分类

全部博文(72)

文章存档

2011年(4)

2010年(13)

2009年(55)

我的朋友

分类: Oracle

2009-05-17 19:16:26

第二节:Oracle实例

2.2Oracle Server

一个运行的数据库就是一个Oracle Server
Oracle Server
由实例(Instance)和数据库(Database)组成。

1.实例
    
实例由内存结构(memory structure)和后台进程(Background Process)组成。
    
一个实例可以安装(mount)和打开(open)一个数据库,负责数据库的相应操作管理和用户管理。
    Instance
有一些后台进程,如PMON, SMON, DBWR, LGWR, CKPT, Others

     Instance是操作database的一种手段!一个instance实例,只能操作一个database,但是一个database可以被多个实例操作

2.数据库

数据库是一系列物理文件(数据文件、控制文件、重做日志文件)的集合和与之对应的逻辑结构(块、段、表空间)

图一:Oracle server

2.3Oracle内存结构(Memory Structure)

     内存是用来保存指令代码和缓存数据的。要运行一个软件程序,必须先要在内存中为其指令代码和缓存数据申请,划分出一个区域,再将其从磁盘上读入,放置到内存,然后才能执行。oracle dbms是一个应用程序,所以它的执行也不例外,需要放置到内存中才能执行。
    
内存是影响数据库性能的重要因素,Oracle8i使用静态内存管理,Oracle 10g使用动态 内存管理。所谓静态内存管理,就是在数据库系统中,无论是否有用户连接,也无论并发用量大小,只要数据库服务在运行,就会分配固定大小的内存;动态内存管理允许在数据库服务运行时对内存的大小进行修改,读取大数据块时使用大内存,小数据块时使用小内存,读取标准内存块时使用标准内存设置。

内存结构是oracle体系结构中最为重要的一部分,内存也是影响数据库性能的第一因素。内存的大小,速度直接影响数据库的运行速度。按照系统对内存使用方法的不同,Oracle数据库的内存可以分为以下几个部分:
  •
系统全局区:SGASystem Global Area
  •
程序全局区:PGAPrograme Global Area
  •
排序池:(Sort Area
  •
大池:(Large Pool
  •Java
池:(Java Pool

图二:Oracle内存结构
2.3.1
SGA: System Global Area 系统全局区
      SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信息。如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享。
    
SGA是指系统全局区,是一块用于加载数据,对象并保存运行状态和数据库控制信息的一块内存区域,当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。
     SGA
是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。
    SGA
区是例程内存结构的主要组成部分,每个例程都只有一个sga区,当多个用户同时连接到一个例程时,所有的用户进程,服务进程都可以共享使用sga区。它是不同用户进程与服务进程进行通信的中心,数据库的各种操作主要都再sga区中进行,所以将其称为系统全局区。

当数据库启动到nomount状态时,sga区已经分配,同时启动后台进程。SGA的有关信息可以通过下面的语句查询,sga_max_size的大小是不可以动态调整的。
   =====================================
   SQL> show parameter sga
   NAME                                 TYPE        VALUE
   ------------------------------------ ----------- --------
   lock_sga                             boolean     FALSE
   pre_page_sga                         boolean     FALSE
   sga_max_size                         big integer 164M
   sga_target                           big integer 0

    SQL> alter system set sga_max_size=100m;
   alter system set sga_max_size=100m
                 *
   ERROR at line 1:
   ORA-02095: specified initialization parameter cannot be modified
   ====================================== 

 SGA按作用不同,可以分为三部分:
Shared pool(
共享池
Database buffer cache(
数据缓冲区)
Redo log buffer cache(
归档日志缓冲区)   

   SGA各个组成部分的大小可以改变,只要它们的大小总和加起来不超过SGA_MAX_SIZE
一、数据缓冲区(Database Buffer Cache
      
如果每次执行一个操作时,Oracle都必须从磁盘读取所有数据块并在改变它之后
又必须把每一块写入磁盘,显然效率会非常低。数据缓冲区存放需要经常访问的数据,供所有用户使用。修改数据时,首先从数据文件中取出数据,存储在数据缓冲区中,修改/插入数据也存储在缓冲区中,commitDBWR(下面有详细介绍)进程的其他条件引发时,数据被写入数据文件。
    
数据缓冲区的大小是可以动态调整的,但是不能超过sga_max_size的限制。
  
数据缓冲区包括:DB_CACHE_SIZE(DB_BLOCK_SIZE默认指定)DB_KEEP_CACHE_SIZEDB_RECYCLE_CACHE_SIZE
  
数据缓冲区可以动态改变,命令为:ALTER SYSTEM SET DB_CACHE_SIZE = 96M; OracleDB_CACHE_ADVICE会为用户建议数据缓冲区的大小。
二、日志缓冲区(Log Buffer Cache
    
日志缓冲区用来存储的修改信息。该区对数据库性能的影响很小。
  
Redo Log Buffer Cache所记录的是database中有什么样的用户,在做什么样的改变,改变的旧值、改变后的新值。
三、共享池(Share Pool
    
共享池是对SQLPL/SQL程序进行语法分析,编译,执行的内存区域。
    
它包含三个部分:(都不可单独定义大小,必须通过share pool间接定义)
   1.
库缓冲区(Library Cache)包含SQLPL/SQL语句的分析码,执行计划。
   
Library Cache 存储的是最近使用的SQLPL/SQL语句,使用的算法是LRU. 当发现用户的命令时,先在Library Cache里边查找是否有匹配的SQL语句或者是PL/SQL语句。Library Cache以及Data dictionary cache的大小不可以直接定义,它的大小只能借助于Shared Pool
2.
数据字典缓冲区(Data Dictionary Cache)表,列定义,权限。
   
Data dictionary cache里边存放的是数据文件、表、索引、索引、columns、用户名、权限以及其他的数据对象。例如:select * from authors // 首先判断authors是否存在,再判断*是否存在,再判断语法是否正确,在判断用户是否有此权限。
3.
用户全局区(Usr Global Area)用户MTS会话信息。
   
共享池的大小可以动态修改:
2.3.2
PGAProcess Global Area程序全局区
    PGA
是在用户进程连接到ORACLE实例并创建一个会话时自动分配的,保存每个与Oracle 数据库连接的用户进程所需的信息,PGA为非共享区,一个用户会话一个PGA,当一个用户会话结束,PGA释放。

 程序全局区是包含单个用户或服务器数据和控制信息的内存区域,它是在用户进程连接到Oracle并创建一个会话时由Oracle自动分配的,不可共享,主要用于用户在编程存储变量和数组。

 


   
如上图:
    •Stack Space
是用来存储用户会话变量和数组的存储区域;
    •User Session Data
是为用户会话使用的附加存储区。
     |--Session Information
     |--Sort Area
     |--Cursor Information   
   
注意Session information(用户会话信息)在独占服务器中与在共享服务器中所处
  
的内存区域是不同的。


2.4
Oracle实例的进程结构(Process Structure
Oracle
包含三类进程:
 •
用户进程(User Process
 •
服务器进程(Server Process
 •
后台进程(Background Process

用户进程和服务器进程
  
当数据库用户请求连接到Oracle的服务时启动用户进程(比如启动SQLPlus时)。
  •
用户进程首先必须建立一个连接。
  •
用户不能直接与Oracle服务器,必须通过服务器进程交互。
  •
服务器进程是用户进程与服务器交互的桥梁,它可以与Oracle Server直接交互。
  •
服务器进程可以有共享和独占两种形式。

2.4.1.
用户进程(User process)和服务器进程(Server process)
    Oracle
的用户进程(User process)并不可以直接操作我们的instance或者是database,而是当我们在产生一个User process时,Oracle服务器会为我们产生一个Server process, 由此Server process去执行User process所发出的command!

启动一个SQL*Plus实际上就是启动了一个用户进程。在启动一个用户进程后,通过命令:conn ....建立与数据库的连接!此时oracle会为我们生成一个 server process服务进程,它在以后代替我们的用户进程,来执行用户进行所发出的command! server process完成与Instance的连接,当一个Instance被激活时,后台的database也就变得可用了。

2.4.2、后台Backgroung Process
   
后台进程为所有数据库用户异步完成各种任务,数据库的物理结构与内存结构之间的交互要通过后台进程来完成。数据库的后台进程包含两类,一类是必须的,一类是可选的:
  •Mandatory background processes

   |--DBWnDatabase Writer):数据写入
   |--PMON
Process Moniter):进程监控
   |--LGWR
Log Writer):日志写入
   |--SMON
System Moniter):系统监控
   |--RECO
Recovery):恢复
   |--CKPT
Chekpoint):检查点
  •Optional background processes
   |--ARCn
Archiver):归档
   |--LCKn
Lock):锁
   |--Dnnn
Dispatcher):调度

1DBWRDatabase Writer,数据写入进程)
     
将数据缓冲区的数据写入数据文件,是负责数据缓冲区管理的一个后台进程。
     
当数据缓冲区中的一数据被修改后,就标记为dirtyDBWR进程将数据缓冲区中” 数据写入数据文件,保持数据缓冲区的干净。由于数据缓冲区的数据被用户修改并占用,空闲数据缓冲区会不断减少,当用户进程要从磁盘读取数据块到数据缓冲区却无法找到足够的空闲数据缓冲区时,DBWR将数据缓冲区内容写入磁盘,使用户进程总可以得到足够的空闲数据缓冲区。
  DBWR
的作用:
  •
管理数据缓冲区,以便用户进程总能够找到足够的空闲缓冲区。
  •
将所有修改后的缓冲区数据写入数据文件。
  •
使用LRU(最近最少使用)算法保持缓冲区数据是最近经常使用的。
  •
通过延迟写来优化磁盘I/0读写。

 

 2LGWRLog Writer,日志写入进程)
   
将日志数据从日志缓冲区写入磁盘组。数据库在运行时,如果对数据进行修改则产生日志信息,日志信息首先产生于日志缓冲区。当日志达到一定数量时,由LGWR将日志数据写入到日志文件组,再经过日志切换,由归档进程(ARCH)将日志数据写入归档进程(前提是数据库运行在归档模式下)。数据库遵循写日志优先原则,即在写数据之前先写日志。


  3.ARCH
Archiver,归档进程)
  Oracle
数据库有两种运行模式,归档(ARCHIVELOG),非归档(NOARCHIVELOG)模式。
     
以非归档模式运行时日志在切换时被直接覆盖,不产生归档日志,这是数据库默认的运行模式。数据库运行在归档模式时,在日志切换之前,由ARCH进程将日志信息写入磁盘,也就是自动备份在线日志。
   Oracle
数据库的Redo文件数量是有限的,所以Oracle以循环的方式向它们中写入。它顺序写满每一个Redo文件,当达到最后一个时,再循环回去开始填写第一个Redo文件。如果为了能恢复数据库而想保存日志文件,那么在它们被重新使用之前需要对其进行备份,归档进程管理此工作。

4.CKPTCheck Point,检查点进程)
  
运行CKPT时,系统对全部数据文件及控制文件文件头的同步信号进行修改,以保证数据
 
库的同步。检查点出现在以下情况:
  |--
在每个日志切换时产生。
  |--
上一个检验点之后又经过了指定时间。
  |--
从上一个检验点之后,当预定义数量的日志块被写入磁盘之后。
  |--
数据库关闭。
  |--DBA
强制产生。
  |--
当表空间设置为OFFLINE时。

5.SMONSystem Moniter,系统监控进程)
  SMON
在实例启动时执行实例恢复,并负责清理不再使用的临时段。

6.PMONProcess Monitor,进程监控)
  PMON
在用户进程出现故障时进行恢复,负责清理内存区域和释放该进程所使用的资源。

7.RECORecovery,恢复进程)
  RECO
用于分布式数据库维持在分布式环境中的数据的一致性。

8.LCKnLock,锁进程,n=number
  
在并行服务器中用于多个实例间的封锁。

9.DnnnDispatcher,调度进程,n=number
    Dnnn
存在于多线程服务器体系结构中,负责将用户进程连接到服务器进程,再把结果返 回给用户进程。

阅读(709) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~