易语言mysql锁表_MySQL的3种锁定机制
MySQL各存儲引擎使用了3種類型的鎖定機制:
1. 行級鎖定(row-level) --- MyISAM、Memory、CSV
*鎖定對象顆粒度最小,發生資源爭用的概率最小,在并發處理能力上有較大優勢。
*缺點是每次獲取鎖和釋放鎖需要做的事情很多,帶來消耗大,也最容易發生死鎖。
2. 表級鎖定(table-level)--- Innodb、NDB Cluster
*鎖定對象顆粒度最大,實現邏輯簡單,獲取鎖和釋放鎖的速度很快,一次會將整個表鎖定,可以很好避免死鎖。
*缺點是出現資源爭用的概率最高,致使并發度大打折扣。
*主要分為2種類型:讀鎖定和寫鎖定
*通過4個鎖定隊列來維護這2種鎖定:
Current read-lock queue (lock->read) --- 存放持有讀鎖的所有線程,按獲取到鎖的時間順序存放
Pending read-lock queue (lock->read_wait) --- 存放正在等待鎖定資源的線程
Current write-lock queue (lock->write) --- 存放持有寫鎖的所有線程,按獲取到鎖的時間順序存放
Pending write-lock queue (lock->write_wait) --- 存放正在等待鎖定資源的線程
*MySQL內部實現表鎖定多達11種類型,由系統中的一個枚舉量(thr_lock_type)定義,各值描述如下:
IGNORE --- 當發生鎖請求的時候內部交互使用,在鎖定結構和隊列中并不會有任何信息存儲
UNLOCK --- 釋放鎖定請求的交互用鎖類型
READ --- 普通讀鎖定
WRITE --- 普通寫鎖定
READ_WITH_SHARED_LOCKS --- 在Innodb中使用到,由如下方式產生:SELECT ... LOCK IN SHARE MODE
READ_HIGH_PRIORITY --- 高優先級讀鎖定
READ_NO_INSERT --- 不允許Concurrent Insert的鎖定
WRITE_ALLOW_WRITE --- 當由存儲引擎自行處理鎖定的時候,mysqld允許其他的線程再獲取讀或寫鎖定,因為即使資源沖突,存儲引擎自己也會知道怎么處理
WRITE_ALLOW_READ --- 這種鎖定發生在對表做DDL(ALTER TABLE ...)的時候,MySQL可以允許其他線程獲取讀鎖定,因為MySQL是通過重建整個表然后再RENAME而實現的該功能,所以整個過程原表仍然可以提供讀服務
WRITE_CONCURRENT_INSERT --- 正在進行Concurrent Insert 時候所使用的鎖定方式,該鎖定進行的時候,除了READ_NO_INSERT之外的其他任何讀鎖定請求都不會被阻塞
WRITE_DELAYED --- 在使用INSERT DELAYED時候的鎖定類型
WRITE_LOW_PRIORITY --- 顯示聲明的低級別鎖定方式,通過設置LOW_PRIORITY_UPDAT = 1 而產生
WRITE_ONLY --- 當在操作過程中某個鎖定異常中斷之后系統內部需要進行CLOSE TABLE操作,在這個過程中出現的鎖定類型就是WRITE_ONLY
3. 頁級鎖定(page-level) --- BerkeleyDB
鎖定顆粒度介于行級鎖定和表級鎖定之間,所需資源開銷以及所能提供的并發能力也介于兩者之間,與行級鎖定一樣會發生死鎖。
總結
以上是生活随笔為你收集整理的易语言mysql锁表_MySQL的3种锁定机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pip 不是内部或外部命令 也不是可运行
- 下一篇: linux cmake编译源码,linu