聊一聊数据库中的锁
程序员文章站
2022-04-10 22:10:15
背景 数据库中有一张叫 的表,每天都有几百万新的小姐姐插到表中,光阴荏苒,夜以继日,日久生情,时间长了,表中就有了几十亿的 数据,看到几十亿的小姐姐,每到晚上,我可愁死了,这么多小姐姐,我翻张牌呢? 办法当然是精兵简政,删除那些 的,给年轻的小姐姐们留位置... 于是我在数据库中添加了一个定时执行的 ......
背景
数据库中有一张叫后宫佳丽
的表,每天都有几百万新的小姐姐插到表中,光阴荏苒,夜以继日,日久生情,时间长了,表中就有了几十亿的小姐姐
数据,看到几十亿的小姐姐,每到晚上,我可愁死了,这么多小姐姐,我翻张牌呢?
办法当然是精兵简政,删除那些age>18
的,给年轻的小姐姐们留位置...
于是我在数据库中添加了一个定时执行的小程序,每到周日,就自动运行如下的脚本
delete from `后宫佳丽` where age>18
一开始还自我感觉良好,后面我就发现不对了,每到周日,这个脚本一执行就是一整天,运行的时间有点长是小事,重点是这大好周日,我再想读这张表的数据,怎么也读不出来了,怎是一句空虚了得,我好难啊!
为什么
编不下去了,真实背景是公司中遇到的一张有海量数据表,每次一旦执行历史数据的清理,我们的程序就因为读不到这张表的数据,疯狂地报错,后面一查了解到,原来是因为定时删除的语句设计不合理,导致数据库中数据由行锁(row lock
)升级为表锁(table lock
)了
推荐阅读
-
聊一聊关于企业网站推广和营销的几个方式和方法
-
详解ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁
-
如何在网易邮箱中聊易信把邮箱的内容保存到易信中
-
重新学习MySQL数据库6:浅谈MySQL的中事务与锁
-
利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法
-
在oracle 数据库中查看一个sql语句的执行时间和SP2-0027错误
-
一、mysql数据库,忘记密码怎么处理及处理过程中遇见的问题
-
随机获取oracle数据库中的任意一行数据(rownum)示例介绍
-
在asp.net中操作sql server数据库的一些小技巧
-
Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁