如何用一个SQL“搞挂”一个服务模块

 

为了批量获取商品规格信息,寡人写下了如下代码和SQL~

/**
      * 批量获取商品规格信息
      * @Description:
      * @author:Zhixw
      * @date:2017年11月27日下午5:33:32
      * @version:1.0
      * @param item_code
      * @return
      */
     List<Map<String,String>> getAllItemDTinfo(@Param("list") List<Map<String,String>> list);
<select id="getAllItemDTinfo" resultType="java.util.Map">
        select ITEM_CODE,UNIT_CODE,DT_INFO from tunit
        <where>
            <foreach collection="list" item="item" open="(" separator=") or (" close=")">
                item_code = #{item.item_code} and unit_code = #{item.unit_code}
            </foreach>
        </where> 
</select>

然后~  本地自测也没有问题,信心满满的就上去了。。。。。回头想起来,幸好是测试环境。否则不炸了才怪

话说回来,为什么要写这样的SQL呢?原因就是为了优化,之前在for循环中查找商品规格,然后数据量大的时候不行了 ,一个普通的小SQL被执行了几百次。用上面的方式改成批量获取的方式,数据量小的时候也没有问题,当然数据量大的时候,这个批量获取的SQL更加可怕,可以搞挂一个模块的微服务

好端端的微服务

寡人所操作的interaction模块,由绿油油的“UP”状态变成了~大红色的“DOWN”。(抱歉当时忘记截图保存  先那这个凑吧)

然后我们再看看日志:

 

 看日志,好像是连接池获取不到了,然后我们刚开始以为是其他的问题,尝试去解决,发现怎么都不能彻底解决,因为每次这个模块重启或者发布之后,这种现象就消失了,然后运行一段时间之后,老毛病又犯了,

然后感觉应该不是连接池的问题,运行了好几个月一直没有动过,怎么会好端端的突然之间就坏了呢,再仔细看了下日志,其实细心的人会发现日志中已经指出了大概发生问题的地方。所以我果断把调用那SQL的地方注释掉之后,再重新发布之后,一切恢复正常,没有再出毛病了

这个SQL在数据量比较大 的时候,应该会执行的非常缓慢,一直占用着数据库资源,然后模块也就挂了

posted @ 2017-12-03 21:14  Bruin.wang  阅读(205)  评论(0编辑  收藏  举报