【转】Oracle基础结构认知——oracle内存结构 礼记八目 2017-12-15 20:31:27
oracle的数据库实例是一组后台进程和内存结构组成的,而内存结构由系统全局区(system global area)和程序全局区(program global area)组成。
#修改SGA和PGA的配置文件,通常在/../oracle/admin/spfile/init.ora中的sgz_max_size=64M、sga_target=64M、pga_aggregate_target 参数,或在sqlplus里Alter system set sga_max_size=64M scope=spfile; 修改后重启数据库和服务生效。
系统全局区(SGA):Oracle 系统用于存放系统信息的一块存储区域,用户进程和Oracle后台进程都可以使用SGA。
SGA:database buffer cache(数据库高速缓存区),redolog buffer cache(重做日志高速缓存区),大的共享池(java pool,large pool),共享池(library cache[库缓存区],data dictionary cache[数据字典缓存区]),固定SGA(不可以设置修改,oracle之初自动创建的);
1.数据高速缓冲区(Data Buffer Cache)
在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。oracle每执行一个查询必须从磁盘调用数据DBSGA的存在,数据库用于调用的访问数据一般存在DBSGA。长期访问的代码表存在于保持缓存池长期存于内存并不释放,频繁访问的大表存在于再生缓存池。
数据高速缓存区包括三个类型:
(1).脏的区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。
(2).自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块的存储信息写入该区。
(3).保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用数据访问的区。
2. 重做日志缓冲区(Rado Log Buffer)
任何事务(Transaction)在记录到重做日志(恢复工作需要使用联机重做日志)之前都必须首先放到重做日志缓冲区(Redo Log Buffer)中,然后由日志写入进程(LGWR)定期将此缓冲区的内容写入重做日志文件(redolog file)中。
3. 共享池(Shared Pool)
共享池是SGA保留的区,用于存储如SQL、PL/SQL存储过程及包、数据字典、锁、字符集信息、安全属性等。共享池包含有:
(1).库高速缓存(Library Cache):共享SQL区(保留SQL解释版本),PL/SQL区(保留PLSQL的函数和过程及包)
(2).字典高速缓冲区(Dictionary Cache):数据字典,校验表名,列名,锁,字符集信息,安全属性等
*****查看SGA*****
通过sqlplus工具,键入:show parameter SGA 或 select * from v$SGA; 。SGA=fixed size+variable size+database buffers+redo buffers
查看oracle的SGA
4. 大的共享池:在SGA中大池是可选的缓冲区。它可以根据需要有管理权进行配置。它可以提供一个大的区以供对象数据库的备份与恢复等操作。
程序全局区:(PGA)是Oracle使用的内存区域,该区同一时间只能被一个进程存放数据和控制,用于存放会话变量及内部数组等;在专用服务模式(dedicated server configuration)下,每个只处理一个用户进程的请求。在共享服务模式(shared server configuration)下,大量用户可以共享几个服务进程,通过减少服务进程数量达到有效利用系统资源的目的。
例:用户访问进程与服务进程的会话。
****查看PGA****
show parameter pga ;
查看oracle的PGA