科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Oracle体系结构:内存结构和进程结构(二)

Oracle体系结构:内存结构和进程结构(二)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

占服务器中与在共享服务器中所处 的内存区域是不同的。 2-3:排序区,大池,Java池 排序区(Sort Area)为有排序要求的SQL语句提供内存空间。系统使用专用的内存区 域进行数据排序,这部分空间就是排序区。

作者:中国IT实验室 来源:中国IT实验室 2007年9月16日

关键字: 体系结构 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件

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

  2-1-3:共享池(Share Pool)
    共享池是对SQL,PL/SQL程序进行语法分析,编译,执行的内存区域。
    它包含三个部分:(都不可单独定义大小,必须通过share pool间接定义)。
    •库缓冲区(Library Cache)包含SQL,PL/SQL语句的分析码,执行计划。
    •数据字典缓冲区(Data Dictionary Cache)表,列定义,权限。
    •用户全局区(Usr Global Area)用户MTS会话信息。
   共享池的大小可以动态修改:
    ======================================
    SQL> show parameter shared_pool_size
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------
    __shared_pool_size                   big integer 80M
    shared_pool_size                     big integer 80M
    
    SQL> alter system set shared_pool_size=78m 
    System altered.
    ======================================
    #上面的__shared_pool_size一行奇怪?

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

 


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


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

   大池(Large Pool)用于数据库备份工具--恢复管理器(RMAN:Recovery Manager)。
  Large Pool的大小由large_pool_size确定,可用下面语句查询和修改:
  =========================================
  SQL> show parameter large_pool_size
  NAME                  TYPE        VALUE
  -----------------   ----------- -------
  large_pool_size     big integer      8M

  SQL> alter system set large_pool_size=7m;
  System altered. 
  =========================================
   
   Java池主要用于Java语言开发,一般来说不低于20M。其大小由java_pool_size来
  确定,可以动态调整。

 2-4:Oracle自动共享内存管理(Automatic Shared Memory(SGA) Management)
  在Oracle 8i/9i中数据库管理员必须手动调整SGA各区的各个参数取值,每个区要根据
 负荷轻重分别设置,如果设置不当,比如当某个区负荷增大时,没有调整该区内存大小,则
 可能出现ORA-4031:unable to allocate ...bytes of shared memory错误。
  在Oracle 10g中,将参数STATISTICS_LEVEL设置为TYPICAL/ALL,使用SGA_TARGET指
 定SGA区总大小,数据库会根据需要在各个组件之间自动分配内存大小。
 下面是系统自动调整的区域:
  •固定SGA区及其他•共享池•数据缓冲区• Java池•大池。
  注意:如果不设置SGA_TARGET,则自动共享内存管理功能被禁止。
  ==========================================
  SQL> show parameter statistics_level
  NAME                     TYPE        VALUE
  --------------------- ----------- ------------
  statistics_level      string      TYPICAL
  
  SQL> alter system set statistics_level=all;
  System altered.

  #typical和all有什么区别?
  
  SQL> alter system set statistics_level=typical;
  System altered.

  SQL> show parameter sga_target
  NAME            TYPE        VALUE
  ------------- ----------- ----------
  sga_target    big integer 0

  SQL> alter system set sga_target=170m;
  alter 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;
  System altered.

  #不过后来又发现sga_target的值变成了140M? 下面是语句执行情况。
  SQL> show parameter sga_target
  NAME          TYPE        VALUE
  ------------- ----------- -------
  sga_target    big integer 140M
  
  SQL> alter system set sga_target=0;
  System altered.

  SQL> show parameter sga_target
  NAME                                 TYPE        VALUE
  ------------------------------------ ----------- ------
  sga_target                           big integer 0

  #改为20M
  SQL> alter system set sga_target=20m;
  System altered.

  #显示的是140M
  SQL> show parameter sga_target
  NAME                                 TYPE        VALUE
  ------------------------------------ ----------- ------
  sga_target                           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
  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 value 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的服务时启动用户进程(比如启动SQLPlus时)。
  •用户进程首先必须建立一个连接。
  •用户不能直接与Oracle服务器,必须通过服务器进程交互。
  •服务器进程是用户进程与服务器交互的桥梁,它可以与Oracle Server直接交互。
  •服务器进程可以有共享和独占两种形式。
               
 


 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章