myisam表锁及锁粒度调节
myisam支持表鎖,對(duì)表的讀寫是串行執(zhí)行的,在一定條件下,Myisam表也支持查詢和插入操作的并發(fā)執(zhí)行。
Myisam存儲(chǔ)引擎有一個(gè)系統(tǒng)變量concurrent_insert,專門用以控制其并發(fā)插入的行為,其值分別可以為0、1、2
當(dāng)concurrent_insert為0時(shí),不允許并發(fā)插入
當(dāng)concurrent_insert為1時(shí),若Myisam表中沒有空洞(即表的中間沒有被刪除的行),Myisam允許在一個(gè)進(jìn)程讀表的同時(shí),
另一個(gè)進(jìn)程從表尾插入記錄,這也是Myisam的默認(rèn)設(shè)置。
當(dāng)concurrent_insert為2時(shí)候,無論Myisam表是否有空洞,都允許在表尾并發(fā)插入記錄。
Myisam存儲(chǔ)引擎的讀鎖和寫鎖是互斥的,讀寫操作是串行的,那么一個(gè)進(jìn)程請(qǐng)求某個(gè)Myisam表的讀鎖,同時(shí)另外一個(gè)進(jìn)程也請(qǐng)求同一表
的寫鎖,MySql會(huì)先處理寫鎖。不僅如此,即使讀請(qǐng)求寫到鎖等待隊(duì)列,寫請(qǐng)求后到,寫鎖也會(huì)查到讀鎖之前。這是Mysql通常認(rèn)為寫請(qǐng)求
比較重要的原因。因此大量的寫請(qǐng)求會(huì)阻塞查詢操作,從而導(dǎo)致永久阻塞,這也是Myisam為什么不適合高并發(fā)的一個(gè)原因吧~
Mysql也提供一種折中的辦法來調(diào)節(jié)讀寫沖突,即給系統(tǒng)參數(shù)max_write_lock_count設(shè)置一個(gè)合理的值。
Myisam鎖粒度調(diào)節(jié):
1、通過指定啟動(dòng)參數(shù)low-priority-updates,使Myiasm引擎默認(rèn)給予讀請(qǐng)求以優(yōu)先的權(quán)利。
2、通過執(zhí)行命令SET LOW_PRIORITY_UPDATES=1,使該連接發(fā)出的更新請(qǐng)求優(yōu)先級(jí)降低。
3、通過指定insert,update,delete語句的LOW_PRIORITY屬性,降低語句的優(yōu)先級(jí)。
轉(zhuǎn)載于:https://www.cnblogs.com/liufofu/p/4141975.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的myisam表锁及锁粒度调节的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 链接服务器---无效的产品名称
- 下一篇: Linux目录、文件的创建与删除