表锁与行锁的区别以及适用情况
生活随笔
收集整理的這篇文章主要介紹了
表锁与行锁的区别以及适用情况
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是鎖?
- 鎖是計算機協調多個進程或線程并發訪問某一資源的機制;
- 在數據庫中,除傳統的計算資源(如CPU、RAM、I/O、等)的爭用外,數據也是一種供許多用戶共享的資源;
- 如何保證數據并發訪問的一致性、有效性是所有數據庫必須解決的一個問題,鎖沖突也是影響數據庫并發訪問性能的一個重要因素;
- 鎖對數據庫極其重要,也更復雜。
表鎖(偏讀)
- 偏向MYISAM存儲引擎,開銷小,加鎖快,無死鎖,鎖定粒度大,發生鎖沖突的概率最高,并發度最低;
- 手動增加表鎖:
- 查看表上加過的鎖:
- 釋放表鎖:
可通過檢查table_locks_waited和table_locks_immediate狀態變量分析系統上的表鎖定;
table_locks_waited:出現表級鎖定爭用而發生等待的次數(不能立即獲取鎖的次數,每等待一次鎖值加1),值越高表明存在著嚴重的表級鎖爭用情況; table_locks_immediate:產生表級鎖定的次數,表示可以立即獲取鎖的查詢次數,每立即獲取鎖值加1.tips:MYISAM的讀寫鎖調度是寫優先,不適合做寫為主表的引擎;寫鎖后。其他線程不能做任何操作,大量的更新會使查詢很難得到鎖,可能造成永遠阻塞。
行鎖(偏寫)
- 偏向InnoDB存儲引擎,開銷大,加鎖慢,會出現死鎖,;鎖定粒度最小,發生鎖沖突的概率最低,并發度最高。
- InnoDB不同于MYISAM的是:
1.支持事務(TRANSACTION);
2.采用了行級鎖。
注意:索引失效可能會使行鎖變表鎖,尤其varchar類型必須加’’;
間隙鎖及危害
- 當用范圍條件檢索數據時,InnoDB會給符合條件的已有的數據記錄的索引項加鎖,對于鍵值在條件范圍內但不存在的記錄稱為“間隙(GAP)”,InnoDB也會對這種“間隙”加鎖,這種鎖機制稱為“間隙鎖(Next-Key)”
- 鎖定的時候無法插入鎖定鍵值范圍內的任何數據。
eg:
如何鎖定一行?
select xxx for update鎖定一行后,其他的操作會被阻塞,只有鎖定行的會話提交commit才會繼續其他操作,需要等待。
總結: MYISAM適合讀鎖(比如APP大量瀏覽數據),InnoDB適合寫鎖(比如APP搜索很多關鍵字并進行交易)。
總結
以上是生活随笔為你收集整理的表锁与行锁的区别以及适用情况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android开发入门教程--Andro
- 下一篇: 关于CSS的碎片学习