暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中,内存结构主要由什么组成?

DB宝 2023-12-26
119


题目部分

在Oracle中,内存结构主要由什么组成?


     





答案部分


Oracle内存结构主要分共享内存区与非共享内存区,共享内存区主要包含SGASystem Global Area,系统全局区),非共享内存区主要由PGAProgram Global Area,程序全局区)组成,如下图所示:

3-5 Oracle实例结构

(一)SGA介绍

SGASystem Global Area,系统全局区)是Oracle实例的基本组成部分,是Oracle为一个实例分配的一组共享内存缓冲区,保存着Oracle系统与所有数据库用户的共享信息,包括数据维护、SQL语句分析、Redo日志管理等。SGA是实例的主要部分,它在实例启动时分配。

SGA是动态的,由参数SGA_MAX_SIZE决定。查看当前系统的SGA可以使用的最大内存大小的命令是:SHOW PARAMETER SGA_MAX_SIZE。修改SGA大小的命令是:ALTER SYSTEM SET SGA_MAX_SIZE=1200M SCOPE=SPFILE。因为实例内存的分配是在数据库启动时进行的,所以,要让修改生效,必须重启数据库。当Oracle运行在32Linux上时,其默认SGA无法超过1.7GB

Oracle 10g中引入了ASMMAutomatic Shared Memory Management,自动共享内存管理),DBA只需设置SGA_TARGETOracle就会自动地对共享池、数据缓冲区、Redo日志缓冲区、大池、Java池和流池进行自动调配,取消自动调配的方法为设置SGA_TARGET0

需要注意的是,Oracle分配内存的单位是granule,即粒度。最小的粒度为4M设置大小不到一个粒度按一个粒度计算。在32位操作系统的平台上,粒度的最大值为16M。粒度的大小在数据库实例周期内不能被修改。按照粒度为单位分配的组件包括:Shared PoolBuffer Cache(以及不同大小块的Buffer Cache)、Redo Log BufferJava PoolStreams PoolLarge Pool。粒度的大小参考下表:

数据库版本

SGA_MAX_SIZEMEMORY_MAX_TARGET大小

粒度大小(GRANULE SIZE

9.2

<= 128MB

4MB

> 128MB

16MB

10.2

<= 1GB

4MB

> 1GB

16MB

11gR1

<= 1GB

4MB

>1Gb   <= 4GB

16MB

>4Gb   <= 16GB

64MB

>16Gb <= 64GB

256MB

> 64GB

512MB

11gR2、打了patch号为881336611gR1及其之后的版本

<= 1GB

4MB

>1GB   <= 8GB

16MB

>8GB   <= 16GB

32MB

>16GB <= 32GB

64MB

>32GB <= 64GB

128MB

>64GB <= 128GB

256MB

> 128GB

512MB

通过视图V$SGAINFO可以查询当前SGA分配的粒度大小,如下所示:

SYS@orclasm > SELECT * FROM V$SGAINFO WHERE NAME='Granule Size';

NAME                                  BYTES RES

-------------------------------- ---------- ---

Granule Size                        4194304 No

下面将对SGA的各个组成部分进行介绍。

(1)共享池(Shared Pool:缓存了各用户间可共享的各种结构,例如,缓存最近被执行的SQL语句和最近被使用的数据定义。共享池主要包括:库缓存(Library Cache)、数据字典缓存(Data Dictionary Cache)、保留池(Reserved Pool)和结果缓存(Result Cache)。

Ø 库缓存(Library Cache)是存放用户SQL命令、解析树和执行计划的区域。对于库缓存来说,具体包含以下几个部分:

共享SQL区(Shared SQL Area):保存了SQL语句文本,编译后的语法分析树及执行计划。查看共享SQL区的使用率命令为:SELECT(SUM(PINS-RELOADS))/SUM(PINS) "LIBRARY CACHE" FROM V$LIBRARYCACHE;

私有SQL区(Private SQL Area):包含当前会话的绑定信息以及运行时内存结构。每个发出SQL语句的会话,都有一个Private SQL Area。当多个用户执行相同的SQL语句,此SQL语句保存在共享SQL区。若是共享服务器模式,则Private SQL Area位于SGAShare PoolLarge Pool中。若是专用服务器模式,则Private SQL Area位于PGA中。

共享PL/SQL区(Shared PL/SQL Area):保存了分析与编译过的PL/SQL块(存储过程、函数、包、触发器和匿名PL/SQL块)。

控制结构区(Control Structure Area):保存锁等控制信息。

Ø 数据字典缓存(Data Dictionary Cache)存放数据库运行的动态信息,例如,表和列的定义,数据字典表的权限。查看数据字典缓冲区使用率的SQL为:“SELECT (SUM(GETS-GETMISSES-USAGE-FIXED))/SUM(GETS) "DATA DICTIONARY CACHE" FROM V$ROWCACHE;”。

Ø 保留池(Reserved Pool)也叫保留区域(Reserved Area),是指Shared Pool中配置的一个内存保留区域,这个保留区域用做当在普通的Shared Pool列表中的空间不能用来满足Large Request的内存分配请求而分配大块的连续内存块。当一个内存请求大于隐含参数“_SHARED_POOL_RESERVED_MIN_ALLOC”(默认:4400 bytes,如果系统经常出现ORA-04031错误,基本上都是请求大于4400的内存块,那么就可能需要增加SHARED_POOL_RESERVED_SIZE参数设置。)的值时就是一个Large Request,反之当内存请求小于“_SHARED_POOL_RESERVED_MIN_ALLOC”时就是一个Small Request。另外关于Reserved Pool还有两个参数需要关注一下,一个是SHARED_POOL_RESERVED_SIZE,另外一个是隐含参数“_SHARED_POOL_RESERVED_PCT”(默认:5%)。通过SHARED_POOL_RESERVED_SIZE可以为Reserved Pool指定一个大小,也可以通过“_SHARED_POOL_RESERVED_PCT”来为Shared Pool指定一个比例。如果这两个参数同时设置了,那么就会以“_SHARED_POOL_RESERVED_PCT”为准。参数SHARED_POOL_RESERVED_SIZE的缺省值是SHARED_POOL_SIZE5%,最小值为5000bytes,最大不得超过SHARED_POOL_SIZE50%。通过视图V$SHARED_POOL_RESERVED可以查到保留池的统计信息。其中字段REQUEST_MISSES记录了没有立即从空闲列表中得到可用的大内存段请求次数,这个值理想状态下要为0。当REQUEST_FAILURES大于0时,则需要增加SHARED_POOL_SIZESHARED_POOL_RESERVED_SIZE的空间。当REQUEST_MISS等于0,或是FREE_MEMORY大于等于SHARED_POOL_RESERVED_SIZE的空间时,则增加SHARED_POOL_RESERVED_SIZE的空间。MAX_USED_SPACE字段可以来判断保留池的大小是否合适。保留区使用Shared PoolLRU链表来管理内存块。可以通过如下的SQL语句来查询保留池的命中率(Hit Ratio),查询语句如下:

SELECT (REQUEST_MISSES / (REQUESTS + 0.0001)) * 100 "REQUEST MISSES RATIO",

        (REQUEST_FAILURES / (REQUESTS + 0.0001)) * 100 "REQUEST FAILURES RATIO"

  FROM V$SHARED_POOL_RESERVED;

以上结果应该都要小于1%,如果大于1,那么应该考虑加大SHARED_POOL_RESERVED_SIZE

Ø 结果缓存(Result Cache)是存放SQL查询结果和PL/SQL函数查询结果的区域。

共享池的大小由参数SHARED_POOL_SIZE决定。只要将初始化参数STATISTICS_LEVEL设置为TYPICAL(默认值)或ALL,就能启动对Shared Pool的建议功能,如果设置为BASIC,则关闭建议功能。使用如下的SQL语句可以查询到Oracle所建议的Shared Pool的大小:

  
 
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论