MySQL的 併發控制 儲存引擎

2021-10-23 11:52:01 字數 1419 閱讀 6274

mysql提供兩個級別的併發控制:

併發即指在同一時刻,多個操作並行執行。

mysql對併發的處理主要應用了兩種機制——是"鎖"和"多版本控制"。

加鎖是處理併發的基本方法

mysql中鎖的粒度(鎖的級別):

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

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

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

鎖策略:

就是在 鎖的開銷和資料的安全性之間尋求平衡,大多數商業資料庫都是在表上直接新增行級鎖並以各種複雜的方式實現以便在鎖比較多的情況下提供更好的效能;

而mysql提供了多種儲存引擎,都可以實現自己的鎖策略和鎖粒度,把鎖粒度固定在某個級別,為某種特定的應用場景提供更好的效能

讀寫鎖:

在處理併發讀寫操作時,可以通過實現乙個由兩種型別的鎖組成的鎖系統來解決問題,這兩種鎖通常被稱為"共享鎖" 和 「排他鎖」 也叫讀鎖寫鎖;

其中常用儲存引擎為:innodb,mylsam

特性:

特性:

缺點

特性

1)innodb支援事務,myisam不支援,這一點是非常之重要。事務是一種高階的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原,而myisam就不可以了。

2)myisam適合查詢以及插入為主的應用,innodb適合頻繁修改以及涉及到安全性較高的應用

3)innodb支援外來鍵,myisam不支援

4)從mysql5.5.5以後,innodb是預設引擎

5)innodb不支援fulltext型別的索引

6)innodb中不儲存表的行數,如select count() from table時,innodb需要掃瞄一遍整個表來計算有多少行,但是myisam只要簡單的讀出儲存好的行數即可。注意的是,當count()語句包含where條件時myisam也需要掃瞄整個表。

7)對於自增長的字段,innodb中必須包含只有該字段的索引,但是在myisam表中可以和其他字段一起建立聯合索引。

8)清空整個表時,innodb是一行一行的刪除,效率非常慢。myisam則會重建表。

9)innodb支援行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like 『%lee%』

MySQL儲存引擎及InnoDB併發控制介紹

mysql儲存引擎採用了可插拔的結構,即使用者可以根據自己的需要來選擇不同的儲存引擎。下表是mysql不同的儲存引擎的不同的特性 feature myisam bdb memory innodb archive ndb storage limits 256tb no yes 64tb no 384e...

mysql儲存引擎MyISAM的併發插入

都知道mysql資料庫是乙個具有多種儲存引擎的資料庫,最常用的有myisam和innodb,兩種儲存引擎。innodb支援外來鍵,支援事務安全,資料多版本讀取,鎖定機制的改進等諸多優點,這裡就不多說了。那麼myisam,是乙個sun公司自己開發的儲存引擎,只支援表級鎖定。我做了這樣乙個測試,使用ro...

mysql 併發控制 mysql併發控制

mysql併發控制 當有多個查詢需要同時修改同乙個資料,就會產生併發控制的問題。mysql可以在兩個層面進行併發控制 伺服器層和儲存引擎層。mysql通過加鎖實現併發控制 鎖有兩類 讀鎖 共享鎖,即乙個讀鎖不會阻塞其它讀鎖,多個使用者可同時讀取同乙個資源,而不互相干擾。寫鎖 排他鎖,即乙個寫鎖會阻塞...