对oracle实例的内存(SGA和PGA)进行调整,优化数据库性能

本文介绍如何通过调整Oracle数据库的SGA和PGA内存配置来优化性能。包括共享池、缓冲区高速缓存、日志缓冲区等关键内存组件的监控与调整方法。

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

  www.grn8.com  绿吧导航网 免费广告换连接。

 

通过对oracle内存(SGA和PGA)进行调整,优化数据库性能

一、示例:

_______________________________________________________________

SGA:

    共享池:200MB           

    缓冲区高速缓存:24MB    

    大型池:9MB

    Java池:32MB

    SAG总容量:264.933

    SAG的最大大小:305.069

PGA:

    总记PGA目标:240MB      

    分配的当前PGA:8914KB

    分配的最大PGA(自启动以来)9081KB

    高速缓存命中百分比:100%

    PGA和SGA的和应小于系统内存总量前去操作系统和其他应用程序所需内存后得到的值。

_______________________________________________________________

二、名词解释:

_______________________________________________________________

SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;

     系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

     共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,

         主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)

         共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息

     缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能

     大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境

     Java池:ava Pool为Java命令的语法分析提供服务

PGA:Program Global Area是为每个连接到Oracle database的用户进程保留的内存。

_______________________________________________________________

三、分析与调整:

_______________________________________________________________

     1、系统全局域:

        SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/2到1/3,当然,如果服务器上只有oracle的话,

可以分配的更大一些,如果还有其他服务,如IIS等,那就要分的小一些。

     1、共享池:

        修改共享池的大小,ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;

        查看共享SQL区的使用率: 

            select(sum(pins-reloads))/sum(pins) "Library cache" from v$librarycache;--动态性能表

            这个使用率应该在90%以上,否则需要增加共享池的大小。

        查看数据字典缓冲区的使用率:

            select (sum(gets-getmisses-usage-fixed))/sum(gets) "Data dictionary cache" from v$rowcache;--动态性能表

            这个使用率也应该在90%以上,否则需要增加共享池的大小。

     2、缓冲区高速缓存:

        它的大小要根据数据量来决定:

             SGA=((db_block_buffers * block size)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB

        查看数据库数据缓冲区的使用情况:

            SELECT name,value FROM v$sysstat order by name WHERE name IN('DB BLOCK GETS','CONSISTENT GETS','PHYSICAL READS'); 

        计算出来数据缓冲区的使用命中率=1-(physical reads/(db block gets+consistent gets)),这个命中率应该在90%以上,否则需要

增加数据缓冲区的大小。

        select sum(pins) "请求存取数",sum(reloads) "不命中数",sum(reloads)/sum(pins) from v$librarycache  

     其中,pins,显示在库高速缓存中执行的次数;reload,显示在执行阶段库高速缓存不命中的数目,一般sum(reloads)/sum(pins)的

值应接近于零.如果大于1%就应该增加shared_pool_size的值, 来提高数据字典高速缓存可用的内存数量,减少不命中数.

        通过动态性能表v$rowcache来查询数据字典高速缓存的活动:  

            select sum(gets) "请求存取数",sum(getmisses) "不命中数" from v$rowcache   

            其中,gets,显示请求相应项的总数; getmisses,显示造成高速缓存不命中的数据请求数.   

        Hit ratio与wait events:

            select value from $pgastat where name ='cache hit percentage' 

            Hit ratio与wait events是此消彼涨,在执行类似于

            select col1,col2,.. from tab1 a where exists (

               select 1 from tab2 where a.col3 = b.col3

            )

            where ....

            的语句的时候,如果tab1的记录很多的话,你会发现系统的hit ratio会有很大的提高,wait events是否会改观呢.

     3、日志缓冲区

        SELECT name, value  FROM v$sysstat WHERE name IN ('redo entries','redo log space requests')查看日志缓冲区的使用情况。

查询出的结果可以计算出日志缓冲区的申请失败率:   

    

  申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。

     3、大型池:

        可以减轻共享池的负担

        可以为备份、恢复等操作来使用

        不使用LRU算法来管理

 其大小由数据库的‘共享模式/db模式’如果是共享模式的话,要分配的大一些

        指定Large Pool的大小,ALTER SYSTEM SET LARGE_POOL_SIZE=64M

     3、Java池:

        在安装和使用Java的情况下使用

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值