MyISAM引擎的表鎖

MyISAM引擎特色簡述

  • 不支持事務
  • 不支持外鍵
  • 較小的逐漸範圍
  • 支持全文檢索
  • 不支持GIB數據
  • 查詢效率高
  • 使用表鎖

表鎖特色

  鎖住整個表,因此開銷小,加鎖比較快,無死鎖狀況,鎖的粒度較大,在併發狀況下,產生鎖等待的機率比較高,因此支持的併發數較低,通常用於查找。html

表鎖類型

  • 讀鎖:也稱爲共享鎖,針對同一張表,多併發讀操做能夠並行執行,而且互不影響,寫會發生阻塞。
  • 寫鎖:也稱爲排它鎖,針對同一張表,當前線程寫操做時,會阻塞其餘線程的讀寫操做。

手動表鎖語法

mysql> LOCK TABLE 表名 [READ | WRITE] [,表名 [READ | WRITE]...]   #加鎖 
mysql> UNLOCK TABLES    #解鎖

狀態查詢

mysql> SHOW STATUS LIKE 'Table_locks_immediate';

表示能夠當即獲取鎖的查詢次數,每獲取一次鎖就增長1mysql

 

mysql> SHOW STATUS LIKE 'Table_locks_waited';

表示鎖等待的次數sql

 

最佳實踐

讀鎖(共享鎖)

步驟 Session1 Session2
1 給myisam_lock加讀鎖  
2 能夠查詢myisam_lock表數據 能夠查詢myisam_lock表數據
3 不能夠增刪改myisam_lock表數據 增刪改myisam_lock表數據阻塞
4 不能夠增刪改查其餘表數據 能夠增刪改查其餘表數據
5 釋放myisam_lock的讀鎖 釋放讀鎖同時阻塞的增刪改爲功

 

 

 

 

 

 

寫鎖(排它鎖)

步驟 Session1 Session2
1 給myisam_lock加寫鎖  
2 能夠查詢myisam_lock表數據 查詢myisam_lock表數據阻塞
3 釋放myisam_lock的寫鎖 釋放寫鎖同時阻塞的查詢成功
4 給myisam_lock加寫鎖  
5 能夠增刪改myisam_lock表數據 增刪改myisam_lock表數據阻塞
6 不能夠增刪改查其餘表數據 能夠增刪改查其餘表數據
7 釋放myisam_lock的寫鎖 釋放寫鎖同時阻塞的增刪改爲功

 

 

 

 

 

 

 

 

實踐結束,我以爲有必要解釋一下關於表鎖的特色:併發

  • 表鎖開銷小,由於直接鎖住整個表,不用太多查找,索引消耗的性能也比較小。
  • 加鎖快,由於好找因此加鎖時間也短。
  • 無死鎖狀況,由於MyISAM沒有事務,因此就談不上死鎖。
  • 表鎖粒度大,由於鎖住全部表數據,這還不大嗎?
  • 鎖等待機率大,每次更新一下就要鎖住表,全部增刪改都須要排隊。
  • 併發數較低,增刪改都是排它鎖,其餘線程連訪問都會阻塞,併發確定低。
  • 通常用於查,由於查是共享鎖,不影響其餘線程讀取,因此查的性能很好。

 

本文索引關鍵字:性能

讀鎖(共享鎖):http://www.cnblogs.com/huanStephen/p/8067972.html#s_lockspa

寫鎖(排它鎖):http://www.cnblogs.com/huanStephen/p/8067972.html#x_lock線程

歡迎你們索引!code

相關文章
相關標籤/搜索