系 统全局区域 System global area(SGA),SGA 是一个读/写存储区,与 oracle 后台进程一起,构成了一个数据库实例。所有代表用户执行的服务器进程都可以读取实例 SGA 中的信息。在数据库操作期间,多个进程将写入 SGA。熟悉这个内存区域的每一个功能,能让 DBA 的工作更加轻松!来扒一扒吧。
SGA 实例
SGA 组件
SQL> SELECT name,bytes FROM v$sgainfo; NAME BYTES -------------------------------- ---------- Fixed SGA Size 2257800 --> 固定区域,存储 SGA 各个组件的信息,不能修改大小; Redo Buffers 2392064 --> 日志缓冲区; Buffer Cache Size 339738624 --> 数据库缓冲区高速缓存; Shared Pool Size 138412032 --> 共享池; Large Pool Size 8388608 --> 大型池; Java Pool Size 4194304 --> Java池; Streams Pool Size 0 --> 流池。 Shared IO Pool Size 0 Granule Size 4194304 Maximum SGA Size 830930944 Startup overhead in Shared Pool 75056392 Free SGA Memory Available 335544320 SQL> SELECT * FROM v$sgastat WHERE name='free memory'; POOL NAME BYTES ------------ -------------------------- ---------- shared pool free memory 16207920 large pool free memory 7897088 java pool free memory 4194304
(SGA由多个内存组件组成,这些内存组件是用于满足特定类别的内存分配请求的内存池。除重做日志缓冲区以外的所有SGA组件都以称为颗粒的连续内存为单位分配和释放空间。)
数据库缓冲区高速缓存(Database Buffer Cache)
用于存放从数据文件读取的数据块副本的内存区域,在手动内存管理时,由初始化参数 DB_CACHE_SIZE、DB_KEEP_CACHE_SIZE、DB_CYCLE_CACHE_SIZE 控制其大小;
SQL> show parameter db_cache_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_cache_size big integer 400M SQL> show parameter db_keep_cache_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_keep_cache_size big integer 300M SQL> show parameter db_recycle_cache_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recycle_cache_size big integer 0
重做日志缓冲区(Redo Log Buffer)
重做日志缓冲区是记录数据库更改的缓冲区用于实现数据库恢复。重做条目包含DML或DDL操作对数据库所做更改操作的信息。数据库恢复时将重做条目应用到数据文件以重建丢失的更改。
SQL> show parameter log_buffer NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_buffer integer 5812224
共享池(Shared Pool)
共享池缓存各种类型的数据。如共享池存储解析的SQL、PL / SQL代码、系统参数和数据字典信息。几乎在数据库中发生的每个操作都涉及共享池。
SQL> show parameter shared_pool_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ shared_pool_size big integer 132M
大型池(Large Pool)
大池是用于分配大于适合于共享池的可选的内存区域。
SQL> show parameter large_pool_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ large_pool_size big integer 12M
Java 池(Java Pool)
Java池是存储在Java虚拟机(JVM)内的所有特定会话的Java代码和数据存储的区域。此内存包括在呼叫结束时迁移到Java会话空间的Java对象。
SQL> show parameter java_pool_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ java_pool_size big integer 12M
流池(Streams Pool)
流池存储缓冲队列的消息和用于Oracle数据流捕获过程提供存储器和应用程序。Streams Pool 由Oracle Streams独占使用。
除非专门配置它,否则 Streams Pool 的大小从零开始。池大小按照Oracle Streams的要求动态增长。
SQL> show parameter streams_pool_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ streams_pool_size big integer 12M