内存的优化历来都是数据库或者操作系统优化的重中之重。在数据库体系结构中内存优化也是性能优化的关键。优化内存主要是通过优化内存结构来提高系统性能。这里所说的内存结构主要由专用SQL及PL/SQL区、共享池、日志缓冲区和高速缓冲区构成。

由于0racle的内存结构需求与应用密切相关,所以内存结构优化应在SQL语句和应用程序优化之后以及输入/输出(I/O)优化之前进行。而且首先要优化操作系统,并在处理共享池前考虑私有SQL和PL/SQL区。

优化SGA SGA是对数据库数据进行快速访问的一个系统全局区,其大小在实例启动时被确定。若SGA本身需要频繁地进行释放、分配,则不可能达到快速访问数据的目的。因此为了优化系统性能,应确保SGA全部被驻留在实际内存中,而不应采用虚拟内存,以免使整个系统性能下降。

编辑提示:SGA小常识SGA是为一个实例分配的一组共享内存缓冲区。它包含该实例的数据和控制信息。如果有多个用户同时与同一个实例相连接时,则其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查询优化不走缓存,Oracle彻底优化——优化内存相关推荐

  1. oracle查询优化不走缓存,Oracle数据库存储优化问题

    cache如何优化存储系统读写性能 上的Cache又称硬盘缓存,是成在硬盘控上的一块内存芯片,和上的内存一样,它具快的存取速度.简单地说,硬盘缓存起着硬盘内部储存和外部读取之间的缓冲的功能.当硬盘接收 ...

  2. oracle序列无缓存,oracle 序列跳号现象

    从做Jforum项目以来,遇到一个很明显的现象,就是每个表的主键都出现跳号现象.具体表现在:当一次操作若干条数据时,自动增长的sequence序列总是从200的倍数开始增加,这次操作完成后,无论这时c ...

  3. oracle is null效率,Oracle查询优化之is null和is not null优化

    最近工作的时候遇到了比较大的数据查询,自己的sql在数据量小的时候没问题,在数据量达到300W的时候特别慢,只有自己优化sql了,以前没有优化过,所以记录下来自己的优化过程,本次是关于is null和 ...

  4. oracle将千万行查询优化到一秒内,oracle下一条SQL语句的优化过程(比较详细)

    oracle下一条SQL语句的优化过程(比较详细) 更新时间:2010年04月14日 23:56:49   作者: 很简单的一次调整,语句加了适当的索引后性能就有大幅的提升.当时看到这条语句的时候,第 ...

  5. oracle如何规则显示,Oracle语句优化规则汇总

    Oracle sql 性能优化调整 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置 ...

  6. 赵强老师:Oracle数据库系列课程(20)优化数据库-赵强老师-专题视频课程

    赵强老师:Oracle数据库系列课程(20)优化数据库-99人已学习 课程介绍         从零开始学习Oracle数据库,让学员读整个Oracle数据库有个全面清除的认识和学习. 课程收益    ...

  7. oracle执行计划的rows不对,Oracle执行计划——all_rows和first_rows(n)优化器模式

    Oracle执行计划--all_rows和first_rows(n)优化器模式 0. 环境创建 [sql] SQL> create usertest identified by test 2 d ...

  8. oracle stalestats_深入理解oracle优化器统计数据(Optimizer Statistics)

    理解oracle优化器统计数据 首先来介绍oracle数据库使用基于规则优化器(RBO)来决定如何执行一个sql语句.基于规则优化器顾名思义,它是遵循一组规则来判断一个sql语句的执行计划.这组规则是 ...

  9. oracle arm服务器_Oracle和ARM合作优化嵌入式Java

    oracle arm服务器 Oracle和ARM已达成多年合作伙伴关系,两家公司将致力于优化ARM处理器的Java编程语言. 这项工作将主要致力于在ARM的多核系统上提供更高的吞吐量和更大的可伸缩性. ...

  10. 163.Oracle数据库SQL开发之 SQL优化——优化工具

    163.Oracle数据库SQL开发之 SQL优化--优化工具 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50186075 ...

最新文章

  1. Dubbo架构设计详解--转载
  2. Segment fault之痛
  3. 中国人数学好,数学思维差?
  4. 布隆过滤器的原理、应用场景和源码分析实现
  5. POJ 3225 - 区间
  6. 2021年中国家装行业数字化转型研究报告
  7. C#出题库项目的总结(1)
  8. 考研预报名即将开始,做好这些实现弯道超车
  9. 深入理解JVM—Java 6 JVM参数配置说明
  10. java基础知识总结
  11. 激光雷达是什么?为什么移动机器人必不可少?
  12. mysql左右匹配原则的用法和理解
  13. Phaser3 点击事件
  14. MongoDB~从入门到入坑。
  15. 微软雅黑与微软正黑体
  16. 从0开始构建蓝牙耳机研发环境
  17. JAVA学习日记DAY14-15--javascript
  18. 视频剪辑 - Pr入门[第一次学习] - 小白蜕变!!!
  19. KVM 虚拟化 介绍
  20. 矩阵的零空间和列空间

热门文章

  1. APP跳转H5、微信小程序与微信小程序之间互跳
  2. java程序员电脑内存配置_学习JAVA对电脑配置有要求吗
  3. 怎样检测人脸相似度(人脸识别技术)
  4. nanomsg 高性能通信库_zeromq与nanomsg比较
  5. wsimport生成客户端java代码
  6. 2017cad光标大小怎么调_把cad光标变大的方法步骤详解
  7. endnote初始化数据库支持_学术干货:Endnote免费网页版竟如此强大!
  8. gnu nano显卡测试软件,买不到了 篇四:站内首发——RX VEGA NANO评测
  9. java解析json字符串数据
  10. 分享 27 个面向开发人员的最佳 Vue.js 开发工具