`

oracle性能优化之内存

阅读更多

引自:http://log-cd.iteye.com/blog/562052,以下内容非原文(原文内容正确率-。-)

一、名词解释 
(1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 

(2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)。  共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。 

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

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

(5)Java池:Java Pool为Java命令的语法分析提供服务。 

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

二、分析与调整 
(1)系统全局域: 
  SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/3到1/2。 
a.共享池: 
查看共享SQL区的使用率: 

Sql代码  收藏代码
  1. select(sum(pins-reloads))/sum(pins) "Library cache" from v$librarycache;--动态性能表  


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

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

Sql代码  收藏代码
  1. select (sum(gets-getmisses-usage-fixed))/sum(gets) "Data dictionary cache" from v$rowcache;--动态性能表  


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

修改共享池的大小: 

Sql代码  收藏代码
  1. ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;  


b.缓冲区高速缓存: 
查看数据库数据缓冲区的使用情况: 

Sql代码  收藏代码
  1. select 1-((select sum(value) from v$sysstat where name like '%physical reads%')/(select sum(value) from v$sysstat where name like '%consistent gets' or name like '%db block gets%')) from dual;

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

c.日志缓冲区 
查看日志缓冲区的使用情况: 

Sql代码  收藏代码
  1. sql1-SELECT name, value  FROM v$sysstat WHERE name IN ('redo entries','redo log space requests');
  2. select n2/n3 from dual;
  3. 其中n2和n3是sql1查询出的结果

查询出的结果可以计算出日志缓冲区的申请失败率:   
申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。 

d.大型池: 
    可以减轻共享池的负担,可以为备份、恢复等操作来使用,不使用LRU算法来管理。其大小由数据库的‘共享模式/db模式’如果是共享模式的话,要分配的大一些。 
    指定Large Pool的大小: 

Sql代码  收藏代码
  1. ALTER SYSTEM SET LARGE_POOL_SIZE=64M  

   但是若该系统同时在线数如果连500左右都达不到,那么便没有设置该参数的意义。

   详见:http://hanjian861202.iteye.com/blog/1074196

e.Java池: 
    在安装和使用Java的情况下使用。 

(2)PGA调整 
a.PGA_AGGREGATE_TARGET初始化设置 

    PGA_AGGREGATE_TARGET的值应该基于Oracle实例可利用内存的总量来设置,这个参数可以被动态的修改。假设Oracle实例可分配4GB的物理内存,剩下的内存分配给操作系统和其它应用程序。你也许会分配80%的可用内存给Oracle实例,即3.2G。现在必须在内存中划分SGA和PGA区域。 

在OLTP(联机事务处理)系统中,典型PGA内存设置应该是总内存的较小部分(例如20%),剩下80%分配给SGA。 
OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20% 

在DSS(数据集)系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。 
DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50% 

在这个例子中,总内存4GB,DSS系统,你可以设置PGA_AGGREGATE_TARGET为1600MB,OLTP则为655MB。 

b.配置PGA自动管理 

不用重启DB,直接在线修改。 

SQL> alter system set workarea_size_policy=auto scope=both; 

System altered. 

SQL> alter system set pga_aggregate_target=512m scope=both; 

System altered. 

SQL> show parameter workarea 

NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
workarea_size_policy                 string      AUTO --这个设置成AUTO 
SQL> show parameter pga 

NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
pga_aggregate_target                 big integer 536870912 

SQL> 

c.监控自动PGA内存管理的性能 

V$PGASTAT:这个视图给出了一个实例级别的PGA内存使用和自动分配的统计。 

SQL> set lines 256 
SQL> set pages 42 
SQL> SELECT * FROM V$PGASTAT; 

NAME                                                                  VALUE UNIT 
---------------------------------------------------------------- ---------- ------------ 
aggregate PGA target parameter                                    536870912 bytes    --当前PGA_AGGREGATE_TARGET的值 
aggregate PGA auto target                                         477379584 bytes    --当前可用于自动分配了的PGA大小,应该比PGA_AGGREGATE_TARGET 小 
global memory bound                                                26843136 bytes    --自动模式下工作区域的最大大小,Oracle根据工作负载自动调整。 
total PGA inuse                                                     6448128 bytes 
total PGA allocated                                                11598848 bytes    --PGA的最大分配 
maximum PGA allocated                                             166175744 bytes 
total freeable PGA memory                                            393216 bytes    --PGA的最大空闲大小 
PGA memory freed back to OS                                        69074944 bytes 
total PGA used for auto workareas                                         0 bytes    --PGA分配给auto workareas的大小 
maximum PGA used for auto workareas                                 1049600 bytes 
total PGA used for manual workareas                                       0 bytes 
maximum PGA used for manual workareas                                530432 bytes 
over allocation count                                                  1118    --实例启动后,发生的分配次数,如果这个值大于0,就要考虑增加pga的值 
bytes processed                                                   114895872 bytes 
extra bytes read/written                                            4608000 bytes 
cache hit percentage                                                  96.14 percent    --命中率 

16 rows selected. 

--V$PGA_TARGET_ADVICE 

SQL> SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb, 
   ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc, 
   ESTD_OVERALLOC_COUNT 
   FROM v$pga_target_advice;
 

The output of this query might look like the following: 

TARGET_MB   CACHE_HIT_PERC ESTD_OVERALLOC_COUNT 
---------- -------------- -------------------- 
63       23          367 
125        24          30 
250        30          3 
375        39          0 
500        58          0 
600        59          0 
700        59          0 
800        60          0 
900        60          0 
1000    61          0 
1500    67          0 
2000    76          0 
3000    83          0 
4000    85          0 

可以看出当TARGET_MB 为375M是ESTD_OVERALLOC_COUNT=0,所以可以将PGA_AGGREGATE_TARGET设置成375M。 

附:oracle SGA与PGA区别: 
SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。 
PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反,PGA 是只被一个进程使用的区域,PGA 在创建进程时分配,在终止进程时回收。 

分享到:
评论

相关推荐

    oracle数据库性能优化.pdf

    除了上述两点,Oracle性能优化还包括索引的建立与管理,分区策略的运用,回滚段的优化,以及查询执行计划的控制等。索引能加速数据检索,但过度的索引会增加写操作的开销,需权衡利弊。分区策略可将大表分解,提高...

    Oracle性能优化与故障诊断案例分享

    Oracle数据库性能优化与故障诊断是数据库管理中极为重要的两个方面,它们直接关系到企业业务系统的稳定运行和性能表现。在这篇文章中,我们将详细探讨针对Oracle数据库性能问题和故障的诊断案例,并分享如何通过案例...

    Oracle性能优化求生指南

    ### Oracle性能优化求生指南 #### 一、Oracle数据库性能优化概述 在现代企业环境中,Oracle数据库因其稳定性和强大的功能而被广泛采用。然而,随着数据量的不断增长和技术的快速发展,确保Oracle数据库的高性能变...

    Oracle性能优化绝版好书:高级OWI与ORACLE性能调整

    《Oracle性能优化绝版好书:高级OWI与ORACLE性能调整》这本书深入探讨了Oracle数据库性能优化的关键技术和策略,特别关注了Oracle Wait Interface (OWI)和性能调整的实践应用。OWI是Oracle数据库中用于监控和诊断...

    ORACLE SQL性能优化系列

    ORACLE SQL性能优化系列 ORACLE SQL性能优化是数据库管理员和开发者非常关心的一个话题。为了提高数据库的性能,ORACLE 提供了多种优化技术。下面我们将详细介绍 ORACLE SQL 性能优化系列中的一些重要知识点。 一...

    ORACLE性能优化工具整理

    Oracle性能优化工具整理 Oracle数据库作为全球广泛使用的商业数据库管理系统,其性能优化对于确保数据库稳定运行、提高应用响应速度至关重要。性能优化不仅需要通过合理设计数据库模式、编写高效SQL语句等手段,而且...

    Oracle性能优化指南

    很抱歉,您提供的文件内容中,关于《Oracle性能优化指南》的标题和描述没有提供具体的详细信息,仅有标题和重复的描述,以及一个与主题无关的Java学习群信息。这不足以形成完整的知识点。为了生成知识点,我需要您...

    oracle性能优化技术内幕

    Oracle性能优化是数据库管理员和开发人员在处理Oracle数据库系统时不可或缺的重要技能。Oracle数据库作为业界广泛使用的数据库管理系统,其性能优化对于提升系统响应速度、降低资源消耗和改善用户体验至关重要。以下...

    oracle性能优化-比较全面

    Oracle性能优化是一个涵盖广泛且至关重要的主题,对于数据库的高效运行和企业级应用的性能提升起着决定性作用。本文将深入探讨Oracle性能优化的两个关键方面:SGA(System Global Area)的Shared Pool优化和Buffer ...

    EBS性能调优之全面挖掘_V4.2(ebs性能优化、oracle性能优化、linux性能优化)

    例如,调整swappiness值可以优化内存与磁盘交换的行为,选择合适的I/O调度器可以改善磁盘性能。此外,监控工具如top、iostat和vmstat等可以帮助DBA实时了解系统状态,并进行针对性的调整。 **性能调查和AWR报告** ...

    oracle性能优化最佳实践

    本文旨在深入探讨Oracle数据库性能优化的最佳实践,包括数据库性能基础、调优方法论、SQL语句调优以及Oracle性能优化解决方案,帮助数据库管理员(DBA)和开发者提升数据库系统的整体效能。 ### 数据库性能基础及调优...

    Oracle性能优化培训

    在Oracle性能优化过程中,主要涉及以下几个方面:磁盘I/O优化、内存优化、CPU优化以及查询优化等。通过这些方面的综合调整与优化,可以显著提升Oracle数据库的运行效率。 #### 二、索引优化 索引是提高查询速度的...

    Oracle性能优化技术内幕part_3

    Oracle性能优化技术是数据库管理员和开发人员在处理大型复杂系统时必须掌握的关键技能。这部分内容主要探讨Oracle数据库的性能调优策略,分为四个部分,本文将聚焦于第三部分。在这个阶段,我们通常会深入到数据库的...

    Oracle性能优化内幕.pdf

    因此,接下来将围绕“Oracle数据库性能优化”的核心知识点进行展开。 ### Oracle数据库性能优化的核心概念 1. **理解性能瓶颈**: - 在开始任何性能优化工作之前,首先要明确系统当前的运行状态以及存在的性能...

    Oracle性能优化技术内幕.rar

    Oracle性能优化是数据库管理员和开发人员在处理Oracle数据库系统时不可或缺的一项技能。Oracle数据库作为全球广泛使用的数据库管理系统,其性能的高低直接影响到企业的业务运行效率和用户体验。本压缩包文件"Oracle...

    oracle性能优化学习心得

    Oracle性能优化是一个复杂而精细的过程,它涉及到数据库的多个层面,包括硬件配置、数据库设计、SQL语句优化以及系统参数调整。以下是对标题和描述中所述知识点的详细说明: 一、优化总原则 1. 系统使用情况的监控...

Global site tag (gtag.js) - Google Analytics