mysql - InnoDB中的鎖
問題描述
問題解答
回答1:------- TRX HAS BEEN WAITING 28 SEC FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 6 page no 4 n bits 80 index idx_a of table `test`.`t` trx id 637972 lock_mode X locks gap before rec insert intention waitingRecord lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 32 0: len 4; hex 8000000b; asc ;; 1: len 6; hex 000000000414; asc ;;
這里說的很清楚啊 lock_mode X意味著是排它鎖 gap代表是區(qū)間鎖也就是說在insert之前該表加入了區(qū)間排他鎖,為什么呢?因?yàn)橹皥?zhí)行的這句delete from t where a = 11;會(huì)在(negative infinity,11]這個(gè)區(qū)間加上排他鎖,為什么是排他鎖而不是Record Lock呢,因?yàn)槟氵@里的a并非唯一索引,只是一個(gè)普通的索引,具體的看http://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html
回答2:mysql默認(rèn)的會(huì)話隔離級(jí)別是repeated read,會(huì)產(chǎn)生更多的gap鎖,如果可以接受幻讀,可以考慮降為read commit級(jí)別,減少鎖沖突的概率。
相關(guān)文章:
1. javascript - JS如何取對(duì)稱范圍的隨機(jī)數(shù)?2. java - ehcache緩存用的是虛擬機(jī)內(nèi)存么?3. 數(shù)據(jù)庫 - mysql如何處理數(shù)據(jù)變化中的事務(wù)?4. android - java 泛型不支持?jǐn)?shù)組,那么RxJava的Map集合有什么方便的手段可以定義獲得一串共同父類集合數(shù)據(jù)呢?5. java - mongodb分片集群下,count和聚合統(tǒng)計(jì)問題6. 關(guān)于docker下的nginx壓力測(cè)試7. 服務(wù)器端 - 采用nginx做web服務(wù)器,C++開發(fā)應(yīng)用程序 出現(xiàn)拒絕連接請(qǐng)求?8. javascript - 有什么兼容性比較好的辦法來判斷瀏覽器窗口的類型?9. dockerfile - 我用docker build的時(shí)候出現(xiàn)下邊問題 麻煩幫我看一下10. python - pandas按照列A和列B分組,將列C求平均數(shù),怎樣才能生成一個(gè)列A,B,C的dataframe
