SGA大小调高,PGA不变,高速缓存命中百分比下降?

本文详细介绍如何通过调整 Oracle 数据库的系统全局区 (SGA) 参数来优化数据库性能。主要内容包括共享池、数据缓冲区及日志缓冲区的监控与调整方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 内存参数的调整内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 1、 共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句: select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache; 来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。数据库管理员还可以执行下述语句: select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache; 查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。 2、 数据缓冲区。数据库管理员可以通过下述语句: SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets','physical reads'); 来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1 - ( physical reads / (db block gets + consistent gets) )。 这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。 3、 日志缓冲区。数据库管理员可以通过执行下述语句: select name,value from v$sysstat where name in ('redo entries','redo log space requests');查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率: 申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。

 

可以通过动态性能表v$librarycache来查询从实例启动以来所有库高速缓存的活动情况 v$librarycache表中以下几列反映了库高速缓存在执行调用阶段的不命中; pins,显示在库高速缓存中执行的次数; reload,显示在执行阶段库高速缓存不命中的数目 如: select sum(pins) "请求存取数",sum(reloads) "不命中数" from v$librarycache 一般sum(reloads)/sum(pins)的值应接近于零.如果大于1%就有问题了. 通过动态性能表v$rowcache来查询数据字典高速缓存的活动 select sum(gets) "请求存取数",sum(getmisses) "不命中数" from v$rowcache 注:列gets,显示请求相应项的总数; getmisses,显示造成高速缓存不命中的数据请求数. 不命中数与总存取数的比也应当接近于0,如果大于10%,应该增加shared_pool_size的值, 来提高数据字典高速缓存可用的内存数量,减少不命中数.

 

 

sga和pga的区别

 

实例的组成:
1. 系统全局区(SGA)(system global area)
  共享池(shared pool):包括library cache、 dictionary cache。通过shared_pool_size设置。
   library cache:存放执行SQL语句的二进制文件,执行速度快。
   dictionary cache:存放系统表数据。
数据库缓冲区高速缓存(database buffer cache):存放数据文件的。 通过db_cache_size设置。
重做日志缓冲区(redo log buffer): 通过log_buffer设置。存放重做日志的。
Java Pool、Large Pool。

2. Oracle 后台进程
必须: 系统监控和进程监控进程(SMON和PMON)
数据库写进程(DBWR)、  日志写进程(LGWR)、归档进程(ARCH)、检查点(CKPT)
可选:调度进程(Dnnn)、恢复进程(RECO)、快照进程(SNPn)、锁进程(LCKn)、并行查询进程(Pnnn)
PGA(Program Global Area):用户和服务器进程

Oracle数据库的性能直接受到内存管理的影响,特别是SGA(系统全局区)和PGA(进程全局区)的分配。SGA数据库实例级别的内存区域,用于存储数据库服务器进程间共享的数据,而PGA则是单个服务器进程的私有内存区域,用于处理用户会话的数据。根据不同的业务需求,合理配置SGAPGA可以显著提升数据库性能。 参考资源链接:[oracle 内存分配和调优 总结](https://wenku.youkuaiyun.com/doc/6412b659be7fbd1778d46699?spm=1055.2569.3001.10343) 首先,SGA大小直接影响到数据库的缓存能力,包括数据块缓存(DB Buffer Cache)、重做日志缓冲区(Redo Log Buffer)、共享池(Shared Pool)、Java池(Java Pool)等。调整SGA大小时,可以使用V$SGAINFO视图来查看当前各组件的内存使用情况,并通过ALTER SYSTEM命令动态调整SGA目标大小SGA_TARGET)和各组件的大小(如SHARED_POOL_SIZE,DB_CACHE_SIZE等)。 PGA大小则主要通过PGA_AGGREGATE_TARGET参数来控制。这个参数定义了PGA内存的最大限制。PGA内存管理还可以使用自动工作区管理(Automatic Workload Repository, AWR)来进行优化,它会根据工作负载自动调整PGA内存分配。 除了直接调整参数外,数据库管理员还可以通过监视系统性能指标(如命中率、等待事件等)来评估内存分配是否合理。如果命中率较低,可能需要增加相应的SGA组件大小;如果存在PGA相关的等待事件,可能需要调整PGA_AGGREGATE_TARGET或单独调整PGA内存的某些组件(如SORT_AREA_SIZE)。 总之,调整内存分配是一个动态过程,需要根据实际的业务负载和性能监控结果来不断优化。建议深入阅读《oracle 内存分配和调优 总结》一书,书中提供了详细的配置案例和调优步骤,有助于更深入地理解内存管理机制,并实施有效的内存调优策略。 参考资源链接:[oracle 内存分配和调优 总结](https://wenku.youkuaiyun.com/doc/6412b659be7fbd1778d46699?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值