mysql優(yōu)化 - mysql innodb 表鎖,跪求dba大牛,解答
問(wèn)題描述
問(wèn)題:1.在innodb中沒(méi)有開(kāi)啟事務(wù)而且autocommit=1的情況下,update,delete會(huì)不會(huì)造成鎖表?
我在終端開(kāi)啟了兩個(gè)mysql會(huì)話,表t一共有350萬(wàn)行數(shù)據(jù)
單獨(dú)執(zhí)行:
會(huì)話1:update t set status=1 where id>1; 16.*秒 會(huì)話2:update t set status=1 where id<3500000; 12.*秒
同時(shí)執(zhí)行,我的理解:
**在我看來(lái),這兩條sql,同時(shí)執(zhí)行,同時(shí)操作同一條記錄的情況,只有一次****在innodb中update和delete都會(huì)隱式添加排它鎖,那么就是說(shuō)這兩條sql同時(shí)執(zhí)行,只會(huì)阻塞很短的時(shí)間,畢竟只有同時(shí)操作同一條記錄的情況下,才會(huì)阻塞**
同時(shí)執(zhí)行,測(cè)試結(jié)果:
兩條sql,間隔執(zhí)行時(shí)間,在半秒左右.會(huì)話1先執(zhí)行:update t set status=1 where id>1;16.*秒,沒(méi)有變化 會(huì)話2后執(zhí)行:update t set status=1 where id<3500000; 28.* = 12.*秒+16.*秒會(huì)話2先執(zhí)行:update t set status=1 where id>1;12.*秒,沒(méi)有變化 會(huì)話1后執(zhí)行:update t set status=1 where id<3500000; 28.* = 16.*秒+12.*秒
難道兩條sql,同時(shí)操作同一個(gè)記錄時(shí),鎖表了?我的理解應(yīng)該是只會(huì)阻塞很短的時(shí)間啊,畢竟只有一次同時(shí)操作同一條記錄,就好像,兩個(gè)人,a從1數(shù)到10,b從10數(shù)到1,無(wú)論是同樣的速度,還是不是一樣的速度,都只可能同時(shí)數(shù)到相同的數(shù)字一次啊
問(wèn)題解答
回答1:一個(gè)sql就是一個(gè)事務(wù),并不是說(shuō)操作了1W條記錄就是1W個(gè)事務(wù),sql1鎖住所有>1的記錄,sql2會(huì)等待sql1釋放鎖
