2023-01-04 15:28阅读: 491评论: 0推荐: 0

【转载】一次ORACLE数据库高IO进程的排查处理

问题描述

一个忙碌的早上,某客户来电,业务部门反映系统反应很慢,正是早上业务最忙碌时刻,需要抓紧排查处理……

排查:
–登陆系统后,按ISO流程,查看OS及数据库ACTIVE会话/等待事件等,可以发现主机的CPU 较低,IO使用率较高,数据库所在磁盘iostat输出来看,%util列接近100%,其它几列指标的值也不乐观;
–数据库中ACTIVE会话未见明显异常等待事件,也无BLOCKING_SESSION。
–于是通过操作系统层面找到IO使用量高的进程,在数据库中根据进程OSPID查到会话信息,快速确认相关用户及SQL,提交给应用程序维护厂商了。
–应用程序维护厂商找了一通后说不是他们的业务SQL,客户一时陷入了迷茫,因为正常这个数据库上只有这个业务,并且此进程的用户名也是与此应用程序对应…………
–接下来,通过数据库会话信息中的MACHINE列值来查找应用程序主机也没结果,皮球又回到了我这里。
–于是从数据库主机层面,通过OSPID信息,结合NETSTAT,找到源端主机IP,提交用户
–很快反馈找到对应程序,是新上的某大数据分析平台,定时从生产环境数据库抓取数据的,后面协商减少数据抓取频率及大量数据抓取动作放晚上业务闲时进行,问题解决。

解决方案

复制代码
1.查看主机的IO资源及使用IO多的进程
[root@ABCDE ~]# iostat -xm 2 20
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.32    0.00    2.43    3.86    0.00   85.38

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
^^
VxVM15000        88.50     0.00 1253.00  126.50   155.40     1.18   232.46     4.34    3.11    3.36    0.70   0.72  99.45
VxVM15001         0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

[root@ABCDE ~]# pidstat -d 2
Linux 2.6.32-642.el6.x86_64 (ABCDE)         01/17/2020      _x86_64_        (32 CPU)

09:40:59 AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
^^
09:41:01 AM     14301  40113.46      0.00      0.00  oracle
09:41:01 AM     17504  77773.08      0.00      0.00  oracle
09:41:01 AM     23568  33665.38      0.00      0.00  oracle


09:41:01 AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
^^
09:41:03 AM     14301  45416.00      0.00      0.00  oracle
09:41:03 AM     17504  80016.00      0.00      0.00  oracle
09:41:03 AM     23568  73636.00      0.00      0.00  oracle
09:41:03 AM     23574  38964.00      0.00      0.00  oracle


09:41:19 AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
^^
09:41:21 AM     14301  81040.00      0.00      0.00  oracle
09:41:21 AM     25379      0.00     26.00      0.00  tnslsnr


#####################
2.通过查到的高IO的OS 进程ID,在数据库中排查相应的进程信息
SQL> select  b.spid,a.sid,a.username,a.program,a.machine,a.sql_id 
  2  from v$session a,v$process b 
  3  where a.paddr=b.addr  and b.spid=14301;

SPID                            SID USERNAME   PROGRAM                   MACHINE                   SQL_ID
------------------------ ---------- ---------- ------------------------- ------------------------- --------------------
14301                           678 AAABBB     oracle@ABCDE79407 (TNS   ABCDE79407              d1dbvc9xrad67
                                               V1-V3)


SQL> select sql_text from v$sql where sql_id='d1dbvc9xrad67';

SQL_TEXT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT "AAAA","BBBBB","AMT" FROM "AAABBB"."CHG_1234567" "D"

#############
3.通过OS 进程信息,结合netstat命令来找到对应的源端IP
[oracle@ABCDE ~]$ netstat -anp|grep 14301
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
**tcp        0      0 ::ffff:192.168.1.250:1521    ::ffff:192.168.1.111:44418  ESTABLISHED 14301/oracleaaaaanew** 
[oracle@ABCDE ~]$ netstat -anp|more
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:26880             0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -        
复制代码

 

posted @   雪竹子  阅读(491)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起