技术开发 频道

Unix环境下的Oracle调优

  【IT168 技术文档】很多DBA在发现系统很慢的时候,有的时候无从下手,下面我分享下我的工作经验。本文主要针对UNIX环境,希望对大家会有些帮助。

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

$ sar -u 1 10 HP-UX bilut42 B.11.11 U 9000/800 10/31/06 09:50:02 %usr %sys %wio %idle 09:50:03 4 1 30 65 09:50:04 7 1 27 65 09:50:05 2 0 25 73 09:50:06 1 1 21 77 09:50:07 1 0 19 80 09:50:08 8 1 18 73 09:50:09 12 1 22 65 09:50:10 9 1 22 68 09:50:11 8 0 21 71 09:50:12 9 1 20 70 Average 6 1 23 71

  其中%usr是用户进程使用cpu的百分比,%sys是系统进程使用cpu的百分比,%wio 是等待IO完成使用cpu的百分比, %idle是空闲的百分比。如果%wio列值很大,说明IO存在问题,需要进行优化,一般情况下认为%wio大于35IO就存在问题。 如果%idle值很低,说明cpu已经满负荷。

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

  1 联系相应的操作系统的技术支持对这方面进行优化,比如hp-ux在划定卷组时的条带化等方面。
  2 查找Oracle中不合理的sql语句,对其进行优化
  3 对Oracle中访问量频繁的表除合理建索引外,再就是把这些表分表空间存放以免访问上产生热点,再有就是对表合理分区。

  关注一下内存

  常用的工具便是vmstat,对于hp-unix来说可以用glance,Aix来说可以用topas,当你发现vmstat中pi列非零,memory中的free列的值很小,glance,topas中内存的利用率多于80%时,这时说明你的内存方面应该调节一下了,方法大体有以下几项。
  1 划给Oracle使用的内存不要超过系统内存的1/2,一般保在系统内存的40%为益。
  2 为系统增加内存
  3 如果你的连接特别多,可以使用MTS的方式
  4 打全补丁,防止内存漏洞

  如何找到点用系用资源特别大的Oracle的session及其执行的语句。
  Hp-unix可以用glance,top
  IBM AIX可以用topas
  些外可以使用ps的命令。
  通过这些程序我们可以找到点用系统资源特别大的这些进程的进程号,我们就可以通过以下的sql语句发现这个pid正在执行哪个sql,这个sql最好在pl/sql developer,toad等软件中执行,不需要进行格式化, 把<>中的spid换成你的spid就可以了。
  使用top查看运行时间最长state为run进程的pid,使用如下的语句查看pid在做什么

SELECT a.sql_text FROM v$sqltext a,v$session b WHERE a.hash_value = b.sql_hash_value AND b.SID='&sid' ORDER BY piece ASC

  查看到如果是有全表扫描的语句就要进行优化。

  查找前十条性能差的sql.

SELECT * FROM ( SELECT PARSING_USER_ID EXECUTIONS, SORTS, COMMAND_TYPE, DISK_READS, sql_text FROM v$sqlarea ORDER BY disk_reads DESC ) WHERE ROWNUM<10 ;
0
相关文章