• oracle自启动的p***并行进程过多导致的process进程超限问题


    某项目现场反馈无任何业务连接,查询v$process仍有500多个进程;

    查询会话连接,也只有十几个会话;

    select b.MACHINE, b.PROGRAM,b.USERNAME, count(*)

    from v$process a, v$session b

    where a.ADDR = b.PADDR

    and b.USERNAME is not null

    group by b.MACHINE, b.PROGRAM,b.USERNAME

    order by count(*) desc;

    以下sql查询(将b.USERNAME is not null去掉)也只查询出100+条连接;

    select b.MACHINE, b.PROGRAM,b.USERNAME, count(*)

    from v$process a, v$session b

    where a.ADDR = b.PADDR

    group by b.MACHINE, b.PROGRAM,b.USERNAME

    order by count(*) desc;

    查询是否有远程连接ps -ef|grep "odw (LOCAL=NO)"|wc -l,也没查到;

    但是查ps -ef|grep odw,发现p***进程数总共400+个,大概定位到了原因;

    本以为是有数据泵或者并行查询在跑,经业务确认没有任何并行跑;

    后发现是parallel_min_servers参数是实例启动时自启动的并行进程,这些进程供并行语句使用;PARALLEL_MIN_SERVERS=cpu_count*parallel_threads_per_cpu*2,而parallel_threads_per_cpu默认为1,一般不会手动修改,所以PARALLEL_MIN_SERVERS可以说是由cpu_count确定;

     

    此现场由于有将近20个实例跑在一台主机,cpu配了112物理core,开了超线程为224,而cpu_count为主机cpu线程数,故为224

    解决方法:

    直接减小直接减小parallel_min_servers并重启库没有效果,起来的ora_p进程数量还是cpu_count*parallel_threads_per_cpu*2,需要手动将cpu_count数调小,根据20个实例的负载大小来调整每个实例的cpu_count,并重启库(cpu_count不需要重启生效,但是已经启动的p***进程并不会自动释放,需要重启释放)

  • 相关阅读:
    秋招面试!2022冲刺必看这1000道Java岗最新面试核心题,冲刺金九银十!!
    selenium自动化测试入门 —— 键盘鼠标事件ActionChains
    Vue列表渲染
    MySQL 8.0.34安装教程
    一文读懂Kotlin的数据流
    C# this关键字的作用
    电动垂直起降飞行器的发展现状
    Vue3中的setup函数
    【m98】视频帧的 jitterbuffer 1:
    计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里
  • 原文地址:https://blog.csdn.net/du18020126395/article/details/128204181