重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3550|回复: 0
打印 上一主题 下一主题

[参考文档] Oracle SGA多个部分的组成

[复制链接]
跳转到指定楼层
楼主
发表于 2018-1-11 15:16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PGA是一个服务器进程的专用的私有内存区,而SGA则是共享内存区
SGA由多个部分组成:
1、 固定SGA(Fixed SGA)
2、 块缓冲区(Db cache)
3、 重做日志缓冲区(Redo log buffer)
4、 Java池(Java pool)
5、 大池(Large pool)
6、 共享池(Shared pool)
7、 流池(Stream pool)
有如下参数控制共享池相关组件大小:
1、 JAVA_POOL_SIZE:控制Java池大小。
2、 SHARED_POOL_SIZE:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。
3、 LARGE_POOL_SIZE:控制大池大小。
4、 DB_*K_CACHE_SIZE:控制不同块大小的缓冲区大小。
5、 LOG_BUFFER:控制重做日志缓冲区大小。
6、 SGA_TARGET:10g以上控制自动SGA内存管理的总内存大小。
7、 SGA_MAX_SIZE:控制SGA可以达到的最大大小,改变需重启数据库。

SGA各组件作用
1, 固定SGA:
顾名思义,是一段不变的内存区,指向SGA中其他部分,Oracle SGA通过它找到SGA中的其他区,可以简单理解为用于管理的一段内存区。
SQL> show parameter sga;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 352M
sga_target                           big integer 0

2、块缓冲区:
查询时,Oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,Oracle SGA会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,Oracle可以通过内存缓存提高磁盘的I/O性能。
块缓冲区中有三个区域:
默认池(Default pool):所有数据默认都在这里缓存。
保持池(Keep pool):用来缓存需要多次重用的数据。
回收池(Recycle pool):用来缓存很少重用的数据。
原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。
这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。
9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。
SQL> show parameter Db cache

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
clonedb                              boolean     FALSE
db_16k_cache_size                    big integer 0
db_2k_cache_size                     big integer 0
db_32k_cache_size                    big integer 0
db_4k_cache_size                     big integer 0
db_8k_cache_size                     big integer 0
db_block_buffers                     integer     0
db_block_checking                    string      FALSE
db_block_checksum                    string      TYPICAL
db_block_size                        integer     8192
db_cache_advice                      string      ON

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_cache_size                        big integer 0
db_create_file_dest                  string
db_create_online_log_dest_1          string
db_create_online_log_dest_2          string
db_create_online_log_dest_3          string
db_create_online_log_dest_4          string
db_create_online_log_dest_5          string
db_domain                            string
db_file_multiblock_read_count        integer     23
db_file_name_convert                 string
db_files                             integer     200

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flash_cache_file                  string
db_flash_cache_size                  big integer 0
db_flashback_retention_target        integer     1440
db_keep_cache_size                   big integer 0
db_lost_write_protect                string      NONE
db_name                              string      sztech1
db_recovery_file_dest                string      /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size           big integer 4152M
db_recycle_cache_size                big integer 0
db_securefile                        string      PERMITTED

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_ultra_safe                        string      OFF
db_unique_name                       string      sztech1
db_unrecoverable_scn_tracking        boolean     TRUE
db_writer_processes                  integer     1
dbwr_io_slaves                       integer     0
rdbms_server_dn                      string
standby_archive_dest                 string      ?/dbs/arch
standby_file_management              string      MANUAL
xml_db_events                        string      enable

3、重做日志缓冲区(Redo log buffer):
数据写到重做日志文件之前在这里缓存,在以下情况中触发:
每隔3秒
缓存达到1MB或1/3满时
用户提交时
缓冲区的数据写入磁盘前

SQL> show parameter Redo log buffer

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
redo_transport_user                  string

4、Java池(Java pool):
为在数据库中运行Java代码时预备的内存区域,用JAVA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存,主要用于支持JAVA虚拟机(JVM)、流池(Streams Pool)支持流,如果没有使用javaproc,java_pool不是必须的。
SQL> show parameter java pool
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
java_jit_enabled                     boolean     TRUE
java_max_sessionspace_size           integer     0
java_pool_size                       big integer 0
java_restrict                        string      none
java_soft_sessionspace_limit         integer     0

5、大池(Large pool):
下面三种情况使用到大池:
并行执行:存放进程间的消息缓冲区
RMAN:某些情况下用于磁盘I/O缓冲区
共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)
SQL> show parameter Large_pool

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
large_pool_size                      big integer 0

6, 共享池(Shared pool)
共享池是SGA中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。SQL和PL/SQL的解释计划、代码,数据字典数据等等都在这里缓存。
需要注意的是,shared_pool_size参数在9i中控制共享池中占用最大的部分,10g以上控制共享池总大小。shared_pool_reserved_size。此参数是用来指定保留的共享池空间大小,用于满足将来的大的连续的共享池空间请求。
SQL> show parameter Shared Pool
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
max_shared_servers                   integer
shared_memory_address                integer     0
shared_pool_reserved_size            big integer 2306867
shared_pool_size                     big integer 0
shared_server_sessions               integer
shared_servers                       integer     1

7、流池(Stream pool)
9iR2以上增加了“流”技术,10g以上在SGA中增加了流池。流是用来共享和复制数据的工具。
SQL> show parameter Stream pool
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
streams_pool_size                    big integer 0


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-17 14:48 , Processed in 0.094984 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表