mysql鎖定機制是資料庫為了保證資料的一致性,而使各種共享資源在被並發存取變得有序所設計的一種規則。 mysql各儲存引擎使用了三種類型的鎖定機制,分別是:表級鎖定、行級鎖定、頁級鎖定。
鎖定詳解
(推薦教學:mysql教學)
資料庫鎖定機制簡單來說就是,資料庫為了確保資料的一致性,而使各種共享資源在被並發存取變得有序所設計的一種規則。
對於任何一種資料庫來說都需要有對應的鎖定機制,所以MySQL自然也不能例外。 MySQL資料庫由於其自身架構的特點,存在多種資料儲存引擎,每種儲存引擎所針對的應用場景特點都不太一樣,為了滿足各自特定應用場景的需求,每種儲存引擎的鎖定機制都是為各自面對的特定場景而最佳化設計,所以各儲存引擎的鎖定機制也有較大差異。
MySQL各儲存引擎使用了三種類型(等級)的鎖定機制:表級鎖定,行級鎖定和頁級鎖定。
詳細介紹:
1、表級鎖定(table-level)
表格層級的鎖定是MySQL各儲存引擎中最大顆粒度的鎖定機制。此鎖定機制最大的特點是實現邏輯非常簡單,帶來的系統負面影響最小。所以取得鎖和釋放鎖的速度很快。由於表級鎖一次會將整個表鎖定,所以可以很好的避免困擾我們的死鎖問題。
當然,鎖定顆粒度大所帶來最大的負面影響就是出現鎖定資源爭用的機率也會最高,致使並大度大打折扣。
使用表級鎖定的主要是MyISAM,MEMORY,CSV等一些非事務性儲存引擎。
2、行級鎖定(row-level)
行級鎖定最大的特性就是鎖定物件的顆粒度很小,也是目前各大資料庫管理軟體所實現的鎖定顆粒度最小的。由於鎖定顆粒度很小,所以發生鎖定資源爭用的機率也最小,能夠給予應用程式盡可能大的並發處理能力而提高一些需要高並發應用系統的整體性能。
雖然能夠在並發處理能力上面有較大的優勢,但是行級鎖定也因此帶來了不少弊端。由於鎖定資源的顆粒度很小,所以每次取得鎖和釋放鎖需要做的事情也更多,帶來的消耗自然也更大了。此外,行級鎖定也最容易發生死鎖。
使用行級鎖定的主要是InnoDB儲存引擎。
3、頁級鎖定(page-level)
頁級鎖定是MySQL中比較獨特的一種鎖定級別,在其他資料庫管理軟體中也不是太常見。
頁級鎖定的特點是鎖定顆粒度介於行級鎖定與表級鎖之間,所以獲取鎖定所需的資源開銷,以及所能提供的並發處理能力也同樣是介於上面二者之間。另外,頁級鎖定和行級鎖定一樣,會發生死鎖。
在資料庫實現資源鎖定的過程中,隨著鎖定資源顆粒度的減小,鎖定相同資料量的資料所需消耗的記憶體數量是越來越多的,實現演算法也會越來越複雜。不過,隨著鎖定資源顆粒度的減小,應用程式的存取請求遇到鎖等待的可能性也會隨之降低,系統整體並發度也隨之提升。
使用頁級鎖定的主要是BerkeleyDB儲存引擎。
總結:
MySQL這3種鎖定的特性可大致歸納如下:
表單級鎖定:開銷小,加上鎖定快;不會出現死鎖;鎖定粒度大,發生鎖衝突的機率最高,並發度最低;
行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的機率最低,並發度也最高;
頁面鎖定:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,並發度一般。
適用:從鎖定的角度來說,表級鎖定更適合以查詢為主,只有少量以索引條件更新資料的應用,如Web應用;而行級鎖定則更適合有大量按索引條件並發更新少量不同數據,同時又有並發查詢的應用,如一些線上事務處理(OLTP)系統。
以上是mysql鎖是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!