【转载】一次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 -
喜欢请赞赏一下啦^_^
微信赞赏

支付宝赞赏

分类:
标签:
,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步