oracle数据库I/O slave wait 导致CPU 100%解决办法

某客户的一个rac 节点CPU使用率为100%,导致整体系统运行缓慢。    通过mpstat命令检查发现系统CPU使用率为100%,系统的CPU idle几乎为0. 导致系统整体负载极高,如下:

[oracle@ecdbs1 ~]$ mpstat 1 10
Linux 2.6.9-89.5AXS2largesmp (ecdbs1)   2014年10月04日
 
09时52分39秒  CPU   %user   %nice %system %iowait    %irq   %soft   %idle    intr/s
09时52分40秒  all   82.42    0.00   17.52    0.00    0.00    0.06    0.00   5321.00
09时52分41秒  all   82.63    0.00   17.30    0.00    0.00    0.06    0.00   3562.00
09时52分42秒  all   81.52    0.00   18.36    0.00    0.00    0.13    0.00   6107.07
09时52分43秒  all   82.36    0.00   17.45    0.00    0.06    0.13    0.00   4194.06
09时52分44秒  all   82.47    0.00   17.53    0.00    0.00    0.00    0.00   3551.52
09时52分45秒  all   82.63    0.00   17.24    0.00    0.00    0.13    0.00   3553.54
09时52分46秒  all   83.29    0.00   16.71    0.00    0.00    0.00    0.00   3526.73
09时52分47秒  all   82.48    0.00   17.40    0.00    0.00    0.13    0.00   3553.54
09时52分48秒  all   82.47    0.00   17.35    0.00    0.06    0.13    0.00   6888.00
09时52分49秒  all   82.15    0.00   17.78    0.00    0.00    0.06    0.00   5739.60
Average:        all   82.44    0.00   17.46    0.00    0.01    0.08    0.00   4601.00

由于这个主机节点上跑了2个实例,其中一个是rac的实例,另外一个是单实例。通过top 检查发现cpu基本上都是被该节点上的
单实例的进程所消耗,如下:

top - 16:34:59 up 747 days, 20:49,  9 users,  load average: 139.68, 140.21, 140.37
Tasks: 861 total, 141 running, 720 sleeping,   0 stopped,   0 zombie
Cpu(s): 82.4% us, 17.5% sy,  0.0% ni,  0.0% id,  0.0% wa,  0.0% hi,  0.1% si
Mem:  66002524k total, 63895780k used,  2106744k free,   165428k buffers
Swap: 12289716k total,   503928k used, 11785788k free,  4302948k cached
 

根据进程号,定位到相关的user process:

SQL> oradebug setospid 20377
Oracle pid: 115, Unix process pid: 20377, image: oracle@ecdbs1
SQL> select s.sid,s.serial#,p.spid from v$process p,v$session s where p.addr=s.paddr and p.spid=17000;
 
       SID    SERIAL# SPID
---------- ---------- ------------------------------------
      2586        959 17000
 
SQL> !ps -ef|grep 17000
oracle    5438  3305  0 17:11 pts/7    00:00:00 /bin/bash -c ps -ef|grep 17000
oracle    5440  5438  0 17:11 pts/7    00:00:00 grep 17000
oracle   17000     1 14 Sep27 ?        17:18:09 oracleewms (LOCAL=NO)
SQL> oradebug setospid 17000
Oracle pid: 40, Unix process pid: 17000, image: oracle@ecdbs1
SQL> show parameter instance_name
 
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
instance_name                        string                            ewms
SQL> oradebug dump processstate 10
Statement processed.
SQL> oradebug close_trace
oradStatement processed.
SQL> ebug tracefile_name
/opt/oracle/admin/ewms/udump/ewms_ora_17000.trc
SQL> !

通过检查发现,存在大量的I/O salve wait 等待事件,如下:

SQL> select distinct sql_id,event,count(1) from v$session where event like 'i/o%' group by sql_id,event order by 3;
 

更要命的是,我从top 命令的结果中挑选了几个cpu消耗高的进程,检查发现其对应的等待事件都是这个。
从上面的查询来看,这部分会话执行的SQL都类似,开始我怀疑难道是会话执行的SQL有问题 ? 通过dump定位到SQL语句和执行计划,发现执行计划是ok,效率还挺高。

============
Plan Table
============
-------------------------------------------------------------------------+-----------------------------------+
| Id  | Operation                             | Name                     | Rows  | Bytes | Cost  | Time      |
-------------------------------------------------------------------------+-----------------------------------+
| 0   | SELECT STATEMENT                      |                          |       |       |   708 |           |
| 1   |  TEMP TABLE TRANSFORMATION            |                          |       |       |       |           |
| 2   |   LOAD AS SELECT                      |                          |       |       |       |           |
| 3   |    VIEW                               |                          |     1 |   154 |   681 |  00:00:09 |
| 4   |     NESTED LOOPS                      |                          |     1 |   137 |   681 |  00:00:09 |
| 5   |      VIEW                             |                          |  1468 |  126K |   681 |  00:00:09 |
| 6   |       MERGE JOIN                      |                          |  1468 |  100K |   681 |  00:00:09 |
| 7   |        TABLE ACCESS BY INDEX ROWID    | MLOS_SM_INSTIINFO        |     1 |    27 |    10 |  00:00:01 |
| 8   |         INDEX FULL SCAN               | PK_INSTIINFO             |    46 |       |     2 |  00:00:01 |
| 9   |        SORT JOIN                      |                          |   16K |  697K |   671 |  00:00:09 |
| 10  |         TABLE ACCESS FULL             | EWMS_INV_TRANSACTION     |   16K |  697K |   669 |  00:00:09 |
| 11  |      TABLE ACCESS BY INDEX ROWID      | EWMS_BASE_CARGO          |     1 |    49 |     0 |           |
| 12  |       INDEX UNIQUE SCAN               | PK_EWMS_BASE_CARGO       |     1 |       |     0 |           |
| 13  |   COUNT                               |                          |       |       |       |           |
| 14  |    VIEW                               |                          |     1 |   398 |    27 |  00:00:01 |
| 15  |     SORT ORDER BY                     |                          |     1 |   383 |    27 |  00:00:01 |
| 16  |      HASH JOIN OUTER                  |                          |     1 |   383 |    26 |  00:00:01 |
| 17  |       HASH JOIN OUTER                 |                          |     1 |   317 |    17 |  00:00:01 |
| 18  |        HASH JOIN OUTER                |                          |     1 |   251 |    14 |  00:00:01 |
| 19  |         HASH JOIN OUTER               |                          |     1 |   185 |    10 |  00:00:01 |
| 20  |          HASH JOIN OUTER              |                          |     1 |   119 |     7 |  00:00:01 |
| 21  |           VIEW                        |                          |     1 |    53 |     3 |  00:00:01 |
| 22  |            HASH GROUP BY              |                          |     1 |    62 |     3 |  00:00:01 |
| 23  |             VIEW                      |                          |     1 |    62 |     2 |  00:00:01 |
| 24  |              TABLE ACCESS FULL        | SYS_TEMP_0FD9D6835_CC9CBC|     1 |    90 |     2 |  00:00:01 |
| 25  |           VIEW                        |                          |     1 |    66 |     3 |  00:00:01 |
| 26  |            HASH GROUP BY              |                          |     1 |    78 |     3 |  00:00:01 |
| 27  |             VIEW                      |                          |     1 |    78 |     2 |  00:00:01 |
| 28  |              TABLE ACCESS FULL        | SYS_TEMP_0FD9D6835_CC9CBC|     1 |    90 |     2 |  00:00:01 |
| 29  |          VIEW                         |                          |     1 |    66 |     3 |  00:00:01 |
| 30  |           HASH GROUP BY               |                          |     1 |    92 |     3 |  00:00:01 |
| 31  |            FILTER                     |                          |       |       |       |           |
| 32  |             VIEW                      |                          |     1 |    92 |     2 |  00:00:01 |
| 33  |              TABLE ACCESS FULL        | SYS_TEMP_0FD9D6835_CC9CBC|     1 |    90 |     2 |  00:00:01 |
| 34  |         VIEW                          |                          |     1 |    66 |     3 |  00:00:01 |
| 35  |          HASH GROUP BY                |                          |     1 |    92 |     3 |  00:00:01 |
| 36  |           FILTER                      |                          |       |       |       |           |
| 37  |            VIEW                       |                          |     1 |    92 |     2 |  00:00:01 |
| 38  |             TABLE ACCESS FULL         | SYS_TEMP_0FD9D6835_CC9CBC|     1 |    90 |     2 |  00:00:01 |
| 39  |        VIEW                           |                          |     1 |    66 |     3 |  00:00:01 |
| 40  |         HASH GROUP BY                 |                          |     1 |    78 |     3 |  00:00:01 |
| 41  |          VIEW                         |                          |     1 |    78 |     2 |  00:00:01 |
| 42  |           TABLE ACCESS FULL           | SYS_TEMP_0FD9D6835_CC9CBC|     1 |    90 |     2 |  00:00:01 |
| 43  |       VIEW                            |                          |     1 |    66 |     8 |  00:00:01 |
| 44  |        HASH GROUP BY                  |                          |     1 |   109 |     8 |  00:00:01 |
| 45  |         NESTED LOOPS                  |                          |     1 |   109 |     7 |  00:00:01 |
| 46  |          NESTED LOOPS                 |                          |     1 |    82 |     6 |  00:00:01 |
| 47  |           TABLE ACCESS FULL           | EWMS_INV_LOGINVENTORY    |   640 |   21K |     6 |  00:00:01 |
| 48  |           TABLE ACCESS BY INDEX ROWID | EWMS_BASE_CARGO          |     1 |    49 |     0 |           |
| 49  |            INDEX UNIQUE SCAN          | PK_EWMS_BASE_CARGO       |     1 |       |     0 |           |
| 50  |          TABLE ACCESS BY INDEX ROWID  | MLOS_SM_INSTIINFO        |     1 |    27 |     1 |  00:00:01 |
| 51  |           INDEX UNIQUE SCAN           | PK_INSTIINFO             |     1 |       |     0 |           |
-------------------------------------------------------------------------+-----------------------------------+

由此可以判断,应该跟SQL本身的效率是没有关系的。从dump的processstate strace还发现了一点有价值的信息:

WARNING:io_submit failed due to kernel limitations MAXAIO for process=0 pending aio=0
WARNING:asynch I/O kernel limits is set at AIO-MAX-NR=65536 AIO-NR=65529
WARNING:1 Oracle process running out of OS kernelI/O resources aiolimit=0
ksfdgo()+1488<-ksfdaio1()+9848<-kfkUfsIO()+594<-kfkDoIO()+631<-kfkIOPriv()+616<-
 
............

根据这个AIO的告警,mos上一搜,果然是跟AIO有关系。例如存在类似这样的bug:
Bug 9949948 Linux: Process spin under ksfdrwat0 if OS Async IO not configured high enough
最后建议调整Linux AIO参数之后目前一切正常。
简单记录一下,供大家参考!

时间: 2024-11-02 14:45:08

oracle数据库I/O slave wait 导致CPU 100%解决办法的相关文章

httpd.exe占用cpu 100%解决办法

网上说了是我们没有限制apache的并发数与子进行数,后来百度得出下面代码 编辑httpd.conf  代码如下 复制代码 Win32DisableAcceptEx ##加入这行 ThreadsPerChild 250 MaxRequestsPerChild 0 重启apache就解决了. MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量.在处理"MaxRequestsPerChild 数字"个请求之后,子进程将会被父进程终止,这时候子进程占用的内存

file_get_contents 导入CPU 100%解决办法

运行 Nginx.PHP-CGI(php-fpm) Web服务的 Linux 服务器,突然系统负载上升,使用 top 命令查看,很多 php-cgi 进程 CPU 使用率接近100%.后来,我通过跟踪发现,这类情况的出现,跟 PHP 的 file_get_contents() 函数有着密切的关系. 大.中型网站中,基于 HTTP 协议的 API 接口调用,是家常便饭.PHP 程序员们喜欢使用简单便捷的 file_get_contents("http://example.com/") 函

oracle数据库报错Instance immediate crash after open解决办法

一个朋友公司的数据库出现异常,没有备份. 数据库open之后很快就crash掉,如下的alert log的信息: Tue Jul 08 22:53:03 2014 SMON: enabling cache recovery [13803] Successfully onlined Undo Tablespace 2. Undo initialization finished serial:0 start:7751194 end:7751284 diff:90 (0 seconds) Verify

不正当使用HashMap导致cpu 100%的问题追究

因最近hashmap误用引起的死循环又发生了一些案例,左耳朵浩子写了一篇blog 疫苗:Java HashMap的死循环,看了一下,大家的分析如出一辙.这篇blog也是好几年前写的了,之前在平台技术部的博客上贴过,随着组织结构的调整,那个博客可能不再维护,把这篇文章在这儿也保存一下. 李鹏同学在blog里写了篇关于HashMap死锁模拟的文章: http://blog.csdn.net/madding/archive/2010/08/25/5838477.aspx 做个纠正,那个不是死锁问题,而

WindowsXP系统CPU使用率100%解决办法

  经常出现CPU占用100%的情况,主要问题可能发生在下面的某些方面: CPU占用率高的九种可能 1.防杀毒软件造成故障 由于新版的KV.金山.瑞星都加入了对网页.插件.邮件的随机监控,无疑增大了系统负担.处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,或者,升级你的硬件配备. 2.驱动没有经过认证,造成CPU资源占用100% 大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因.处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号.版本.

Sqlserver2005附加数据库时出错提示操作系统错误5120的解决办法

问题描述 Sqlserver2005附加数据库时出错提示操作系统错误5120的解决办法 用的是2005数据库,数据库是从另一台机子上考来的 在附加时 报如下错: (http://img.ask.csdn.net/upload/201506/01/1433143611_783759.png) 解决方案 你把文件bright.mdf复制到d:data试试看.保证这个文件夹有足够的权限.

SQLSERVER 导致CPU 100%怎么解决!

问题描述 网站10分钟内同时在线3500人,导致CPU100%.服务器X3330CPU.4G内存是不是数据库结构的还是SQLSERVER的优化没做好?求助 解决方案 解决方案二:有可能,或者用多台sqlserver做cluster?解决方案三:引用1楼findcaiyzh的回复: 有可能,或者用多台sqlserver做cluster? UP解决方案四:换CPU!解决方案五:对sql语句优化减少cpu占用时长换个强大的cpu或者考虑多服务器集群模式集群我没用用过但集群可以解决这个问题解决方案六:用

使用C#控制台程序连接Oracle数据库出现的问题,请各位给予解决,谢谢

问题描述 在用控制台编写程序连oracle数据库过程中,第三个using是问题所在,也就是说无法把oracleClient加载到Data包里?各位,能不能帮我解决这个问题,急,多谢!!!usingSystem;usingSystem.Data;usingSystem.Data.OracleClient;namespaceLinkOracleTest{classProgram{staticvoidMain(string[]args){stringmyConnString="userid=****;

WordPress数据库修改表前缀导致错误及解决办法

WordPress 默认的数据表前缀是『wp_』:(注:这是默认的数据表,如果安装了其他插件有可能生成其他 wp_ 开头的数据表)     wp_commentmeta    wp_comments    wp_links    wp_options    wp_postmeta    wp_posts    wp_terms    wp_term_relationships    wp_term_taxonomy    wp_usermeta    wp_users 第一步:那么第一件事就是把