MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹

msyql鎖定義

鎖是計算機協調多個進程或線程併發訪問某一資源的機制。在數據庫中,除傳統的計算資源(如CPU、RAM、I/O等) 的爭用以外,數據也是一種供許多用戶共享的資源。如何保證數據併發訪問的一致性、有效性是所有數據庫必須解決的一個問題,鎖衝突也是影響數據庫併發訪問性能的一個重要因素。從這個角度來說,鎖對數據庫而言顯得尤其重要,也更加複雜。


鎖分類

  1. 從數據庫操作類型(讀寫鎖)

讀鎖:共享鎖,針對同一份數據,多個操作可以同時進行而不會相同影響。

寫鎖:排它鎖,當前寫操作沒有完成,它會阻斷其他的讀鎖或寫鎖

  1. 從對數據庫操作的顆粒分類

表鎖:偏讀,偏向MyISAM存儲引擎,開銷小,加鎖快,無死鎖,鎖定顆粒大,發生鎖的概率最高,併發度最低

  • 案例說明
<code>mysql> create table lock_01(
    

->

id int

not

null

primary key auto_increment,

->

name varchar(

20

) -> )engine myisam;/<code>
MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹

<code> 
mysql>show 

open

tables;/<code>
MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹

<code> 
mysql>lock table 表名字 

read

(

write

), 表二

read

(

write

); mysql>unlock tables;/<code>
<code>

對lock_01表加讀鎖

lock table lock_01

read

;

/<code>
MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹

對lock_01表加鎖

MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹

In_use值變成1

MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹

MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹

MyISAM寫鎖

<code> 
mysql>

lock

table lock_01 write;/<code>


MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹


MyISAM讀鎖結論:

1、session1對Test_01庫中的lock_01加讀鎖,對於session2來說都可以查詢lock_01,session1也可以對自己加了讀鎖的表進行查詢,但是session1無法對Test_01庫中的其他表進行查詢和寫操作,但session2可以對其他的表進行讀寫操作,但是對session1加了鎖的lock_01表進行寫操作時會發生阻塞,直到session1解鎖,即session2立即進行寫操作。

2、session1加鎖,session1只能讀自己,其他session能讀,寫會阻塞

3、session1加鎖,session1不能查其他表,直接報錯,其他session可以讀

4、session1加鎖,session1不能修改其他表,直接報錯,其他session可以對其他表進行寫操作

5、session1加鎖,session1不能修改自己,直接報錯,其他session寫會阻塞

讀鎖:讀共享、寫阻塞


MyISAM寫鎖結論:

寫鎖:排他,全阻塞

1、session1加鎖,session1可以自己讀,但不能寫,其他session全阻塞

2、session1加鎖,session1不能對其他表進行操作,其他session可以進行讀寫


MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹


如何分析表鎖定

<code> 

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

show status like

'table%'

;

/<code>
MySQL中存儲引擎MyISAM表鎖中的讀鎖和寫鎖詳細案例介紹

有兩個狀態變量記錄MySQL內部表級鎖定的情況,兩個變量說明如下:

  • Table_locks_immediate: 產生表級鎖定的次數,表示可以立即獲取鎖的查詢次數,每立即獲取鎖值加1 ;
  • Table_locks_waited: 出現表級鎖定爭用而發生等待的次數(不能立即獲取鎖的次數,每等待一次鎖值 加1),此值高則說明存在著較嚴重的表級鎖爭用情況;

此外,Myisam的讀寫鎖調度是寫優先,這也是myisam不適合做寫為主表的引擎。因為寫鎖後,其他線程不能做任何操作,大量的更新會使查詢很難得到鎖,從而造成永遠阻塞


點擊關注發私信或評論交流文章中有問題的地方,相互學習和答疑


分享到:


相關文章: