隐式转换导致慢sql引起的性能问题

背景:

     环境上有个接口压测吞读量一直上不去,该接口的逻辑大概是查询我方数据库2个表,然后调用外围2个接口    

分析过程:

  1.问题1(gap时间)

    a.  查看调用链发现调用链存在大量gap时间,这种gap时间一般就是资源没了,比如等待获取连接池,或者gc回收等待,归根接底都是资源问题       

b. 取堆栈日志,发现大量线程sleep在这边waiting on condition

c. 查看源码发现项目组使用的第三方jar包,有这样的代码,在http请求后,在finally里使用了sleep ,大致意思就是 如果调用花费200ms,就需要sleep800ms

image.png

  2.问题2(隐式转换)

d.修复代码屏将这个intervalTimeMills设置为1,此时代码就不会走这个sleep,修复后调用链如下,第三方接口时间确实提升,但是性能确实还是提升不了,继续看调用链和堆栈日志分析

发现sql执行特别慢,以及发现线程卡在了socket read

image.png

取该sql分析,发现因为字符集编码导致隐式转换,不走索引了。

image.png

image.png

结论:

    1.代码的问题,finally导致每次都sleep几百ms

    2.表字符集不同,导致出现了隐式转换,索引失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值