MySql效能調優(五)採用合適的鎖機制之表鎖的示範,mysql調優

來源:互聯網
上載者:User

MySql效能調優(五)採用合適的鎖機制之表鎖的示範,mysql調優

MySql的鎖有以下幾種形式:

1. 表級鎖;開銷小,加鎖快;不會出現死結;鎖定粒度大,發生鎖衝突的機率最高 ,並發度最低。MyISAM引擎屬於這種類型。

2. 行級鎖:開銷大,加鎖慢;會出現死結;鎖定粒度最小,發生鎖衝突機率最低,並發度也最高。InnoDB引擎屬於這種類型。

3. 頁面鎖:開銷和加鎖時間介於表鎖和行鎖之間;會出現死結;鎖定粒度也介於兩者之間,並發度一般。NDB屬於這種類型。

一. 表鎖的示範

MyISAM儲存引擎只支援表鎖,所以對其進行操作會存在以下情況:

1.對MyISAM表的讀操作,不會堵塞其他進程對同一表的讀請求,但會阻塞對同一表的寫請求。只有當讀鎖釋放後,才會執行其他進程的寫操作。

2.對MyISAM表的寫操作,會阻塞其他進程對同一表的讀或寫操作,只有當寫釋放後,才會執行其他進程的讀寫操作。

【樣本】:

開啟另一個會話:

會話2會一直等待,直到會話一鎖的釋放。

同時會話2的執行:

二. 行鎖的示範

InnoDB儲存引擎是通過給索引項目加鎖來實現的,這就意味著:只有通過索引條件檢索資料,InnoDB才會使用行級鎖,否則,InnoDB將使用表鎖。

1. 行鎖

myiSAM引擎下兩個會話更新同一條記錄會響應,因為myiSAM是表鎖。


但在InnoDB中:

在會話2中,

此時會鎖等待。因為更新的是同一條記錄。

2. 對未加索引檢索資料

原因是通過索引條件檢索資料,InnoDB才會使用行級鎖,否則,InnoDB將使用表鎖。

3. 死結


這時會話1會一直等待…


會話2在變更會逾時…


再看會話1



發生死結之後,InnoDB會自動檢測到,它會讓一個事務釋放鎖並回退,另一個事務則獲得鎖,繼續完成事務。死結是無法避免的,我們通過調整業務的邏輯來盡量減少死結出現的機率。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.