知识大全 oracle优化心得摘抄

Posted 系统

篇首语:愿君学长松,慎勿作桃李。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle优化心得摘抄相关的知识,希望对你有一定的参考价值。

  数据库优化oracle i

  很多的时侯 做Oracle DBA的我们 当应用管理员向我们通告现在应用很慢 数据库很慢的时侯 我们到数据库时做几个示例的Select也发现同样的问题时 有些时侯我们会无从下手 因为我们认为数据库的各种命种率都是满足Oracle文档的建议 实际上如今的优化己经向优化等待(waits)转型了 实际中性能优化最根本的出现点也都集中在IO 这是影响性能最主要的方面 由系统中的等待去发现Oracle库中的不足 操作系统某些资源利用的不合理是一个比较好的办法 下面把我的一点实践经验与大家分享一下 本文测重于Unix环境

  一 通过操作系统的一些工具检查系统的状态 比如CPU 内存 交换 磁盘的利用率 根据经验或与系统正常时的状态相比对 有时系统表面上看起来看空闲这也可能不是一个正常的状态 因为cpu可能正等待IO的完成 除此之外我们还应观注那些占用系统资源(cpu 内存)的进程

   如何检查操作系统是否存在IO的问题?使用的工具有sar 这是一个比较通用的工具

  Rp #sar u

  即每隔 秒检察一次 共执行 次 当然这些都由你决定了

  示例返回

  HP UX hpn B U / / /

   : : %usr %sys %wio %idle注 我在redhat下查看是这种结果 不知%system就是所谓的%wio

  Linux ELsmp (YY )   / /

   : : AM       CPU     %user     %nice   %system     %idle : : AM       all                       : : AM       all                      : : AM       all                       : : AM       all                       : : AM       all                     

   : : AM       CPU     %user     %nice   %system     %idle : : AM       all                      : : AM       all                      : : AM       all                      : : AM       all                     

  其中的%usr指的是用户进程使用的cpu资源的百分比 %sys指的是系统资源使用cpu资源的百分比 %wio指的是等待io完成的百分比 这是值得我们观注的一项 %idle即空闲的百分比 如果wio列的值很大 如在 %以上 说明你的系统的IO存在瓶颈 你的CPU花费了很大的时间去等待IO的完成 Idle很小说明系统CPU很忙 像我的这个示例 可以看到wio平均值为 说明io没什么特别的问题 而我的idle值为零 说明我的cpu已经满负荷运行了

  当你的系统存在IO的问题 可以从以下几个方面解决

  *联系相应的操作系统的技术支持对这方面进行优化 比如hp ux在划定卷组时的条带化等方面

  *查找Oracle中不合理的sql语句 对其进行优化

  *对Oracle中访问量频繁的表除合理建索引外 再就是把这些表分表空间存放以免访问上产生热点 再有就是对表合理分区 关注一下内存

  常用的工具便是vmstat 对于hp unix来说可以用glance Aix来说可以用topas 当你发现vmstat中pi列非零 memory中的free列的值很小 glance topas中内存的利用率多于 %时 这时说明你的内存方面应该调节一下了 方法大体有以下几项

  *划给Oracle使用的内存不要超过系统内存的 / 一般保在系统内存的 %为益

  为系统增加内存

  *如果你的连接特别多 可以使用MTS的方式

  *打全补丁 防止内存漏洞

   如何找到点用系用资源特别大的Oracle的session及其执行的语句    Hp unix可以用glance top

  IBM AIX可以用topas

  此外可以使用ps的命令

  通过这些程序我们可以找到点用系统资源特别大的这些进程的进程号 我们就可以通过以下的sql语句发现这个pid正在执行哪个sql 这个sql最好在pl/sql developer toad等软件中执行 把<>中的spid换成你的spid就可以了 SELECT a username a machine a program a sid a serial# a status c piece c sql_text from v$session a v$process b v$sqltext c WHERE b spid= ORCL AND b addr=a paddr AND a sql_address=c address(+)order BY c piece

  我们就可以把得到的这个sql分析一下 看一下它的执行计划是否走索引 对其优化避免全表扫描 以减少IO等待 从而加快语句的执行速度

  提示 我在做优化sql时 经常碰到使用in的语句 这时我们一定要用exists把它给换掉 因为Oracle在处理In时是按Or的方式做的 即使使用了索引也会很慢

  比如

  SELECT col col col FROM table a

  WHERE l not in (SELECT col FROM table )

  可以换成

  SELECT col col col FROM table a

  WHERE not exists

  (SELECT x FROM table b

  WHERE l =l )

   另一个有用的脚本 查找前十条性能差的sql SELECT * FROM (select PARSING_USER_ID EXECUTIONS SORTS MAND_TYPE DISK_READS sql_text FROM v$sqlareaorder BY disk_reads DESC )where ROWNUM< ;

  二 迅速发现Oracle Server的性能问题的成因 我们可以求助于v$session_wait这个视图 看系统的这些session在等什么 使用了多少的IO 以下是我提供的参考脚本

  脚本说明 查看占io较大的正在运行的sessionSELECT se sid se serial# pr SPID se username se status se terminal se program se MODULE

  se sql_address st event st p text si physical_reads si block_changes FROM v$session se

  v$session_wait st v$sess_io si v$process prWHERE st sid=se sid AND st sid=si sidAND se PADDR=pr ADDRAND se sid> AND st wait_time= AND st event NOT LIKE %SQL% ORDER BY physical_reads DESC对检索出的结果的几点说明

   我是按每个正在等待的session已经发生的物理读排的序 因为它与实际的IO相关

   你可以看一下这些等待的进程都在忙什么 语句是否合理?

  Select sql_address from v$session where sid=;

  Select * from v$sqltext where address=;

  执行以上两个语句便可以得到这个session的语句

  你也以用alter system kill session sid serial# ;把这个session杀掉

   应观注一下event这列 这是我们调优的关键一列 下面对常出现的event做以简要的说明 a buffer busy waits free buffer waits这两个参数所标识是dbwr是否够用的问题 与IO很大相关的 当v$session_wait中的free buffer wait的条目很小或没有的时侯 说明你的系统的dbwr进程决对够用 不用调整 free buffer wait的条目很多 你的系统感觉起来一定很慢 这时说明你的dbwr已经不够用了 它产生的wio已经成为你的数据库性能的瓶颈 这时的解决办法如下

  a 增加写进程 同时要调整db_block_lru_latches参数

  示例 修改或添加如下两个参数  db_writer_processes=

  db_block_lru_latches=

  a 开异步IO IBM这方面简单得多 hp则麻烦一些 可以与Hp工程师联系

  b db file sequential read 指的是顺序读 即全表扫描 这也是我们应该尽量减少的部分 解决方法就是使用索引 sql调优 同时可以增大db_file_multiblock_read_count这个参数

  c db file scattered read 这个参数指的是通过索引来读取 同样可以通过增加db_file_multiblock_read_count这个参数来提高性能

  d latch free 与栓相关的了 需要专门调节

  e 其他参数可以不特别观注

cha138/Article/program/Oracle/201311/16614

相关参考

知识大全 Oracle临时表用法的经验心得

Oracle临时表用法的经验心得  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  文章主要介绍的是

知识大全 Oracle提高sql执行效率的心得建议

Oracle提高sql执行效率的心得建议  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  sql执

知识大全 学习Oracle数据库的心得体会

学习Oracle数据库的心得体会  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!学习数据库对我来说是

知识大全 开发篇之—Oracle触发器心得体会

开发篇之—Oracle触发器心得体会  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  实在对象如表

知识大全 党课心得的开头和结尾怎样写

党课心得的开头和结尾怎样写开头先感谢党组织对你的教育以及自己对党新的认识,(网上搜一篇,摘抄点儿就好了)第二段写上党的总章以及自己的理解和自己的信仰(绝对要写马克思主义信仰),。。。。。。。。。网上搜

知识大全 概括Oracle优化器的优化方式

概括Oracle优化器的优化方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle是世

知识大全 讲解Oracle优化器的优化方式和优化模式

讲解Oracle优化器的优化方式和优化模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ora

知识大全 如何对Oracle中的优化器进行评估优化

如何对Oracle中的优化器进行评估优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Orac

知识大全 oracle认证辅导:oracle优化和管理sql1

  oracle认证辅导oracle优化和管理sql  查看当前正在执行的等待情况  SELECTTAsid  TAseq#  TBUsername  TBTerminal  TBProgram  D

知识大全 如何选择Oracle优化器

如何选择Oracle优化器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选用适合的Oracle