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/ ,如需转载,请注明出处,否则将追究法律责任。