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