io不好,oracle先看这里

2430阅读 0评论2021-05-28 brjl
分类:Oracle


如果觉得io不正常,例如top命令的wait%大于20%,会不会是导致数据库慢的原因呢?
先看这个


  1. col name for a25

  2. select m.intsize_csec,
  3.        n.name ,
  4.        round(m.time_waited,3) time_waited,
  5.        m.wait_count,
  6.        round(10*m.time_waited/nullif(m.wait_count,0),3) avgms 
  7. from v$eventmetric m,
  8.      v$event_name n
  9. where m.event_id=n.event_id
  10.   and n.name in (
  11.                   'db file sequential read',
  12.                   'db file scattered read',
  13.                   'direct path read',
  14.                   'direct path read temp',
  15.                   'direct path write',
  16.                   'direct path write temp',
  17.                   'log file sync',
  18.                   'log file parallel write'
  19. );

效果如下:

如果最右列的值大于20,则说明io的确有问题,不符合oracle预期。

操作系统层面呢?
最简单的方法可以试试cp一个1G的文件,读取速度如果小于50MB/s,说明速度不快,例如:
time cp /oradata/sysaux01.dbf /oradata/test1.log

我的虚拟机上效果:

读取速度是37MB/s

当然猎户座可以帮忙,orion
[oracle@db01 ~]$ orion -help


如果间歇性io慢怎么办?
osw 或者 sar -f /var/log/sa/sa28 看看wait%历史



展示一下IO等待统计结果

  1. -- from tanelpoder.com

  2. BREAK ON snap_begin SKIP 1 ON snap_end ON event_name

  3. COL event_name FOR A40

  4. SELECT
  5.     CAST(begin_interval_time AS DATE) snap_begin
  6.   , TO_CHAR(CAST(end_interval_time AS DATE), 'HH24:MI') snap_end
  7.   , event_name
  8.   , wait_time_milli
  9.   , CASE WHEN wait_count >= LAG(wait_count) OVER (PARTITION BY event_name,wait_time_milli ORDER BY CAST(begin_interval_time AS DATE)) THEN
  10.         wait_count - LAG(wait_count) OVER (PARTITION BY event_name,wait_time_milli ORDER BY CAST(begin_interval_time AS DATE))
  11.     ELSE
  12.         wait_count
  13.     END wait_count
  14. FROM
  15.     dba_hist_snapshot
  16.   NATURAL JOIN
  17.     dba_hist_event_histogram
  18. WHERE
  19.     begin_interval_time > SYSDATE - 1/24
  20. --AND event_name LIKE 'ASM file metadata operation'
  21. --AND event_name LIKE 'flashback log switch'
  22. -- AND event_name LIKE 'KSV master wait'
  23. AND wait_class = 'User I/O'
  24. ORDER BY
  25.     event_name
  26.   , snap_begin
  27.   , wait_time_milli
  28. /

效果如下:


如果io没有问题,那么就要分析方向就要转向是不是内存用完了,大量换页导致?
当然大部分是由于sql性能较差导致。

上一篇:oracle 11g 客户端安装
下一篇:提到enq: TX - row lock contention,你会想到什么