`
lgstarzkhl
  • 浏览: 330650 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

oracle优化内存,提高查询性能

阅读更多
内存的优化历来都是数据库或者操作系统优化的重中之重。在Oracle数据库体系结构中内存优化也是性能优化的关键。优化内存主要是通过优化内存结构来提高系统性能。这里所说的内存结构主要由专用SQL及PL/SQL区、共享池、日志缓冲区和高速缓冲存储区构成。
由于0racle的内存结构需求与应用密切相关,所以内存结构优化应在SQL语句和应用程序优化之后以及输入/输出(I/O)优化之前进行。而且首先要优化操作系统,并在处理共享池前考虑私有SQL和PL/SQL区。
优化SGA
SGA是对数据库数据进行快速访问的一个系统全局区,其大小在实例启动时被确定。若SGA本身需要频繁地进行释放、分配,则不可能达到快速访问数据的目的。因此为了优化系统性能,应确保SGA全部被驻留在实际内存中,而不应采用虚拟内存,以免使整个系统性能下降。
编辑提示:SGA小常识
SGA是Oracle为一个实例分配的一组共享内存缓冲区。它包含该实例的数据和控制信息。如果有多个用户同时与同一个实例相连接时,则其SGA中的数据可为多个用户共享,所以也叫它共享全局区。SGA在实例启动时被自动分配,当实例关闭时被收回。SGA中的数据和控制信息可被多个进程所使用,但只能由几个持殊进程能对其进行写操作。SGA中所包含的存储区根据其存放的信息类型大致可分为“数据库缓冲存储区”、“日志缓冲区”、“共享池”和“请求和响应队列”四大区域。
查看SGA大小
用户可以通过两种命令方式来查看SGA的大小。
(1)使用“SHOW SGA”命令
说明:用户可以连接到Sever Manager和数据库,然后执行“SHOW SGA”命令来查看SGA的大小。如果数据库实例没有启动,那么使用“SHOW SGA”命令将会报错。
(2)使用“SELECT * FROM V$SGA;”查询试图命令
说明:使用“SELECT * FROM V$SGA;”要在“SVRMGR>”提示符下。
预装SGA
可以在init.ora文件中将参数PRE_PAGE_SGA的值设为“yes”,而将SGA预装到物理内存中,即设置PRE_PAGE_SGA=yes。
优化专用SQL区及PL/SQL区
要优化专用的SQL区及PL/SQL区,就必须知道是否有不必要的语法分析调用,用户必须尽量少的调用Parse。如果有过多的不必要的语法分析调用,就应当设法减少它。
可用跟踪功能来为每个SQL语句输出跟踪信息,以检测其语法分析步的统计数字count。若分析步的count统计值与执行步的count统计值非常接近,则应减少语法分析调用。
减少语法分析调用的方法是通过所用的应用开发工具(如PRO*C、OCI和SQL*Forms等)来控制语法分析调用以及分配和释放专用的SQL区的频率,例如:在用PRO*C时,可用HOLD_CURSOR、RELEASE_CURSOR以及MAX_OPENCURSOR参数来控制专用SQL区。在使用OCI时,可使用OSQL3或OPARSE调用来为SQL语句分配专用SQL区,用OCLOSE调用关闭光标和释放专用SQL区。在使用SQL *Forms时,同样也可控制是否重用专用SQL区:可在触发器级、Form级或在运行时减少语法分析调用,以减少或重用专用SQL区。
优化日志缓冲区
日志缓冲区也称为重做日志缓冲区,它包含所有变化了的数据块。这些变化的数据块通过Oracle日志书写进程以一种邻接的方式写到重做日志文件中。
(1)获取缓冲区活动情况
优化日志缓冲区时,首先应了解缓冲区的活动情况。这对通过查询动态性能表(需有SELECT  ANY TABLE特权)V$SYSSTAT来获得。
SVRMGR> select sum(value)"Redo Buffer Waits" from v$sysstat
     2> where name='redo log space wait time';
(2)计算日志缓冲区的申请失败率
数据库管理员可以通过执行下述语句:
SQL>select name,value from v$sysstat where name in ('redo entries','redo log space requests');查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率。
申请失败率=requests/entries。申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。
(3)优化日志缓冲区
如果重做缓冲区的等待大于零,进程就要等待重做日志缓冲区的空间变成可用。此时就会影响数据库的性能。可以通过逐步提高init.ora中参数LOG_BUFFER的值来达到优化日志缓冲区的目的。在增加LOG_BUFFER的值时,可通过查询动态性能表来了解和检查日志缓冲区的活动情况。
优化共享池
共享池由库高速缓存、字典高速缓存和SQL区组成。整个共享池的大小由参数SHARED_POOL_SIZE确定。共享池的优化主要考虑库高速缓冲区、数据字典高速缓冲区以及会话期间信息的优化。

优化库高速缓冲区
要优化库高速缓冲区,必须首先了解该缓冲区的活动情况。库高速缓冲区的活动统计信息保留在动态性能表V$LIBRARYCACHE中。优化时应使数据字典高速缓存里的内存数据库块尽可能多。

(1)确定库高速缓存的性能
通过查询V$LIBRARYCACHE表(需有SELECT ANY TABLE特权)来了解其活动情况,以决定如何优化。例如:
SQL>SELECT SUM(pins),SUM(reloads) FROM V$LIBRARYCACHE;
说明:动态性能表V$LIBRARYCACHE中包含有NAMESPACE、PINS和RELOAD等列。其中NAMESPACE列反映了SQL语句及PL/SQL块的库缓冲区的活动,其值可能是‘SQL AREA’,‘TABLE/PROCEDURE’,‘BODY’和‘TRIGGER’等;而PINS和RELOADS列给出执行调用时的错误信息。PINS列给出SQL语句、PL/SQL块及被访问对象定义的总次数;RELOADS给出SQL语句或PL/SQL块的隐式分析或对象定义重装载时在库程序缓冲区中发生的错误。
(2)查看reloads和pins的比率
可以使用以下查询语句来查看reloads和pins的比率:
SELECT(SUM(reloads)/SUM(pins))×100“Library Cache Ratio”FROM V$LIBRARYCACHE;
用户必须保证reloads和pins的比率尽可能低,其值应低于1%,若RELOADS/PINS>1%,则应给缓冲区分配附加的存储及写等同的SQL语句,使SQL语句与PL/SQL块共享一个共享SQL区,这样可减少错误。如果库高速缓冲区无错误,则可设置初始化参数CUTSOR_SPACE_FOR_TIME为TRUE,以加速执行调用。这可使性能稍有改善。若每个用户可用的专用SQL区不足时,则不要将CUTSOR_SPACE_FOR_TIME设置为TRUE。
(3)优化库高速缓存区
优化库高速缓存时,可以通过增加init.ora文件中SHARED_POOL_SIZE或OPEN_CURSORS的参数值而达到满意的优化比率。
优化数据字典缓冲区
数据字典缓冲区在功能上与库高速缓存类似,但主要用于Oracle字典高速SQL语句。要优化数据字典缓冲区,也必须先查看数据字典缓冲区的使用情况及效果,然后依此来进行优化。数据字典缓冲区的使用情况记录在动态性能表V$ROWCHACHE中,其中有如下几列:
PARAMETER:记录某类特写数据字典项的统计,其值以‘de_’开始,例如某文件描述的统计为‘de_files’。
GETS:是对相应项请求次数的统计。
GETTMISSES:是引起缓冲区出错的数据请求次数。
可用如下语句来查询V$ROWCHACHE表:
SQL>SELECT (SUM(getmisses)/SUM(gets))*100 ”DaTa Dictionary Cache Ratio”FROM V$ROWCHACHE;
对于贫繁访问的数据字典缓冲区,GETMISSES与GETS之比要小于10%到15%。若大于此百分数时,则应考虑增加数据字典缓冲区的容量,即要增加SHARED_POOL_SIZE或者DB_BLOCK_BUFFERS初始化参数的值。
使用多线索服务器时共享池的优化
在多线索服务器结构中,会话期信息被存放在共享池中,它包括SQL专用区和排序区。在使用多线索服务器时,要增大共享池,以满足需要。这也可通过增加SHARED_POOL_SIZE的参数值来实现。
可通过查询(要求有SELECT ANY TABLE特权)动态性能表V$SESSTAT来衡量会话信息的多少。例如:
    SQL>SELEC SUM(value) ||’bytes’ ”Total memory for all session”
    2>FROM V$SESSTAT
    3>WHERK name=‘session memory’;
SQL>SELECT UM(value)|| ‘bytes’ “Total max men for all sessions”
    2>FROM  V$SESSTAT
    3>WHERE  name=‘max session memory’;
其中,“session memory”是分配给会话的内存字节数;“max session memory”是分配给会话的最大内存字节数。

优化缓冲区
(1)获取缓冲区活动情况
为了优化缓冲区,首先应了解缓冲区的活动情况。这可以通过查询动态性能表(需有SELECT  ANY TABLE特权)V$SYSSTAT来获得。
SVRMGR> select name ,value from v$sysstat
     2> where name in('db block gets','consistent gets','physical reads');
NAME    VALUE
db  blockgets   3437
consistent gets   30500
physica  reads   1963
3 rows selected.
其中,“db block gets”和“consistent gets”的值是请求数据缓冲区中读的总次数。“physical reads”为请求数据时引起从盘中读文件的次数。
(2)缓冲区命中率
从缓冲区读的可能性的高低称为缓冲区命中率。它可用如下公式计算:
Hot Ratio=1-(physical reads/(db block gets+consistent gets)
缓冲区命中率越高,其速度就越快。如果命中率低于60%或70%时。则应增加缓冲区(即DB_BLOCK_BUFFERS),以改进性能。根据公式可以计算出本例中的Hot Ratio=1-(1963/(3437+30500)=92%。 如果缓冲区的命中率很高,希望在保持良好性能下适当减少缓冲区,这时可减少DB_BLOCK_BUFFERS的值,其最小值为4。


分享到:
评论

相关推荐

    oracle数据库性能优化.pdf

    分区策略可将大表分解,提高查询速度,减轻锁竞争。回滚段管理则关乎事务的回滚和恢复,适当大小的回滚段能保证事务的正常进行。执行计划控制则涉及SQL优化器的选择和 Hint的使用,以引导Oracle选择最佳执行路径。 ...

    ORACLE SQL性能优化系列

    ORACLE SQL性能优化系列 ORACLE SQL性能优化是数据库管理员和开发者非常关心的一个话题。为了提高数据库的性能...ORACLE SQL 性能优化系列提供了多种优化技术,帮助开发者和数据库管理员提高数据库的性能和可扩展性。

    Oracle 多表查询优化

    Oracle 多表查询优化是指在 Oracle 数据库管理系统中,为了提高多表查询的效率和性能采取的一些优化策略和技术。在 Oracle 中,多表查询是指从多个表中检索数据的操作。这种操作可能会占用大量的系统资源和时间,...

    ORACLE多表查询优化

    本文将讨论 Oracle 多表查询优化的几种方法,帮助开发者提高数据库性能。 1. 选择最有效率的表名顺序 在基于规则的优化器中,选择合适的表名顺序非常重要。Oracle 的解析器按照从右到左的顺序处理 FROM 子句中的...

    关于Oracle多表连接,提高效率,性能优化操作

    执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就可能要几十表了. 这是因为ORACLE只对...

    oracle性能优化技术内幕

    9. **数据库参数调优**:Oracle有许多可调整的初始化参数,如pga_aggregate_target、sga_target等,通过对这些参数的微调,可以优化内存分配和系统资源使用。 10. **监控与诊断工具**:如V$视图、ADDM(Automatic ...

    Oracle性能优化技术内幕part_3

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

    oracle11g 性能优化

    1. **分区**:通过分区技术,可以将大表分成更小、更易管理的部分,提高查询性能。 2. **表空间管理**:合理分配表空间,避免空间碎片,提高I/O效率。 3. **物化视图**:用于预先计算和存储复杂的查询结果,加快数据...

    oracle数据库系统性能和应用性能优化

    Oracle数据库系统性能和应用性能优化是数据库管理员和开发人员关注的重要领域,它涉及到多个层面的调整和优化,以确保系统的高效运行。Oracle数据库是全球广泛使用的数据库管理系统,其性能直接影响到业务应用程序的...

    Oracle Database 性能调整与优化 系列书.rar

    2. **In-Memory Option**:Oracle 12c引入了内存优化特性,通过将数据部分或全部加载到内存中,显著提升查询性能。 3. **Automatic Workload Repository (AWR)** 和 **ASH (Active Session History)**:利用这些工具...

    oracle 内存优化

    Oracle数据库的内存优化是提升系统性能的关键环节。内存主要分为两个部分:系统全局域(SGA)和程序全局域(PGA)。 SGA是Oracle数据库实例的核心组成部分,它是一组共享的内存结构,用于存储数据库实例的数据和控制...

    Oracle企业DBA性能优化

    Oracle数据库作为全球广泛使用的数据库系统,其性能优化涉及多个层面,包括SQL查询优化、存储优化、索引策略、数据库架构调整、并行处理、资源调度以及数据库维护等。以下是对这些关键知识点的详细阐述: 1. **SQL...

    oracle性能优化文档

    Oracle性能优化是数据库管理员和开发人员关注的重要领域,旨在提高SQL查询速度,降低服务器资源消耗,从而提升整体系统性能。本文档集包含了丰富的知识,帮助读者深入理解Oracle数据库的内部工作原理,掌握优化技巧...

    基于成本的oracle优化法则中文版.rar

    8. **分区技术**:大型表的分区可以提高查询性能,尤其是针对范围查询。Oracle提供了多种分区策略,如范围分区、列表分区、哈希分区等。 9. **物化视图和快照**:物化视图可以预先计算并存储复杂查询的结果,从而...

    提高Oracle查询效率

    本文将重点讨论如何提高Oracle查询效率,主要基于提供的压缩包文件"ORACLE_SQL性能优化.ppt"中的内容,结合源码理解和工具应用。 1. **SQL优化基础** - **索引优化**:索引可以显著提升数据检索速度。正确选择索引...

    Oracle数据库性能优化.pdf

    Oracle的优化器和行锁管理器帮助分析和改进SQL执行效率,避免全表扫描,提高查询速度。 内存分配的调整是实时进行的。数据库管理员需要监控和调整SGA区和PGA区的大小,以适应数据库运行状态。例如,增加数据缓冲区...

    Oracle数据库中大型表查询优化的研究

    本篇文章将深入探讨Oracle数据库中的大型表查询优化策略,并结合工具的使用来提高查询效率。 首先,我们需要理解大型表查询优化的基本原则。这包括正确使用索引、合理设计表结构、避免全表扫描以及有效利用分区技术...

    Oracle 查询优化,个人练习

    Oracle查询优化是数据库管理中的关键技能,尤其是在处理大型数据集时,有效的查询优化能显著提升系统性能,降低资源消耗。本实践主要关注如何利用Oracle数据库的特性与工具来改进SQL查询的执行效率。 首先,了解...

    Oracle数据库性能优化PDF

    资源名称:Oracle数据库性能优化 PDF内容简介:本书面向实际应用,从多个角度出发,对Oracle优化中的很多关键问题进行了深入全面的探讨,涵盖了Oracle优化的各个技术层面,从内存优化、IO规划及优化,到SQL优化调整...

    Oracle性能优化技巧

    Oracle性能优化技巧是数据库管理员和开发人员关注的重要领域,它涉及到如何提高SQL查询效率,减少资源消耗,从而提升系统的整体性能。以下是一些关键的Oracle性能优化策略: 1. **选择有效的表名顺序**:在FROM子句...

Global site tag (gtag.js) - Google Analytics