
前几天新疆某医院客户的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中
通过中亦DBaaS A9 监控了3-4天发现,客户的Pacs系统进程监控正常了。

这套系统的进程数据始终维持在200上下了。
实际上客户的另外一套emr系统也有类似问题,其进程更高,超过1600。同样的方法处理之后,目前稳定在600上下。
如果你还有什么奇怪的问题或者想了解 数据库智能化监控诊断系统,可以私信联系我!




