久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql的鎖機(jī)制基本原理

153次閱讀
沒有評論

共計(jì) 2505 個(gè)字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。

本篇內(nèi)容介紹了“mysql 的鎖機(jī)制基本原理”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

今天沒事就學(xué)習(xí)一下 mysql 的三種鎖機(jī)制的優(yōu)缺點(diǎn):
MySQL 各存儲(chǔ)引擎使用了三種類型(級別)的鎖定機(jī)制:行級鎖定,頁級鎖定和表級鎖定。下面我們先分析一下 MySQL 這三種鎖定的特點(diǎn)和各自的優(yōu)劣所在。
● 行級鎖定(row-level)
行級鎖定最大的特點(diǎn)就是鎖定對象的顆粒度很小,也是目前各大管理軟件所實(shí)現(xiàn)的鎖定顆粒度最小的。由于鎖定顆粒度很小,所以發(fā)生鎖定資源爭用的概率也最小,能夠給予應(yīng)用程序盡可能大的并發(fā)處理能力而提高一些需要高并發(fā)應(yīng)用系統(tǒng)的整體性能。雖然能夠在并發(fā)處理能力上面有較大的優(yōu)勢,但是行級鎖定也因此帶來了不少弊端。由于鎖定資源的顆粒度很小,所以每次獲取鎖和釋放鎖需要做的事情也更多,帶來的消耗自然也就更大了。此外,行級鎖定也最容易發(fā)生死鎖。
● 表級鎖定(table-level)
和行級鎖定相反,表級別的鎖定是 MySQL 各存儲(chǔ)引擎中最大顆粒度的鎖定機(jī)制。該鎖定機(jī)制最大的特點(diǎn)是實(shí)現(xiàn)邏輯非常簡單,帶來的系統(tǒng)負(fù)面影響最小。所以獲取鎖和釋放鎖的速度很快。由于表級鎖一次會(huì)將整個(gè)表鎖定,所以可以很好的避免困擾我們的死鎖問題。當(dāng)然,鎖定顆粒度大所帶來最大的負(fù)面影響就是出現(xiàn)鎖定資源爭用的概率也會(huì)最高,致使并大度大打折扣。
● 頁級鎖定(page-level)
頁級鎖定是 MySQL 中比較獨(dú)特的一種鎖定級別,在其他數(shù)據(jù)庫管理軟件中也并不是太常見。頁級鎖定的特點(diǎn)是鎖定顆粒度介于行級鎖定與表級鎖之間,所以獲取鎖定所需要的資源開銷,以及所能提供的并發(fā)處理能力也同樣是介于上面二者之間。另外,頁級鎖定和行級鎖定一樣,會(huì)發(fā)生死鎖。
在數(shù)據(jù)庫實(shí)現(xiàn)資源鎖定的過程中,隨著鎖定資源顆粒度的減小,鎖定相同數(shù)據(jù)量的數(shù)據(jù)所需要消耗的內(nèi)存數(shù)量是越來越多的,實(shí)現(xiàn)算法也會(huì)越來越復(fù)雜。不過,隨著鎖定資源顆粒度的減小,應(yīng)用程序的訪問請求遇到鎖等待的可能性也會(huì)隨之降低,系統(tǒng)整體并發(fā)度也隨之提升。
MySQL 的表級鎖定主要分為兩種類型,一種是讀鎖定,另一種是寫鎖定。在 MySQL 中,主要通過四個(gè)隊(duì)列來維護(hù)這兩種鎖定:兩個(gè)存放當(dāng)前正在鎖定中的讀和寫鎖定信息,另外兩個(gè)存放等待中的讀寫鎖定信息,如下:
bull;Current read-lock queue (lock- read)
bull;Pending read-lock queue (lock- read_wait)
bull;Current write-lock queue (lock- write)
bull;Pending write-lock queue (lock- write_wait)
讀鎖定
一個(gè)新的客戶端請求在申請獲取讀鎖定資源的時(shí)候,需要滿足兩個(gè)條件:
1、請求鎖定的資源當(dāng)前沒有被寫鎖定;
2、寫鎖定等待隊(duì)列(Pending write-lock queue)中沒有更高優(yōu)先級的寫鎖定等待;
如果滿足了上面兩個(gè)條件之后,該請求會(huì)被立即通過,并將相關(guān)的信息存入 Current read-lock queue 中,而如果上面兩個(gè)條件中任何一個(gè)沒有滿足,都會(huì)被迫進(jìn)入等待隊(duì)列 Pending read-lock queue 中等待資源的釋放。
寫鎖定
當(dāng)客戶端請求寫鎖定的時(shí)候,MySQL 首先檢查在 Current write-lock queue 是否已經(jīng)有鎖定相同資源的信息存在。如果 Current write-lock queue 沒有,則再檢查 Pending write-lock queue,如果在 Pending write-lock queue 中找到了,自己也需要進(jìn)入等待隊(duì)列并暫停自身線程等待鎖定資源。反之,如果 Pending write-lock queue 為空,則再檢測 Current read-lock queue,如果有鎖定存在,則同樣需要進(jìn)入 Pending write-lock queue 等待。當(dāng)然,也可能遇到以下這兩種特殊情況:
1. 請求鎖定的類型為 WRITE_DELAYED;
2. 請求鎖定的類型為 WRITE_CONCURRENT_INSERT 或者是 TL_WRITE_ALLOW_WRITE,同時(shí) Current read lock 是 READ_NO_INSERT 的鎖定類型。
當(dāng)遇到這兩種特殊情況的時(shí)候,寫鎖定會(huì)立即獲得而進(jìn)入 Current write-lock queue 中如果剛開始第一次檢測就 Current write-lock queue 中已經(jīng)存在了鎖定相同資源的寫鎖定存在,那么就只能進(jìn)入等待隊(duì)列等待相應(yīng)資源鎖定的釋放了。讀請求和寫等待隊(duì)列中的寫鎖請求的優(yōu)先級規(guī)則主要為以下規(guī)則決定:
1. 除了 READ_HIGH_PRIORITY 的讀鎖定之外,Pending write-lock queue 中的 WRITE 寫鎖定能夠阻塞所有其他的讀鎖定;
2. READ_HIGH_PRIORITY 讀鎖定的請求能夠阻塞所有 Pending write-lock queue 中的寫鎖定;
3. 除了 WRITE 寫鎖定之外,Pending write-lock queue 中的其他任何寫鎖定都比讀鎖定的優(yōu)先級低。
寫鎖定出現(xiàn)在 Current write-lock queue 之后,會(huì)阻塞除了以下情況下的所有其他鎖定的請求:
1. 在某些存儲(chǔ)引擎的允許下,可以允許一個(gè) WRITE_CONCURRENT_INSERT 寫鎖定請求
2. 寫鎖定為 WRITE_ALLOW_WRITE 的時(shí)候,允許除了 WRITE_ONLY 之外的所有讀和寫鎖定請求
3. 寫鎖定為 WRITE_ALLOW_READ 的時(shí)候,允許除了 READ_NO_INSERT 之外的所有讀鎖定請求
4. 寫鎖定為 WRITE_DELAYED 的時(shí)候,允許除了 READ_NO_INSERT 之外的所有讀鎖定請求
5. 寫鎖定為 WRITE_CONCURRENT_INSERT 的時(shí)候,允許除了 READ_NO_INSERT 之外的所有讀鎖定請求

“mysql 的鎖機(jī)制基本原理”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-01發(fā)表,共計(jì)2505字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 杭州市| 永州市| 娄烦县| 吉林市| 塘沽区| 梨树县| 方山县| 平乡县| 恭城| 策勒县| 和平县| 民县| 长白| 孟州市| 海林市| 孟连| 涟源市| 鄂尔多斯市| 镇远县| 鄂托克旗| 顺平县| 洛隆县| 五河县| 五指山市| 南宫市| 桐庐县| 青冈县| 江永县| 柘城县| 资中县| 澄江县| 油尖旺区| 芦山县| 临湘市| 称多县| 共和县| 论坛| 萨迦县| 广安市| 乌兰察布市| 定远县|