一次ORACLE数据库高IO进程的排查处理

一次ORACLE数据库高IO进程的排查处理

还不算晕 2021-02-14 10:22:31 394 收藏 2
分类专栏: ORACLE 故障排查
版权

ORACLE 故障排查
专栏收录该内容
142 篇文章0 订阅
订阅专栏
问题:
一个忙碌的早上,某客户来电,业务部门反映系统反应很慢,正是早上业务最忙碌时刻,需要抓紧排查处理……

排查:
–登陆系统后,按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 -
————————————————
版权声明:本文为CSDN博主「还不算晕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/haibusuanyun/article/details/104095461

原文地址:https://www.cnblogs.com/yaoyangding/p/15566308.html