100ms的SQL把服务器搞崩溃了

前言

一个项目上线了两个月,除了一些反馈的优化和小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的。
  • 对于拆分的项目,再加上集群部署,分布式日志管理必须安排上,不然分析日志排查问题是个费时费脑的事
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不同的数据库管理软件,塑造了不同的数据库文件内部结构,从而决定其生成的数据 库类型也各有特点。现今市面主要有三款通用的数据库系统软件: 1.MS ACCESS 软件简介 ACCESS是由Microsoft发布的关联式数据库管理系统。它结合了 Microsoft Jet Database Engine 和图形用户界面两项特点,是 Microsoft Office的成员之一, 在包括专业版和更高版本的office版本里面被单独出售。 2.MS SQL SERVER 2008软件简介 MS SQL SERVER 2008是由Microsoft开发和推广的基于服务器端的中型的关系数据库管理系统(DBMS), 可以适合大容量数据的应用,在功能上也要比Microsoft Access强。 3.Oracle软件简介 Oracle是由甲骨文公司开发的一款关系型数据库,也是目前市场占有率最大的数据库 , 是一个协调服务器和用于支持任务决定型应用程序的开放型RDBMS。支持对称多处理器、 群集多处理器、大规模处理器等,并提供广泛的国际语言支持。 通过对三款软件优缺点的对比,同时考虑到工作实际需要和项目经费的使用情况,最 终湖南省信息组选定MS SQL SERVER 2008作为数据库系统管理平台。 三款数据库管理系统优缺点对比 "MS ACCESS "优点 "部署简单方便;文件运用较灵活;可以开发基于自己的" " " "桌面数据库应用(UI),也可以作为前端开发工具与其它 " " " "数据库搭配开发应用程序。 " " "缺点 "数据储存量小;安全性不够高,用户级密码容易破解;" " " "只支持Windows系统;对高强度操作适应性差; " " " "Access数据库有一定的极限,如果数据达到100M左右," " " "容易造成服务器iis假死,或者消耗掉服务器的内存导 " " " "致服务器崩溃。 " "MS SQL "优点 "安全性较高;真正的客户机/服务器体系结构;图形化 " "SERVER 2008 " "用户界面,操作更加直观、简单;丰富的编程接口工具" " " "为用户进行程序设计提供了更大的选择余地;具有很好" " " "的伸缩性,可跨越多种平台使用;SQL " " " "Server还提供数据仓库功能,这个功能只在Oracle和其" " " "他更昂贵的DBMS中才有。 " " "缺点 "因功能强大,所以操作较ACCESS复杂;只支持Windows " " " "操作系统; " "Oracle "优点 "运行稳定、功能齐全、性能强大、技术领先;获得最高" " " "级别的ISO标准安全性认证;支持多种操作系统; " " "缺点 "价格不菲;很多工具软件需要另外购买 " ----------------------- 三款数据库管理系统优缺点对比全文共2页,当前为第2页。 三款数据库管理系统优缺点对比全文共2页,当前为第1页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值