前言

一个项目上线了两个月,除了一些反馈的优化和小Bug之外,项目一切顺利;前期是属于推广阶段,可能使用人员没那么多,当然对于项目部署肯定提前想到并发量了,所以早就把集群安排上,而且还在测试环境搞了一下压测,绝对是没得问题的;但是,就在两个月后的一天,系统突然跑的比乌龟还慢,投诉开始就陆续反馈过来了。

经过排查,原来是频繁执行一条耗时100ms的SQL导致,100ms感觉不长,但就是把系统搞崩了,具体细节如下。

正文

1. 项目概况

项目采用ABP进行开发,集成统一的认证中心(IDS4),部分数据对接第三方系统,拆分后的这个项目架构相对简单。

考虑并发量不高,就算是高峰期也不会超过1000,于是就搞了个单台的数据库服务器(MySQL),测试环境中经过压测,完全能抗住。

上线时,由于线上资源的关系,DB服务器的配置没有按测试环境的标准来分配,相关人员想着后续看情况进行补配。上线推的比较紧,简单评估了配置风险,初步判断没啥大问题,于是就推上线了。

相关技术栈:ABP、IdentityServer4、Autofac、AutoMapper、Quartz.NET、EF Core、Redis、MySQL等,这都不重要,重要的是100ms的SQL把系统搞崩了。

由于系统相对不大,并没有把分布式日志、调度监控,性能监控集成上去。

2. 问题排查

上线期间,前期处于使用推广阶段,一切正常。两个月后的一天,系统处于使用高峰时段,突然陆续收到反馈:系统有点卡!!!于是赶紧进行排查。

由于系统已经是集群部署的,慢这个问题首先怀疑是数据库服务器,于是让DBA的同事排查了一下,没有锁,只是有大量事务等待提交(waiting for handler commit),通过如下命令可查的:

# 查看正在执行的脚本select *  from information_schema.PROCESSLIST t where t.COMMAND != 'Sleep'  order by time desc;

看到结果都是插入审计日志记录导致,一看日志记录频率,差不多一秒500条记录。DBA同事说可能是记录插入频繁导致,此时CPU已经爆到100%了,为了快速解决问题,于是就赶紧关掉了一些不必要的日志记录。

这么一改,稍微降了一点,没有事务提交的记录,系统勉强可以撑着用,但是CPU还是在85%~97%波动;

看到这种情况,当然还是不放心,继续排查。中间有对服务器的配置产生过怀疑,但非常肯定的是这不是主要原因,于是和DBA的同事继续排查。

系统虽然可以正常使用,但时不时的也看看监控屏,CPU一直处于高水位状态,还是有点慌的,因为一有问题,信息和电话都要爆。

突然DBA同事发现有一个单表查询的SQL执行比较频繁,于是单独拿出来试了一下,查询时间150ms左右,这个表的数据量不大,8万左右,但没有加任何索引,因为想着数据量不大,查询时长还可接受,所以当时就没有加相关索引。

定位到这条SQL后,想到的第一步就是增加索引,在测试环境上试了一把,执行效率直接飞速提高到1ms;效果如下:

所以和DBA同事达成一致意见,在生成环境上增加复合索引(创建索引一定要注意字段顺序),在中午时候,系统使用频率不太高,于是就在生成上快速加了索引,我去,CPU一下降到了20%以内,意不意外;就算在使用高峰期,也没超过20%,通过zabbix工具监控看到CPU的效果:

问题算是解决了,总算松了一口气。

这里有个问题:CPU都爆了为什么没有报警提醒,这块DBA同事正在排查相关配置。这里发现CPU爆了,还是无意的远程到服务器,发现很卡,一看CPU才知道爆了。

系统虽小,问题不大,但其实暴露的问题还是挺多。

总结

这次线上小事故暂时分享到这,因为项目不大,所以没有做那么多监控,但以下建议,小伙伴可以参考一下:

  • 频繁执行的SQL语句,一定要保证其执行效率,不要小看ms级的优化,如果并发量上来也会是灾难;

  • 对应服务器要做好监控,指定预警范围提醒,避免打个措手不及

  • 尽量避免频繁的自动刷新;引入实时通信的方式,会减少不必要的访问压力。

  • 关于系统频繁记录的审计日志,尽量不要和业务数据库存放在一起;大量的日志频繁操作数据库是很占用IO的。

  • 对于拆分的项目,再加上集群部署,分布式日志管理必须安排上,不然分析日志排查问题是个费时费脑的事

关注“Code综艺圈”,和我一起学习吧。

100ms的SQL把服务器搞崩溃了相关推荐

  1. 看直播显示服务器崩溃,迪丽热巴直播,把服务器搞崩溃了!

    原标题:迪丽热巴直播,把服务器搞崩溃了! 从直播出现到现在将近两年的时间,有人高调入局,有人黯然离开,有人赚尽声与名,有人赔的倾家荡产.但毋庸置疑的是,短时期内,直播依然是最风口的行业. 电商.教育等 ...

  2. 值得纪念的一天,几秒钟就把公司的openlava搞崩溃了

    值得纪念的一天,几秒钟就把公司的openlava搞崩溃了 weixin_34319111 2017-05-02 20:14:00 363 收藏 文章标签: python awk 原文链接:https: ...

  3. 小程序秒杀活动服务器,微信小程序官方上线张大仙周年活动,人数太多把服务器弄崩溃了...

    原标题:微信小程序官方上线张大仙周年活动,人数太多把服务器弄崩溃了 说起如今人气最旺的<王者荣耀>主播,莫过于就是靠着一手"素质直播"走遍天下的张大仙了.之前由于一些合 ...

  4. lol无限火力服务器崩溃,LOL:无限火力把服务器挤崩溃了?玩家集体开始吐槽,玩的是心态...

    原标题:LOL:无限火力把服务器挤崩溃了?玩家集体开始吐槽,玩的是心态 [论古今中外,群豪并起,峡谷之巅,群雄逐鹿.谈各路英雄,纵横披靡,所向无敌,山林之外,虎啸龙吟,为夺一方霸主.此危难之际,峡谷腾 ...

  5. win8修改炉石服务器,炉石传说:新的炸服者出现了,这套操作下来就可以成功让炉石服务器成功崩溃...

    原标题:炉石传说:新的炸服者出现了,这套操作下来就可以成功让炉石服务器成功崩溃 最近炉石传说的福利还是很给力的啊,先是登陆送5个卡包,随后就是送竞技场门票加一个200金币的传说任务,然后,乱斗一开两个 ...

  6. 服务器sql系统安装,服务器系统安装sql数据库服务器

    服务器系统安装sql数据库服务器 内容精选 换一换 本方案采用DESS作为存储方案.因昆仑服务器仅支持使用DESS提供SBD盘,为了节省成本,在昆仑服务器高可用的场景下用户也可选择ISCSI盘用作SB ...

  7. sql2005配置文件服务器,SQL server服务器版的安装方法

    SQL server服务器版是我们最常用的SQL server版本之一,下面就教您如何在Windows xp系统上安装SQL server服务器版的方法. 一.找一张SQL server服务器版光盘, ...

  8. C#列出局域网中可用SQL Server服务器(续)

    上一篇文章展示了使用COM对象如何列出局域网中的 SQL Server服务器信息,后来还发现在.Net中有现成的类可用,而不需要使用不太熟悉的COM对象了,这样岂不是更好?下面我把代码展示给大家: u ...

  9. SQL Server服务器名称填写IP不能访问问题解决

    SQL Server服务器名称填写IP不能访问问题解决 参考文章: (1)SQL Server服务器名称填写IP不能访问问题解决 (2)https://www.cnblogs.com/mwduoduo ...

最新文章

  1. 研究揭示动物社交欲望的神经机制
  2. 10-01 Java 类,抽象类,接口的综合小练习--运动员和教练
  3. Java输出流需要注意的几点细节
  4. 【好程序员笔记分享】——UIView与CALayer详解
  5. Spark Streaming原理简析
  6. 错误:在keystone中无法找到默认角色user_第四章 keystone认证组件安装1
  7. static 二次理解
  8. 五大软件设计原则学习笔记3——Liskov 替换原则
  9. 安装ssr_网易《代号SSR》电脑版教程!
  10. 四月份面试题汇总(一)
  11. 通过CSS样式隐藏百度版权标志
  12. 云计算不可及?私有云对IT架构三大影响
  13. JavaEE实现图书管理系统
  14. bias tee电路设计-电容电感值
  15. 微模块、冷通道监控系统解决方案
  16. html 提示框 js,JavaScript实现短暂提示框功能
  17. 抽象工厂模式(优缺点、使用场景、具体实现)
  18. 照片编辑后怎么恢复到之前
  19. 软考高项论文写作指南分享
  20. RCNN SPPNet Fast R-CNN Faster R-CNN Cascade R-CNN

热门文章

  1. Android 资源管理框架(Resources和AssetManager) 及 资源编译(aapt)
  2. Linux统计文件夹下个数指令
  3. mysql 执行sql文件
  4. Cadence Orcad Capture创建多部分Symbol及Homogeneous及Heterogeneous图文教程及视频演示
  5. 了解Windows WDDM 驱动程序
  6. 双音多频 DTMF原理
  7. MapGuide 6.5、MapGuide Open Source 和MGEnterprise2007区别
  8. Windows下mysql数据库的下载、安装、使用(详细)(有后续)
  9. Blockchain Empowered Asynchronous Federated Learning for Secure Data Sharing in IoV
  10. FIR滤波器,低通、高通、带通、带阻VC实现