Oracle的内存结构与进程结构_第1页
Oracle的内存结构与进程结构_第2页
Oracle的内存结构与进程结构_第3页
Oracle的内存结构与进程结构_第4页
Oracle的内存结构与进程结构_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 1:Oracle实例(Instance)           在一个服务器中,每一个运行的Oracle数据库都与一个数据库实例相联系,实例是我们 访问数据库的手段。  实例在操作系统中用ORACLE_SID来标识,在Oracle中用参数INSTANCE_NAME来标识, 它们两个的值是相同的。数据库启动时,系统首先在服务器内存中分配系统全局区(SGA), 构成了Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了Or

2、acle的 进程结构,内存区域和后台进程合称为一个Oracle实例。                    数据库与实例之间是1对1/n的关系,在非并行的数据库系统中每个Oracle数据库与一个 实例相对应;在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个 实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。在任何 情况下,每

3、个实例都只可以对应一个数据库。 2:Oracle 10g动态内存管理  内存是影响数据库性能的重要因素,Oracle8i使用静态内存管理,Oracle 10g使用动态 内存管理。所谓静态内存管理,就是在数据库系统中,无论是否有用户连接,也无论并发用 量大小,只要数据库服务在运行,就会分配固定大小的内存;动态内存管理允许在数据库服 务运行时对内存的大小进行修改,读取大数据块时使用大内存,小数据块时使用小内存,读 取标准内存块时使用标准内存设置。  按照系统对内存使用方法的不同,Oracle数据库的内存可以分

4、为以下几个部分:  系统全局区:SGA(System Global Area)  程序全局区:PGA(Programe Global Area)  排序池:(Sort Area)  大池:(Large Pool)  Java池:(Java Pool) 2-1:系统全局区SGA(System Global Area)   SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信  息。如果多个用户连接到同一个数据库实例

5、,在实例的SGA中,数据可以被多个用户共享。  当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。  SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。  SGA的有关信息可以通过下面的语句查询,sga_max_size的大小是不可以动态调整的。   =   SQL> show parameter sga   NAME      &#

6、160;                          TYPE        VALUE   - - -   loc您正在看的Oracle是:Oracle的内存结构和进程结构。 k_sga  &

7、#160;                          boolean     FALSE   pre_page_sga             

8、;            boolean     FALSE   sga_max_size                         big integer 164M

9、0;  sga_target                           big integer 0      SQL> alter system set sga_max_size=100m;   alter sys

10、tem set sga_max_size=100m                 *   ERROR at line 1:   ORA-02095: specified initialization parameter cannot be modified   =     系统全局区按作用不同可以分为:&#

11、160;  数据缓冲区   日志缓冲区   共享池  2-1-1:数据缓冲区(Database Buffer Cache)    如果每次执行一个操作时,Oracle都必须从磁盘读取所有数据块并在改变它之后   又必须把每一块写入磁盘,显然效率会非常低。数据缓冲区存放需要经常访问的数据,   供所有用户使用。修改数据时,首先从数据文件中取出数据,存储在数据缓冲区中,  

12、0;修改/插入数据也存储在缓冲区中,commit或DBWR(下面有详细介绍)进程的其他条   件引发时,数据被写入数据文件。    数据缓冲区的大小是可以动态调整的,但是不能超过sga_max_size的限制。   =   SQL> show parameter db_cache_size   NAME           

13、;                      TYPE        VALUE   - - -   db_cache_size           

14、             big integer 24M      SQL> alter system set db_cache_size=128m;   alter system set db_cache_size=128m   *   ERROR at line 1:   ORA-0209

15、7: parameter cannot be modified because specified value is invalid   ORA-00384: Insuffic您正在看的Oracle是:Oracle的内存结构和进程结构。 ient memory to grow cache    SQL> alter system set db_cache_size=20m;   System altered.      SQL> sh

16、ow parameter db_cache_size;   NAME                                 TYPE        VALUE 

17、  - - -   db_cache_size                        big integer 20M      #此处我仅增加了1M都不行?   SQL> alter system set db_ca

18、che_size=25m;   alter system set db_cache_size=25m   *   ERROR at line 1:   ORA-02097: parameter cannot be modified because specified value is invalid   ORA-00384: Insufficient memory to grow cache   #修改显示格式,方便

19、查看。   SQL> column name format a40 wrap   SQL> column value format a20 wrap      #下面语句可以用来查看内存空间分配情况,注意SGA各区大小总和。   SQL> select name,value from v$parameter where name like '%size' and value <> '0'

20、;      #先将Java_pool_size调小,然后再修改db_cache_size   SQL> show parameter Java_pool_size;   NAME                        

21、60;        TYPE        VALUE   - - -   Java_pool_size                       big integer 48

22、MSQL> alter system set Java_pool_size=20m;   System altered.    SQL> alter system set Java_pool_size=30m;   System altered.   #上面说明SGA中各区大小总和不能超过sga_max_size。   =    数据缓冲区的大小对数据库的存区速度有直接影响,多用户时尤为明显。有

23、些应   用对速度要求很高,一般要求数据缓冲区的命中率在90%以上。    下面给出一种计算数据缓冲区命中率的方法:    使用数据字典v$sysstat    =    SQL> select name, value from v$sysstat         2  where name in('session

24、 logical reads',         3  'physical reads',         4  'physical reads direct',         5  'physical reads direct (lob)')    NAME&

25、#160;                             VALUE    - -    session logical reads        &

26、#160;      895243    physical reads                       14992    physical reads direct      &

27、#160;            34    physical reads direct (lob)              0    =    命中率=1-(14992-34-0)/895243   

28、60;可以让Oracle给出数据缓冲区大小的建议:    =    SQL> alter system set db_cache_advice=on;#打开该功能    System altered.    SQL> alter system set db_cache_advice=off;#关闭该功能    System altered.    

29、;=2-1-2:日志缓冲区(Log Buffer Cache)    日志缓冲区用来存储数据库的修改信息。该区对数据库性能的影响很小,有关日   志后面还会有详细的介绍。    查询日志缓冲区大小:SQL> show parameter log_buffer   NAME            TYPE   &#

30、160;      VALUE   -     -  -   log_buffer     integer       262144    2-1-3:共享池(Share Pool)    共享池是对SQL,PL/SQL程序进行语法分析,编译,执行的内存区域。 

31、;   它包含三个部分:(都不可单独定义大小,必须通过share pool间接定义)。    库缓冲区(Library Cache)包含SQL,PL/SQL语句的分析码,执行计划。    数据字典缓冲区(Data Dictionary Cache)表,列定义,权限。    用户全局区(Usr Global Area)用户MTS会话信息。   共享池的大小可以动态修改:    =

32、    SQL> show parameter shared_pool_size    NAME                                 TYPE  

33、      VALUE    - - -    _shared_pool_size                   big integer 80M    shared_pool_size     

34、                big integer 80M        SQL> alter system set shared_pool_size=78m      System altered.    =    #上面的_s

35、hared_pool_size一行奇怪? 2-2:程序全局区PGA(Programe Global Area)   程序全局区是包含单个用户或服务器数据和控制信息的内存区域,它是在用户进程连  接到Oracle并创建一个会话时由Oracle自动分配的,不可共享,主要用于用户在编程存  储变量和数组。       如上图:    Stack Space是用来存储用户会话变量和数组的存储区域;  &#

36、160; User Session Data是为用户会话使用的附加存储区。     |-Session Information     |-Sort Area     |-Cursor Information      注意Session information(用户会话信息)在独占服务器中与在共享服务器中所处  的内存区域是不同的。 2-3:排序

37、区,大池,Java池   排序区(Sort Area)为有排序要求的SQL语句提供内存空间。系统使用专用的内存区  域进行数据排序,这部分空间就是排序区。在Oracle数据库中,用户数据的排序可使用  两个区域,一个是内存排序区,一个是磁盘临时段,系统优先使用内存排序区进行排序。  如果内存不够,Orcle自动使用磁盘临时表空间进行排序。为提高数据排序的速度,建议  尽量使用内存排序区,而不要使用临时段。   参数sort_area_size用来设置排序区

38、大小。(好象不能动态修改?)    大池(Large Pool)用于数据库备份工具-恢复管理器(RMAN:Recovery Manager)。  Large Pool的大小由large_pool_size确定,可用下面语句查询和修改:  =  SQL> show parameter large_pool_size  NAME             &

39、#160;    TYPE        VALUE  -   - -  large_pool_size     big integer      8M  SQL> alter system set large_pool_size=7m;  System altered.  

40、0;=      Java池主要用于Java语言开发,一般来说不低于20M。其大小由Java_pool_size来  确定,可以动态调整。 2-4:Oracle自动共享内存管理(Automatic Shared Memory(SGA) Management)  在Oracle 8i/9i中数据库管理员必须手动调整SGA各区的各个参数取值,每个区要根据 负荷轻重分别设置,如果设置不当,比如当某个区负荷增大时,没有调整该区内存大小,则 可能出现ORA-4031:unab

41、le to allocate .bytes of shared memory错误。  在Oracle 10g中,将参数STATISTICS_LEVEL设置为TYPICALALL,使用SGA_TARGET指 定SGA区总大小,数据库会根据需要在各个组件之间自动分配内存大小。 下面是系统自动调整的区域:  固定SGA区及其他共享池数据缓冲区 Java池大池。  注意:如果不设置SGA_TARGET,则自动共享内存管理功能被禁止。  =  SQL> show par

42、ameter statistics_level  NAME                     TYPE        VALUE  - - -  statistics_level      string 

43、     TYPICAL    SQL> alter system set statistics_level=all;  System altered.  #typical和all有什么区别?    SQL> alter system set statistics_level=typical;<BR< p>>  System altered.   SQL>

44、 show parameter sga_target  NAME            TYPE        VALUE  - - -  sga_target    big integer 0  SQL> alter system set sga_target=170m;  alt

45、er system set sga_target=170m  *  ERROR at line 1:  ORA-02097: parameter cannot be modified because specified value is invalid  ORA-00823: Specified value of sga_target greater than sga_max_size  SQL> alter system set sga_target=20m;  Sy

46、stem altered.  #不过后来又发现sga_target的值变成了140M? 下面是语句执行情况。  SQL> show parameter sga_target  NAME          TYPE        VALUE  - - -  sga_target    big intege

47、r 140M    SQL> alter system set sga_target=0;  System altered.  SQL> show parameter sga_target  NAME                        

48、         TYPE        VALUE  - - -  sga_target                           big

49、 integer 0  #改为20M  SQL> alter system set sga_target=20m;  System altered.  #显示的是140M  SQL> show parameter sga_target  NAME                  

50、60;              TYPE        VALUE  - - -  sga_target                     &

51、#160;&nbsp;    big integer 140M   #不可缩减?  SQL> alter system set sga_target=130m;  alter system set sga_target=130m  *  ERROR at line 1:  ORA-02097: parameter cannot be modified because specified value is invalid &

52、#160;ORA-00827: could not shrink sga_target to specified value    #不可增加  SQL> alter system set sga_target=141m;  alter system set sga_target=141m  *  ERROR at line 1:  ORA-02097: parameter cannot be modified because specified v

53、alue is invalid  ORA-00823: Specified value of sga_target greater than sga_max_size  3:Oracle实例的进程结构(Process Structure) Oracle包含三类进程: 用户进程(User Process) 服务器进程(Server Process) 后台进程(Background Process)  3-1:用户进程和服务器进程  当数据库用户请求连接到Oracle的服务时启动

54、用户进程(比如启动SQLPlus时)。  用户进程首先必须建立一个连接。  用户不能直接与Oracle服务器,必须通过服务器进程交互。  服务器进程是用户进程与服务器交互的桥梁,它可以与Oracle Server直接交互。  服务器进程可以有共享和独占两种形式。                3-2:后台进程(Backgroung Process) 

55、; 数据库的物理结构与内存结构之间的交互要通过后台进程来完成。数据库的后台进程包 含两类,一类是必须的,一类是可选的:  Mandatory background processes   |-DBWn(Database Writer):数据写入   |-PMON(Process Moniter):进程监控   |-LGWR(Log Writer):日志写入   |-SMON(System Moniter):系统监控  

56、; |-RECO(Recovery):恢复   |-CKPT(Chekpoint):检查点  Optional background processes   |-ARCn(Archiver):归档   |-LCKn(Lock):锁   |-Dnnn(Dispatcher):调度   |-.  可以用下面的语句查看正在运行的后台进程:  =SQL> select * fro

57、m v$bgprocess where paddr<>'00'  PADDR      PSERIAL# NAME  DESCRIPTION                             - - - -

58、  6B0ED064          1 PMON  process cleanup                         6B0ED4E4       &#

59、160;  1 MMAN  Memory Manager                          6B0ED964          1 DBW0  db writer process 0  

60、0;                  6B0EDDE4          1 LGWR  Redo etc.                  &#

61、160;            6B0EE264          1 CKPT  checkpoint                        

62、;      6B0EE6E4          1 SMON  System Monitor Process                  6B0EEB64          1 RE

63、CO  distributed recovery                    6B0EEFE4          1 CJQ0  Job Queue Coordinator                   6B0F01E4          1 QMNC  AQ Coordinator                 

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论