mysql 鎖(表鎖,行鎖,頁鎖)。

MySQL鎖

相對於其他的數據庫而言,MySQL的鎖機制比較簡單,最顯著的特點就是不同的存儲引擎支持不同的鎖機制。根據不同的存儲引擎,MySQL中鎖的特性可以大致歸納如下:

MyISAM:只支持表鎖;

BDB:支持表鎖和頁鎖;

InnoDB:支持行鎖和和表鎖;

開銷、加鎖速度、死鎖、粒度、併發性能

  • 表鎖: 開銷小,加鎖快;不會出現死鎖;鎖定力度大,發生鎖衝突概率高,併發度最低
  • 行鎖: 開銷大,加鎖慢;會出現死鎖;鎖定粒度小,發生鎖衝突的概率低,併發度高
  • 頁鎖: 開銷和加鎖速度介於表鎖和行鎖之間;會出現死鎖;鎖定粒度介於表鎖和行鎖之間,併發度一般

從上述的特點課件,很難籠統的說哪種鎖最好,只能根據具體應用的特點來說哪種鎖更加合適。僅僅從鎖的角度來說的話:

表鎖更適用於以查詢爲主,只有少量按索引條件更新數據的應用;行鎖更適用於有大量按索引條件併發更新少量不同數據,同時又有併發查詢的應用。(PS:由於BDB已經被InnoDB所取代,我們只討論MyISAM表鎖和InnoDB行鎖的問題)

可以通過檢查table_locks_waited和table_locks_immediate狀態變量來分析系統上的表鎖定爭奪:

mysql> show status like 'table%';

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| Table_locks_immediate | 2979  |

| Table_locks_waited    | 0     |

+-----------------------+-------+

2 rows in set (0.00 sec))

如果Table_locks_waited的值比較高,則說明存在着較嚴重的表級鎖爭用情況。

 

獲得表film_text的WRITE鎖定

mysql> lock table film_text write;

Query OK, 0 rows affected (0.00 sec)

釋放鎖:

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章