mysql优化 - mysql innodb 表锁,跪求dba大牛,解答

查看:103
本文介绍了mysql优化 - mysql innodb 表锁,跪求dba大牛,解答的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

问题:
1.在innodb中没有开启事务而且autocommit=1的情况下,update,delete会不会造成锁表?

我在终端开启了两个mysql会话,表t一共有350万行数据

单独执行:

 会话1:update t set status=1 where id>1; 16.*秒
 会话2:update t set status=1 where id<3500000; 12.*秒

同时执行,我的理解:

**在我看来,这两条sql,同时执行,同时操作同一条记录的情况,只有一次**
**在innodb中update和delete都会隐式添加排它锁,那么就是说这两条sql同时执行,只会阻塞很短的时间,毕竟只有同时操作同一条记录的情况下,才会阻塞**

同时执行,测试结果:

两条sql,间隔执行时间,在半秒左右.
会话1先执行:update t set status=1 where id>1;16.*秒,没有变化 
会话2后执行:update t set status=1 where id<3500000; 28.* = 12.*秒+16.*秒


会话2先执行:update t set status=1 where id>1;12.*秒,没有变化 
会话1后执行:update t set status=1 where id<3500000; 28.* = 16.*秒+12.*秒

难道两条sql,同时操作同一个记录时,锁表了?我的理解应该是只会阻塞很短的时间啊,毕竟只有一次同时操作同一条记录,就好像,两个人,a从1数到10,b从10数到1,无论是同样的速度,还是不是一样的速度,都只可能同时数到相同的数字一次啊

这个问题已被关闭,原因:问题已解决 - 问题已解决,且对他人无借鉴意义

解决方案

一个sql就是一个事务,并不是说操作了1W条记录就是1W个事务,sql1锁住所有>1的记录,sql2会等待sql1释放锁

这篇关于mysql优化 - mysql innodb 表锁,跪求dba大牛,解答的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆