mysql 簡述鎖機制 MySQL之鎖機制簡述

2021-10-17 22:36:57 字數 1797 閱讀 3337

一、為什麼需要鎖

鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。

為了保證資料庫中資料併發訪問的一致性、有效性,故引入鎖機制。其中鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。

二、鎖的分類

分類一:行鎖,頁鎖,表鎖;

分類二:共享鎖、排他鎖、意向鎖(is、ix);

分類三:樂觀鎖、悲觀鎖;

innodb的行級別鎖分為:記錄鎖、間隔鎖、next-key鎖。

mysql中,每種儲存引擎支援不同的鎖機制。

myisam、memory:支援表級鎖(table-level locking);

bdb:支援頁面鎖(table-level locking),也支援表級鎖;

innodb:支援行級鎖(row-level locking),也支援表級鎖。

三、鎖的優缺點

表級鎖:開銷小,加鎖快;不會出現死鎖;

鎖定粒度大,發生鎖衝突的概率最高,併發度最低。

行級鎖:開銷大,加鎖慢;會出現死鎖;

鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。

頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;

會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。

四、鎖的使用

1、查詢myisam的鎖的相關情況

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

show status like 『table%』;

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

2、查詢innodb的鎖的相關資訊

可以通過檢查innodb_row_lock狀態變數來分析系統上的行鎖的爭奪情況:

mysql> show status like 『innodb_row_lock%』;

3、檢視資料庫中的所有會話資訊

show processlist;

4、檢視正在鎖的事務

select * from information_schema.innodb_locks;

5、檢視等待鎖的事務

select * from information_schema.innodb_lock_waits;

6、手動鎖表與釋放

表級別鎖:

共享鎖(s鎖/讀鎖)

lock table table_name [ as alias_name ] read

排他鎖(x鎖/寫鎖 )

lock table table_name [as alias_name][ low_priority ] write

釋放鎖:

unlock tables;

7、行級別鎖表與釋放(innodb引擎)

共享鎖(s鎖/讀鎖)

select … lock in share mode;

排他鎖(x鎖/寫鎖)

select … for update;

釋放鎖:

unlock tables;

注意事項:

1、myisam在執行查詢語句(select)前,會自動給涉及的所有表加讀鎖,在執行更新操作 (update、delete、insert等)前,會自動給涉及的表加寫鎖,這個過程並不需要使用者干預,因此,使用者一般不需要直接用lock table命令給myisam表顯式加鎖。

2、innodb行鎖是通過給索引上的索引項加鎖來實現的,這一點mysql與oracle不同,後者是通過在資料塊中對相應資料行加鎖來實現的。innodb這種行鎖實現特點意味著:只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖!

MySQL 鎖機制簡述

1 只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb 將使用表鎖。2 由於mysql的行鎖是針對索引加的鎖,不是針對記錄加的鎖,所以雖然是訪問不同行的記錄,但是如果是使用相同的索引鍵,是會出現鎖衝突的。3 當表有多個索引的時候,不同的事務可以使用不同的索引鎖定不同的行,另外,不...

mysql鎖機制 mysql 鎖機制

一 概述 mysql有三種鎖的級別 頁級 表級 行級。myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支援行級鎖 row level locking 也...

mysql鎖機制總結 mysql鎖機制總結

1.隔離級別 1 讀不提交 read uncommited,ru 這種隔離級別下,事務間完全不隔離,會產生髒讀,可以讀取未提交的記錄,實際情況下不會使用。2 讀提交 read commited,rc 僅能讀取到已提交的記錄,這種隔離級別下,會存在幻讀現象,所謂幻讀是指在同乙個事務中,多次執行同乙個查...