mysql 鎖的機制 長文慎點)

2021-08-21 02:58:47 字數 1286 閱讀 8541

資料庫鎖定機制目的:保證資料的一致性,而使各種共享資源在被併發訪問變得有序所設計的一種規則。 

對於任何一種資料庫來說都需要有相應的鎖定機制,所以mysql自然也不能例外。 

mysql資料庫由於其自身架構的特點,存在多種資料儲存引擎,每種儲存引擎所針對的應用場景特點都不太一樣,為了滿足各自特定應用場景的需求,每種儲存引擎的鎖定機制都是為各自所面對的特定場景而優化設計,所以各儲存引擎的鎖定機制也有較大區別。 

mysql各儲存引擎使用了三種型別(級別)的鎖定機制:表級鎖定,行級鎖定和頁級鎖定。

表級別的鎖定是mysql各儲存引擎中最大顆粒度的鎖定機制。該鎖定機制最大的 

特點:實現邏輯非常簡單,帶來的系統負面影響最小。

獲取鎖和釋放鎖的速度很快。由於表級鎖一次會將整個表鎖定,所以可以很好的避免困擾我們的死鎖問題。 

缺點:鎖定顆粒度大所帶來最大的負面影響就是出現鎖定資源爭用的概率也會最高,致使並大度大打折扣。 

使用表級鎖定的主要是myisam,memory,csv等一些非事務性儲存引擎。

行級鎖定最大的特點就是鎖定物件的顆粒度很小,也是目前各大資料庫管理軟體所實現的鎖定顆粒度最小的。由於鎖定顆粒度很小,所以發生鎖定資源爭用的概率也最小,能夠給予應用程式盡可能大的併發處理能力而提高一些需要高併發應用系統的整體效能。 

優勢:在併發處理能力較強 

弊端:由於鎖定資源的顆粒度很小,所以每次獲取鎖和釋放鎖需要做的事情也更多,帶來的消耗自然也就更大了。此外,行級鎖定也最容易發生死鎖。

使用行級鎖定的主要是innodb儲存引擎。

頁級鎖定是mysql中比較獨特的一種鎖定級別,在其他資料庫管理軟體中也並不是太常見。 

特點:1.鎖定顆粒度介於行級鎖定與表級鎖之間, 

2.獲取鎖定所需要的資源開銷, 

以及所能提供的併發處理能力也同樣是介於上面二者之間。

另外,頁級鎖定和行級鎖定一樣,會發生死鎖。 

在資料庫實現資源鎖定的過程中,隨著鎖定資源顆粒度的減小,鎖定相同資料量的資料所需要消耗的記憶體數量是越來越多的,實現演算法也會越來越複雜。不過,隨著鎖定資源顆粒度的減小,應用程式的訪問請求遇到鎖等待的可能性也會隨之降低,系統整體併發度也隨之提公升。 

使用頁級鎖定的主要是berkeleydb儲存引擎。

總的來說,mysql這3種鎖的特性可大致歸納如下:

表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低; 

行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高; 

頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。

mysql鎖機制 mysql 鎖機制

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

C 比較物件的相等性 長文慎入

system.object 定義了3個不同的方法來比較物件的相等性 referenceequals 和兩個版本的 equals 再加上比較運算子 實際上有4種比較相等性的方法。這些方法有一些細微的區別,下面就介紹它們 1.referenceequals 方法 referenceequals 是乙個靜...

mysql鎖機制 php Mysql鎖機制

表級鎖 開銷小,加鎖快 不會出現死鎖 鎖定粒度大,發生鎖衝突的概率最高,併發度最低。行級鎖 開銷大,加鎖慢 會出現死鎖 鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。共享鎖和排它鎖 頁面鎖 開銷和加鎖時間界於表鎖和行鎖之間 會出現死鎖 鎖定粒度界於表鎖和行鎖之間,併發度一般 mysql的行級鎖有...