美文网首页
使用sequelize框架,记一次接口响应时间长排查过程

使用sequelize框架,记一次接口响应时间长排查过程

作者: zdmission | 来源:发表于2020-02-24 19:13 被阅读0次

    摘要:

    一个接口从开始开发到测试再到上线,相应速度都很快,但是过了两三个月,发现这个接口响应速度捉急啊,达到了4.5s左右,给用户的感觉像是出bug了,就会使劲儿点击,结果导致了点击量是PV的4倍,真是个不好的体验啊(题外话),着手排查问题。

    过程

    第一步当然是查询log日志了,找到对应的接口,看到执行的几条sql语句都挺正常的,因为当时测试已经通过,于是通过测量整个接口函数执行时间,发现这个函数确实从开始到结束总共执行了4.5秒左右,然后返回去看日志中的几条sql语句,分别到数据库中执行\color{red}{(这是查询和统计的语句,如果是更新,增加或者删除语句请慎重,不允许出现生产事故)},发现其中起一条查询语句执行的时间是4.2s左右,总共时间4.5s,这一条语句就是4.2s,问题就在这里,再回到代码中,找到执行该语句的函数,原来是sequelize框model提供的方法findAndCountAll(顾名思义查询所有用户并且统计总数),当数据库中存储的量小时,不会有啥问题,但是当数据量庞大,这时再去遍历所有数据就会花费许多时间,随着数量增大,时间也会增长。

    解决方法

    要么直接执行统计总数的sql语句(比如:select count(*) from user where sp='test'),要么将findAndCountAll替换成count,即可解决问题,重新构建项目,访问该接口,响应时间明显短了数倍。

    相关文章

      网友评论

          本文标题:使用sequelize框架,记一次接口响应时间长排查过程

          本文链接:https://www.haomeiwen.com/subject/yreiqhtx.html