暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

太奇葩了!v$process比v$session多400+,但v$session又查不到?

前几天新疆某医院客户的Oracle 19.3 遇到个很奇怪的问题。

通常对于这种比较怪异的问题,就很容易引起我的兴趣。 

通过select count(1) from v发现记录比process发现记录比vsession 多很多。

后面我systemstate dump看了下,sid 0的居然有400多。

按照客户的说法,他们这个pacs系统,进程数也就200上下。

很明显目前v$process的发出来超过600了,而他们这套库的process参数设置才800.

这也难怪客户不得不慌,据说客户之前都是人肉去kill -9 进程。

开始我严重怀疑是oracle 19.3的bug「毕竟这个版本很坑」,本来想查一下呢,发现Oracle MOS新版本做的跟S一样,完全没法用,就索性不看了。

那么能不能找到根源,或者帮客户根治了?

第二抽空出来,我又远程看了一会儿,首先做了个简单processtate dump没法发现什么特殊的内容。

搜了几个sid=0的进程,本来想strace一下,发现客户没有安装工具,好吧。

那只能做个short stack先看看情况了。

SQL> oradebug setospid 66633
Oracle pid: 137, Unix process pid: 66633, image: oracle@pasc
SQL> 
SQL> oradebug short_stack;
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+200<-__sighandler()<-read()+14<-snttread()+16<-nttfprd()+354<-nsbasic_brc()+399<-nioqrc()+438<-opikndf2()+999<-opitsk()+905<-opiino()+936<-opiodr()+1202<-opidrv()+1094<-sou2o()+165<-opimai_real()+422<-ssthrdmain()+417<-main()+256<-__libc_start_main()+245
SQL>

从上面ntt相关的几个函数都是跟网络相关,再接着看opitsk我发现这个是网络接口相关的two task函数。

看到这里我突然明白了。

后面我跟沟通之后,果断在sqlnet.ora中加入disable_oob=true 然后reload listener。

然后将v$process中但在v$session中不存在的这部分进程批量kill掉。

通过中亦DBaaS A9 监控了3-4天发现,客户的Pacs系统进程监控正常了。

这套系统的进程数据始终维持在200上下了。

实际上客户的另外一套emr系统也有类似问题,其进程更高,超过1600。同样的方法处理之后,目前稳定在600上下。

如果你还有什么奇怪的问题或者想了解 数据库智能化监控诊断系统,可以私信联系我!

文章转载自Roger的数据库专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论