作者liisi (小心一点)
看板Database
标题[问题] mysql 同一个table select lock
时间Sat Jan 6 18:54:31 2018
想请问一下版友
如果网站同时有1千人在读取同一个table 是否会造成lock
我今天遇到这种情况 很多买家涌进商品页面 打算抢单
因为抢单关系 很多人会狂按F5重整 (db就会一直去读商品的table)
直到抢单按钮一出现 马上下订单
结果时间一到 公司的网站当掉快20分钟
MIS是说主机没有问题 主要是db sql卡住
我查了一下 processlist
全都卡在 select 商品的table 或是和商品相关join到的table
我是把时间长的几个process kill掉 才慢慢恢复正常
之前偶尔卡了几秒 还不算严重
但是今天却卡了20分钟 整个被lock住 无法释出
必须透过kill process才能恢复正常 囧rz..
但是像这种 select lock 要如何解决?
我看了一下内文 是有提到 WITH NOLOCK 但是好像是mssql才行
想请问mysql有方法可以预防这问题吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.159.67.88
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1515236074.A.08B.html
1F:→ jeamie: 单纯的select应该是不会锁表,是不是有select...for updat 01/07 08:39
2F:→ jeamie: e或其他更新操作先锁定了导致其他查询在等待,可以查table 01/07 08:39
3F:→ jeamie: lock的资讯出来看看 01/07 08:39
4F:→ jeamie: 忘记说,这是在innodb的情况下,如果是myisam就.... 01/07 08:40
5F:→ liisi: 回楼上 是用innodb 没有用for update 01/07 18:09
6F:→ liisi: 但是我看processlist 却是select卡住 我本来想说等下就好 01/07 18:10
7F:→ liisi: 结果过了3分钟 还是lock 我才直接kill process 囧rz 01/07 18:12
8F:→ liisi: 当下我也很疑惑 为何select会卡住那麽久 01/07 18:12
9F:→ liisi: table lock资讯可以事後查吗 还是要当下? 因为主机不归我管 01/07 18:14