Mysql数据库未添加索引引发的生产事故
最近开发的新功能主要是首页的红点提示功能,某个用户登录系统app,然后进入某一个功能模块,
在该功能下面有很多地方可以操作,新功能就是根据用户信息查询当月是否存在新的数据。总共有四五
个地方如果出现增量数据时,需要红点提示。自己所在的项目组B主要是数据提供方,关联的项目组A
调用我们的接口获取数据,然后在做相应的逻辑处理,大致是这么一个流程。
根据关联方描述,大致的逻辑是第一次查询的时候,所有功能都添加红点提示,并且在数据库和
Redis缓存中记录一个红点查询的最大时间。当用户再次进入该页面,根据调用B项目组提供的
接口的数据进行比对,返回的最大时间大于A项目原有Redis中记录的最大时间,则表示有新数据。
如果返回的最大时间小于等于A项目原有Redis中记录的最大时间,则表示没有新数据。除了这个
逻辑处理之外,这个接口A项目组还有其他逻辑需要处理。
周五发版之后,周末两天都正常,没出什么问题,安心过周末。可是等到周一去到公司之后,
负责人在群里面发消息说App对应的功能模块页面加载不出来,还发了一张截图,一直在那里转
圈圈。看到这个消息,自己就知道大事不好,肯定出现性能问题才导致这种情况。原计划周一开的
会也立即取消,立马去找A项目组的人员排查问题,解决问题。
大概过了两天之后,再次开会时,他们才提起这个问题,主要就是性能不好导致的。项目组A
使用的是Mysql数据库,由于周一正式开始上班,大量人员开始使用app,导致查询红点的那个接口
性能急剧下降,然后就一直在转圈圈。听他们说他们临时的处理办法是,给Mysql中记录红点功能的
表添加一个索引,查询效率提升之后,问题也随之解决。听到这个结果,还是让自己挺意外的。那张
表总的数据量200w不到,而且每个用户约有5个红点,每次查询需要更新5次数据库数据和redis
缓存数据,将其更新为最新查询时间。由于需要频繁的进行更新操作,而且那个接口处理的逻辑还
比较复杂,他们一开始开发的时候,也没有添加索引,因此导致这个生产事故。
听到这个原因难免有些意外,可是这就是导致出现问题的直接原因。出现这种问题算是比较严重
的生产事故,最明显的提现就是对员工个人绩效考核的时候,薪资会受影响。也算是给自己上了一课,
数据库加索引很不不加索引的区别,不过前提是正确地添加索引,添加在正确的字段上才会有效果。
在讨论这个问题的时候,我们这边的负责人还给出了一个优化方案,当用户直接请求时,获取红点接口
数据,可直接先操作Redis,然后通过异步线程将最新查询时间更新到Mysql数据库,这样既提高了
接口的处理效率,同时也将最新数据更新到了数据库中。自己还是比较赞同这种方式,如果以后
遇到类似的问题,则可以采用相同的解决办法。
Mysql数据库未添加索引引发的生产事故的更多相关文章
- MySQL数据库授权与索引
MySQL数据库授权与索引 目录 MySQL数据库授权与索引 一.数据库用户授权 1. 授予权限 2. 查看权限 3. 删除权限 4. 全部权限(all privileges) 二.MySQL索引 1 ...
- MySQL数据库篇之索引原理与慢查询优化之一
主要内容: 一.索引的介绍 二.索引的原理 三.索引的数据结构 四.聚集索引与辅助索引 五.MySQL索引管理 六.测试索引 七.正确使用索引 八.联合索引与覆盖索引 九.查询优化神器--explai ...
- mysql数据库 事务和索引
1.MySQL数据库特性: 原子性(atomidity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一 ...
- MySQL数据库篇之索引原理与慢查询优化之二
接上篇 7️⃣ 正确使用索引 一.索引未命中 并不是说我们创建了索引就一定会加快查询速度,若想利用索引达到预想的提高查询速度的效果, 我们在添加索引时,必须遵循以下问题: #1 范围问题,或者说条件 ...
- 【转】MYSQL数据库四种索引类型的简单使用--MYSQL组合索引“最左前缀”原则
MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 ...
- mysql数据库以加索引方式提高性能
数据库查询速率慢的情况下可以给对应的表加上对应的索引,能够有效的提高查询效率,mysql数据库添加索引的SQL入下: ALTER TABLE `table_name` ADD INDEX index_ ...
- MySQL数据库中的索引(二)——索引的使用,最左前缀原则
上文中,我们了解了MySQL不同引擎下索引的实现原理,在本文我们将继续探讨一下索引的使用以及优化. 创建索引可以大大提高系统的性能. 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. ...
- JDBC连接mysql数据库,添加数据
如下:其中添加/删除/修改只是sql字符串不同 //3.要执行的字符串 String sql="INSERT INTO t_student(NAME,age,email) VALUES('x ...
- MYSQL数据库学习六 索引的操作
6.1 索引 由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个或多个字段生成的键组成,这些键存储在数据结构(B-树或哈希表)中,通过索引可以快速有效地查找与键值相关联的字段.根 ...
- mysql数据库中的索引有那些、有什么用
本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第 ...
随机推荐
- Elasticsearch中的分页查询限制和近似去重统计
Elasticsearch 前言 深度分页的问题 如何解决 修改默认值 使用search_after方法 scroll 滚动搜索 es中的近似聚合 总结 Elasticsearch 前言 最近工作中用 ...
- python快速入门【六】----真题测试
python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...
- 强化学习技巧五:numba提速python程序
numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言. numba使用情况 使用numpy ...
- 强化学习技巧三:Python多进程
1.Python多进程模块 Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Proce ...
- 关于debug一晚上的一些思考,做开发到底要养成什么习惯?
总结:日志一定要写,日志一定要写,日志一定要写! 今天晚上是我学开发过程中很不一样的一晚,今晚学到了很多. 虽然我也只是一个开发的初学小白,今天的debug分享是我的一个小方法和一个小记录,如果大佬们 ...
- 阿里二面:SpringBoot可以同时处理多少个请求?当场懵了。。。。
SpringBoot以其简洁高效的开发方式和强大的内嵌容器特性,为开发者提供了构建高性能后端服务的便利.然而,当面临高并发场景时,理解并合理配置Spring Boot应用以达到最佳的并发处理能力至关重 ...
- XD刷机中执行reclaimdisks.sh的作用
之前刷机提到在使用OEDA进行一键部署前,需先在所有DB节点上运行reclaimdisks.sh,也提到观察会释放pvs/vgs/lvs相对应的剩余空间. 本文以一套X8环境为例,来看下具体的表现,以 ...
- 【.net core学习一】.net 5.0 webapi部署
服务器:windows server 2012 x64 1.安装IIS: 2.下载并安装 dotnet-hosting-5.0.13-win.exe 下载地址: https://dotnet.micr ...
- C# 12 中新增的八大功能你都知道吗?
前言 转眼之间C#都已经更新到了12了,那么C# 12 中新增的八大功能你都了解过吗?今天我们来简单介绍一下C# 12 中新增的八大功能. C#/.NET该如何自学入门?:https://www.cn ...
- NC16679 [NOIP2003]神经网络
题目链接 题目 题目描述 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神经网络 ...