记一次线上sql慢速的总结

内容纲要

前言

今天上线了一个功能后,大波的慢速查询告警前来报道,查询语句其实很简单:MARKDOWN_HASH49326a32d44831610ad16a31a694b912MARKDOWNHASH,上线前有单独查看此sql的性能,测试200ms左右,看着没问题了,而且代码中有加缓存。自以为万事大吉,现实却狠狠的打脸了--!

原因分析

原始代码

代码分析

咋看貌视没什么问题,仔细看其实会发现问题。

  1. strtotime函数的第二个参数的值传错了,正常应该时间截,而这里传成了日期,导致日期计算错误
  2. 会存在缓存穿透的问题

解决方案

  1. strtotime(‘today 00:00:00, -7 day’)
  2. 当为空值时,给一个默认值,获取的时候再判断一下值返回

优化后的代码

原有代码会存在的问题

  1. 单个查询来看不会有慢速,当并发上来的时候会有大量的相似查询,打到数据库,这时会让数据库压力过大
  2. 缓存穿透导致,没有数据的查询每次都会走数据库查询,而不会走缓存,这个时候的查询其实是无效的,直接返回即可
  3. 单个问题一旦扩大化,就会引起雪崩效应,在当前这个大数据时代对开发的基本功底还是有一定的考验的

发表评论

邮箱地址不会被公开。 必填项已用*标注

× 8 = 80