zoukankan      html  css  js  c++  java
  • .NET 连接oracle 报错Connection request timed out问题排查分析

    问题描述

    在一个老的.NET系统中,每天到运行到下午或者晚上就会出现连接数据库超时的问题Connection request timed out;针对该BUG进行了排查;

    通过日志记录,后台程序分析,最终定位到原来是底层数据库帮助类未关闭连接导致,连接数不断增加,闲置连接也增大,最终达到最大连接池,导致无连接可用;

    排查处理思路:

    将程序中配置文件中最大线程池设置调大,max pool size=500,最终还是会出现上述问题,最终定位是连接未关闭导致;

    通过数据库会话数查询进行分析:(GV$Session为集群中所有的,V$Session为本服务器)

    --查看会话数排序  GV$Session 集群所有连接数数据
    SELECT *
    FROM   (SELECT PROGRAM, COUNT(1) AS LINKTOTAL
            FROM   GV$SESSION
            --WHERE PROGRAM='w3wp.exe' --连接进程
            GROUP  BY PROGRAM
            ) A
    ORDER  BY LINKTOTAL DESC;

    解决方案:

    ExecuteNonQuery中关闭连接

    dataset中增加try catch finally中关闭连接

     

    ExecuteScalar/ExecuteXmlReader等方法均需要增加关闭;

    ExecuteReader使用:reader使用完成需要关闭

    注意:DataReader用完后一定要关闭!DataReader是独占连接的,所以用DataReader要快读快取快关闭!

    这里提醒各位开发人员在后续的开发中,datareader读取完数据,一定要手动关闭reader;切记切记!!!

    其他补充

    如果查询一定时间内无活动的连接

    --查询超过30分钟未活动的会话  如果查集群所有则使用GV$SESSION表
    SELECT SID, SERIAL#, MODULE, STATUS, S.LAST_CALL_ET,machine
    FROM   V$SESSION S
    WHERE  1 = 1
           AND S.USERNAME IS NOT NULL
          AND S.LAST_CALL_ET >= 30*60
           --AND PROGRAM = 'w3wp.exe'
           AND S.STATUS = 'INACTIVE'
    ORDER  BY S.LAST_CALL_ET DESC;
    字段说明:
    LAST_CALL_ET:上次执行sql后到当前时间间隔的时间(单位为秒)
    machine:机器名
  • 相关阅读:
    use paramiko to connect remote server and execute command
    protect golang source code
    adjust jedi vim to python2 and python3
    install vim plugin local file offline
    add swap file if you only have 1G RAM
    datatables hyperlink in td
    django rest framework custom json format
    【JAVA基础】网络编程
    【JAVA基础】多线程
    【JAVA基础】String类的概述和使用
  • 原文地址:https://www.cnblogs.com/yx007/p/13215180.html
Copyright © 2011-2022 走看看