• 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***进程并不会自动释放,需要重启释放)

  • 相关阅读:
    LeetCode Top100:两数之和-java版
    ECG-Emotion Recognition(情绪识别)-- 数据集介绍WESAD&DREAMER
    LeetCode235. Lowest Common Ancestor of a Binary Search Tree
    MacOS开发环境搭建
    人工神经网络的训练步骤,神经网络常用训练方法
    【SpringBoot整合NoSql】-----MongoDB篇
    Promise和async-await的区别
    区间DP day42
    PyQt5学习一(环境搭建)
    pandas定位选取某列某指标最大值所在的行记录,比如月底
  • 原文地址:https://blog.csdn.net/du18020126395/article/details/128204181