数据数连接过大的问题

     关于应用服务器经常报数据库连接过大的问题,本人觉得应该从以下几方面来着手:

                1。数据库的连接池配置是否正确:即有没有及时回收空闲的链接,连接的超时时间,及连接池的最大数是否      设置过于合理。

     2、检查以下数据库的执行sql,是否会产生慢查询,比如频繁的插入和删除对数据库的阻塞很有影响,以及一      些查询会产生慢请求,将使用数据库产生过长的连接

      最近的项目经常会报应用连接过大,开始以为是数据库的连接池配置的问题,因此将原来的proxool换成              dbcp,运行一些时间依然会有此问题,最后换成cp30问题依然出现。最后考虑到应该是程序中的sql造成的,后来   dba提供了数据库的执行报告,发现会频繁的去数据库查询序列号来作为接口的流水号,此处进行了优直接利用时  间蹉来作为流水号,另外就是用户的session信息的存储,用户每次进来会分配一个sesision进行插入数据库,当点  击其它模块时又要查询其session是否过期,最后用户退出时又要删除session。其频繁的语句如下:

           

   1、 delete from T_CHMO_SESSION where SESSION_SP_CODE = :1 and SESSION_KEY = :2
 
      2、 select SESSION_ID, SESSION_SP_CODE, SESSION_KEY, SESSION_START_TIME, SESSION_END_TIME, SESSION_USER_ACCOUNT, SESSION_IMSI, SESSION_AREA_CODE, SESSION_PAY_TYPE, SESSION_PROVINCE_CODE, SESSION_PROVINCE_NAME, SESSION_CITY_NAME from T_CHMO_SESSION where SESSION_SP_CODE = 'eshore' and SESSION_KEY = '0'、
    查看其t_chmo_session表有700多万条记录,且没有针对session_sp_code和session_key作为唯一索引,造成其sql在此处是长连接。
      解决方案是:对session_sp_code和session_key作为组合索引。另外对于session信息直接放入分布式缓存,不写数据库,此处有点风险,缓存服务器坏掉,则用户登录后就超时,最好的做法是用户进入后插入数据库,然后将信息放入缓存中,每次从缓存中取,取不到再去数据库取,由于建立了组合索引,因此查询和删除上会有很大提高。
    经过以优化后发现其连接数确实小了很多。即使并发有200多,其数据库连接也只有20左右.ok问题解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值