一条慢SQL导致购物车服务无法使用的解决方案

 更新时间:2018年12月06日 11:23:21   作者:Sam哥哥  
今天小编就为大家分享一篇关于一条慢SQL导致购物车服务无法使用的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

概述

之前处理过一个购物车故障,觉得还挺经典的,在这里跟大家分享一下。这个故障直接导致前端添加购物车、获取用户购物车列表等操作都失败了。购物车是入口,一旦出现问题,影响极其严重。

临时处理

购物车服务所有接口,是有打印响应时间的,发现比平时慢了很多。由于情况已是十万火急了,我只能先重启购物车,缓冲一下,然后利用这段缓冲时间,赶紧定位问题。

问题定位

之前对购物车应用基于Spring Cloud微服务化了,已经稳定运行了几个月了,且当时上线前也经过压测,接口性能是没问题的。怎么突然之间就有问题了呢?根据以往的经验,大部分故障都是SQL语句引起的,因此首先导出数据库的所有慢SQL(腾讯云有导出慢SQL的工具)语句,发现大部分慢查询都是来自库存查询的SQL语句,有些甚至是10秒钟才执行完。

后来仔细一看,库存慢查询语句,要查询库存的商品比平时多很多。商品个数少的话,这条语句还是非常快的,一旦多了就开始慢了。

解决方案

由于库存计算体系的历史原因,这条SQL是很难优化的。情况又是十万火急的,大老板一直在问咋回事。因此临时改代码,将商品库存放到Redis缓存起来。购物车服务的话,是允许库存数据不实时的,因为后面的结算和支付会实时计算库存,库存不足的时候,会提示用户的。

注意:

  • 由于购物车是入口,流量很大,而从购物车到结算页再到支付,由于有一个操作步骤,因此结算页和支付页的流量是没有购物车那么大的;
  • 部分用户购物车上的商品数据是非常多的,但是未必都会买,用户也可以勾选要买的商品,然后下单;
  • 部分用户没有清理购物车失效商品的习惯,导致购物车上的商品非常多。

终极解决方案

将库存服务独立出去,将商品库存数据放置到缓存,并引入实时刷新缓存中库存数据的机制,让缓存中的数据尽量保证新鲜。这样的话,查询库存的时候,大部分都可以从缓存中获取,不会穿透到数据库上。

补充

我们对接口进行压测的时候,部分场景下,要考虑入参的个数,不能简单的用几个数据压测,觉得性能OK就不管了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • Hive常用日期格式转换语法

    Hive常用日期格式转换语法

    这篇文章主要为大家介绍了Hive常用日期格式转换语法的操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 使用Navicat导入和导出sql语句的图文教程

    使用Navicat导入和导出sql语句的图文教程

    Navicat是MySQL非常好用的可视化管理工具,功能非常强大,能满足我们日常数据库开发的所有需求,下面这篇文章主要给大家介绍了关于使用Navicat导入和导出sql语句的相关资料,需要的朋友可以参考下
    2023-03-03
  • 本地SQL注射攻略分析曝光

    本地SQL注射攻略分析曝光

    以后会陆续给大家讲一些本人的入侵经验,一天学一点,这东西虽然我玩腻了,但是还是很想给大家入门时的一些帮助。本地SQL注射,可能很多朋友都没有听说过,下面biweilun为大家讲解下概念及其应用
    2008-07-07
  • windows环境下python连接openGauss数据库的全过程

    windows环境下python连接openGauss数据库的全过程

    openGauss是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库,这篇文章主要给大家介绍了关于windows环境下python连接openGauss数据库的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 浅析sql server 公共表达式的简单应用

    浅析sql server 公共表达式的简单应用

    本文主要对sql server 公共表达式的简单应用进行介绍,具有一定的参考价值,有需要的可以看下
    2016-12-12
  • 最新DataGrip2020.2.x破解版激活码的步骤详解(支持Mac/Windows/Linux)

    最新DataGrip2020.2.x破解版激活码的步骤详解(支持Mac/Windows/Linux)

    这篇文章主要介绍了最新DataGrip2020.2.x破解版激活码教程详解(支持Mac/Windows/Linux),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 数据库连接池Druid与Hikari对比详解

    数据库连接池Druid与Hikari对比详解

    这篇文章主要为大家介绍了数据库连接池Druid与Hikari对比详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 解决Navicat数据库连接成功但密码忘记的问题

    解决Navicat数据库连接成功但密码忘记的问题

    这篇文章给大家介绍了Navicat数据库连接成功,密码忘记如何解决,文中给大家介绍了两种解决方法,有详细的图文讲解,需要的朋友可以参考下
    2023-08-08
  • 一次数据库查询超时优化问题的实战记录

    一次数据库查询超时优化问题的实战记录

    当MySQL服务器出现异常(慢),首先要考虑是否因SQL语句引起数据库慢,下面这篇文章主要给大家介绍了一次数据库查询超时优化问题的实战记录,需要的朋友可以参考下
    2021-10-10
  • 最近关于Navicat到期的完美解决办法(亲测有效)

    最近关于Navicat到期的完美解决办法(亲测有效)

    这篇文章主要介绍了最近关于Navicat到期的完美解决办法(亲测有效),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02

最新评论