ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [02]-谈谈oracle的SGA.

[02]-谈谈oracle的SGA.

原创 Linux操作系统 作者:pudexieli 时间:2013-01-23 22:15:40 0 删除 编辑

1.SGA的定义。
SGA是oracle数据启动时,操作系统分配和oracle数据库服务器的一块系统全局内存区域。
主要是用于存放数据库信息并供后台oracle数据库进程共享使用的内存区域。

如何查看内存SGA的大小:
SQL> show parameter sga_max_size;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 9456M

如何修改内存SGA的大小:
alter system set sga_max_size=1200m scope=spfile;
注意:
因为实例内存的分配是在数据库启动时进行的,所以要让修改生效,要重启数据库。
2.SGA的组成部分。
从这块内存使用上分类,主要分为6块区域。分别如下:
(01) Database buffer cache.
(02) Shared pool
(03) Large pool
(04) Java pool
(05) Redo log buffer
(06) Stream pool


3.介绍SGA的6块内存区域.
(01) Database buffer cache
     为了数据高效率的检索数据和更新数据。oracle数据库把使用频率很高的数据快块从oracle的数据库文件中放到这块内存。
     方便数据的查询和数据更新等。这样大大提高了数据的查询效率和更新效率。

     如何查看这块内存的大小:
     SQL> show parameter db_cache_size
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     db_cache_size                        big integer 6000M    
    
     这块内存的大小由db_cache_size参数决定。如何设置这个参数。
     alter system set db_cache_size=800M;

(02) Shared pool
     这块内存主要用于存放oracle的数据字典(dictionary cache)和oracle的库缓存(Library cache)以及用于并行执行消息的缓冲以及控制结构(buffer)。
    
     Library Cache包括共享SQL区(Shared SQL Areas)、PL/SQL存储过程以及控制结构。主要是PL/SQL的对象。
     任何用户都可以访问共享SQL区(我们可以通过v$sqlarea查看library cache)。
    
     Dictionary cache是数据库的参考信息、数据库结构信息和数据库中的用户信息的一组表和视图的集合.
     我们常见的V$视图、DBA_视图都属于数据字典。在SQL语句解析的过程中,Oracle首先需要访问这些数据字典.
     在SQL Trace中,我们发现recursive calls,就是数据字典的访问就被统计为回调。

     因为Oracle对数据字典访问的很频繁,因此内存中有两处地方被专门用于存放数据字典
     一个地方就是数据字典缓存(Data Dictionary Cache)。数据字典缓存也被称为行缓存(Row Cache)。
     因为它是以记录行为单元存储数据的。而不像Buffer Cache是以数据块为单元存储数据。
     内存中另外一个存储数据字典的地方是库缓存。Oracle用户都可以访问这两个地方以获取数据字典信息。
    
     共享池的大小由shared_pool_size 决定,通过v$sgastat视图统计
     如何查看shared pool的大小:
     show parameter shared_pool_size
     如何修改shared pool的大小:
     alter system set shared_pool_size=200m;
    
     SQL> show parameter shared_pool_size
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     shared_pool_size                     big integer 2000M    

(03) large pool
     主要是为了大数据块对应大块内存的分配。提高数据的备份恢复等操作。oracle大数据块的缓冲区。这个就是large pool.
     是当然了,这个区域是可以选择的,主要用于一些大型的进程的操作。
     如Oracle的备份恢复操作、IO服务器进程等。
     如何查询large pool的大小。
     SQL> show parameter LARGE_POOL_SIZE;
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     large_pool_size                      big integer 512M

(04) Java pool
     顾名思义,就是为Java 程序保留的。为数据库中运行的JVM分配的固定内存。当然了,如果不用Java程序没有必要改变该缓冲区的默认大小。
     SQL> show parameter java_pool_size;
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     java_pool_size                       big integer 160M

  
(05) Redo log buffer
    对数据库的任何修改都按顺序被记录在这个缓存中,然后由LGWR进程将它写入磁盘。
    这块内存大小由LOG_BUFFER决定
    如何查看这块内存?
    show parameters log_buffer;
    
    
(06) Stream pool
    Stream pool 是一个新的SGA结构,从Oracle 10g开始才增加的。
    Stream本身就是一个新的数据库特性.它设计为一个数据库共享/复制工具,这是Oracle在数据复制方面发展的方向。
    流池(如果没有配置流池,则是共享池中至多10%的空间)会用于缓存流进程在数据库间移动/复制数据时使用的队列消息。
    流池只对使用了流数据库特性的系统是重要的。在这些环境中,必须设置流池,以避免因为这个特性从共享池“窃取”10%的空间。
   
上面是我对SGA的6块内存的理解。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/179916/viewspace-753170/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2011-07-28

  • 博文量
    4
  • 访问量
    1704