并發(fā)控制
無(wú)論什么時(shí)候,只要有多個(gè)線程(或進(jìn)程)同一數(shù)據(jù)修改數(shù)據(jù),就會(huì)產(chǎn)生并發(fā)控制問(wèn)題
讀寫(xiě)鎖
共享鎖和排他鎖(或者是讀鎖和寫(xiě)鎖)
- 讀鎖: 共享的碳想,多用戶可以同時(shí)讀取同一個(gè)資源劳殖,相互不干擾
- 寫(xiě)鎖: 排他槐沼,會(huì)阻塞其他的讀鎖或者寫(xiě)鎖,只能一個(gè)用戶寫(xiě)入
鎖粒度
盡量只鎖住需要修改的內(nèi)容润绵,而不是所有資源线椰。任何時(shí)候,在給定的資源上尘盼,鎖的數(shù)量越少憨愉,沖突越少,那么系統(tǒng)的并發(fā)程度就越高卿捎。
鎖也耗資源配紫,鎖的操作包括,檢查所是否已經(jīng)解除午阵,獲得鎖躺孝,釋放鎖,這些都會(huì)增加系統(tǒng)開(kāi)銷底桂,進(jìn)而影響系統(tǒng)性能植袍。鎖策略,就是在鎖的開(kāi)銷和安全性之間尋求平衡籽懦。一般會(huì)采用行級(jí)鎖于个,MySQL提供了多個(gè)選擇,每種存儲(chǔ)引擎都能實(shí)現(xiàn)自己的鎖
表鎖
MySQL中最基本的鎖策略暮顺,開(kāi)銷最小厅篓,粗暴簡(jiǎn)單秀存。鎖住整張表,需要拿到該鎖才能進(jìn)行增改刪羽氮,而且該鎖還會(huì)阻塞其他用戶的讀或链。只有沒(méi)有寫(xiě)鎖時(shí),多用戶才能同時(shí)讀取档押。
另外MySQL會(huì)在使用alert table之類的語(yǔ)句中使用表鎖澳盐,忽略存儲(chǔ)引擎自己的鎖
.....
剩余部分請(qǐng)看原文