最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql數(shù)據(jù)庫(kù)中各種鎖歸納總結(jié)

 更新時(shí)間:2024年08月06日 09:16:27   作者:gis分享者  
相對(duì)于其他的數(shù)據(jù)庫(kù)而言,MySQL的鎖機(jī)制比較簡(jiǎn)單,最顯著的特點(diǎn)就是不同的存儲(chǔ)引擎支持不同的鎖機(jī)制,這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫(kù)中各種鎖歸納總結(jié)的相關(guān)資料,需要的朋友可以參考下

一、引言

在現(xiàn)代應(yīng)用程序中,數(shù)據(jù)庫(kù)是不可或缺的組成部分之一。而MySQL作為一款開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛應(yīng)用于各種規(guī)模的應(yīng)用中。然而,在高并發(fā)的情況下,數(shù)據(jù)庫(kù)的性能往往成為瓶頸,因此數(shù)據(jù)庫(kù)鎖機(jī)制成為了至關(guān)重要的技術(shù)。本文將深入探討MySQL中的各種鎖,包括行鎖、表鎖、頁(yè)鎖等,以及如何使用它們來(lái)提高數(shù)據(jù)庫(kù)的性能。

二、鎖分類

從對(duì)數(shù)據(jù)操作的粒度來(lái)分

表鎖:操作時(shí)會(huì)鎖定整個(gè)表

行鎖:操作時(shí)會(huì)鎖定當(dāng)前操作行

從對(duì)數(shù)據(jù)操作的類型分

讀鎖(共享鎖):針對(duì)同一個(gè)份數(shù)據(jù),多個(gè)讀操作可以同時(shí)進(jìn)行而不會(huì)互相影響

寫(xiě)鎖(排它鎖):當(dāng)前操作沒(méi)有完成之前,它會(huì)阻斷其他寫(xiě)鎖和讀鎖

三、Mysql鎖

mysql鎖的特性

表級(jí)鎖

偏向MyISAM存儲(chǔ)引擎,開(kāi)銷(xiāo)小,加鎖快;不會(huì)出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低

行級(jí)鎖

偏向InnoDB存儲(chǔ)引擎,開(kāi)銷(xiāo)小,加鎖慢;會(huì)出現(xiàn)死鎖;鎖定粒度小,發(fā)生鎖沖突的概率最低,并發(fā)度最高

頁(yè)面鎖

開(kāi)鎖和加鎖時(shí)間介于表鎖和行鎖之間;會(huì)出現(xiàn)死鎖;鎖定粒度介于表鎖和行鎖之間,并發(fā)度一般

四、MyISAM表鎖

MyISAM在執(zhí)行查詢語(yǔ)句(SELECT)前會(huì)自動(dòng)給涉及的所有表加讀鎖,在執(zhí)行更新操作(UPDATE、DELETE、INSERT)前,會(huì)自動(dòng)給涉及的表加寫(xiě)鎖,這個(gè)過(guò)程并不需要用戶干預(yù),因此,用戶一般不需要直接用 LOCK TABLE 命令給MyISAM表顯式加鎖。
顯式加鎖語(yǔ)法:

lock table table_name read;
lock table table_name write;
unlock tables;

MyISAM表的讀操作不會(huì)阻塞其他用戶對(duì)同一表的讀請(qǐng)求,但會(huì)阻塞對(duì)同一表的寫(xiě)操作 MyISAM表的寫(xiě)操作會(huì)阻塞其他用戶對(duì)同一表的讀和寫(xiě)操作 MyISAM的讀寫(xiě)鎖調(diào)度是優(yōu)先寫(xiě),這也是MyISAM不適合作寫(xiě)為主的表的存儲(chǔ)引擎原因。因?yàn)閷?xiě)鎖后,其他線程不能做任何操作,大量的更新會(huì)使查詢很難得到鎖,從而造成永遠(yuǎn)阻塞

查看鎖爭(zhēng)用情況:

show open tables;
show status like 'Table_locks%';

五、InnoDB鎖

兩種類型的行鎖共享鎖(S)

又稱讀鎖,簡(jiǎn)稱S鎖,共享鎖就是多個(gè)事務(wù)對(duì)于同一數(shù)據(jù)可以共享一把鎖,都能訪問(wèn)到數(shù)據(jù),但是只能讀不能修改

排它鎖(X)

又稱寫(xiě)鎖,簡(jiǎn)稱X鎖,排他鎖就是不能與其他鎖并存,如一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的排它鎖,其他事務(wù)就不能再獲取改行的其他鎖,包括共享鎖和排它鎖,但是獲取排它鎖的事務(wù)是可以對(duì)數(shù)據(jù)行讀取和修改

加鎖語(yǔ)句:

select * from table_name where … LOCK IN SHARE MODE
select * from table_name where… FOR UPDATE

TIPS

對(duì)于UPDATE、DELETE和INSERT語(yǔ)句,InnoDB會(huì)自動(dòng)給涉及數(shù)據(jù)集加排它鎖
對(duì)于普通SELECT語(yǔ)句,InnnoDB不會(huì)加任何鎖

無(wú)索引行鎖升級(jí)為表鎖執(zhí)行更新時(shí),如果where條件沒(méi)有索引 或 寫(xiě)法不當(dāng)導(dǎo)致索引失效(例如:隱式轉(zhuǎn)換),最終行鎖變?yōu)楸礞i

-- name 類型為varchar(16)
update test_innodb_lock set sex='2' where name = 400;

六、間隙鎖

當(dāng)我們用范圍條件而不是使用相等條件檢索數(shù)據(jù),并請(qǐng)求共享或排它鎖時(shí),InnoDB會(huì)給符合條件的已有數(shù)據(jù)進(jìn)行加鎖;對(duì)于鍵值在條件范圍內(nèi)但不存在的記錄,叫做“間隙(GAP)",InnoDB也會(huì)對(duì)這個(gè)”間隙“加鎖,這種鎖機(jī)制就是所謂的間隙鎖(Next-Key鎖)

update test_innodb_lock set sex = '0' where id < 4;

另一個(gè)事務(wù)如果執(zhí)行下面語(yǔ)句時(shí),會(huì)被阻塞

insert into test_innodb_lock values(2, '200', '1');

行鎖爭(zhēng)用情況

show status like 'innodb_row_lock%';
  • Innodb_row_lock_current_waits:當(dāng)前正在等待鎖定的數(shù)量
  • Innodb_row_lock_time:從系統(tǒng)啟動(dòng)到現(xiàn)在鎖定總時(shí)間長(zhǎng)度
  • Innodb_row_lock_time_avg:每次等待所花平均時(shí)長(zhǎng)
  • Innodb_row_lock_time_max:從系統(tǒng)啟動(dòng)到現(xiàn)在等待最長(zhǎng)的一次所花的時(shí)間
  • Innodb_row_lock_waits:系統(tǒng)啟動(dòng)后到現(xiàn)在總共等待的次數(shù)

七、總結(jié)

InnoDB存儲(chǔ)引擎由于實(shí)現(xiàn)了行級(jí)鎖定,雖然在鎖定機(jī)制的實(shí)現(xiàn)方面帶來(lái)了性能損耗可能比表鎖會(huì)更高一些,但是在整體并發(fā)處理能力方面要遠(yuǎn)遠(yuǎn)優(yōu)于MyISAM的表鎖的。當(dāng)系統(tǒng)并發(fā)量較高的時(shí)候,InnoDB的整體性能和MyISAM相比就會(huì)有比較明顯的優(yōu)勢(shì)
但是,InnoDB的行級(jí)鎖同樣也有其脆弱的一面,當(dāng)我們使用不當(dāng)?shù)臅r(shí)候,可能會(huì)讓InnoDB的整體性能表現(xiàn)不僅不能比MyISAM高,甚至可能會(huì)更差

優(yōu)化建議

盡可能讓所有數(shù)據(jù)檢索都能通過(guò)索引來(lái)完成,避免無(wú)索引行鎖升級(jí)為表鎖

合理設(shè)計(jì)索引,盡量縮小鎖的范圍

盡可能減少索引條件及索引范圍,避免間隙鎖

盡量控制事務(wù)大小,減少鎖定資源量和時(shí)間長(zhǎng)度

盡可使用低級(jí)別事務(wù)隔離(需要業(yè)務(wù)層面滿足需求)

到此這篇關(guān)于mysql數(shù)據(jù)庫(kù)中各種鎖歸納的文章就介紹到這了,更多相關(guān)mysql各種鎖總結(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何修改Linux服務(wù)器中的MySQL數(shù)據(jù)庫(kù)密碼

    如何修改Linux服務(wù)器中的MySQL數(shù)據(jù)庫(kù)密碼

    這篇文章主要介紹了如何修改Linux服務(wù)器中的MySQL數(shù)據(jù)庫(kù)密碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MySQL如何保證備份數(shù)據(jù)的一致性詳解

    MySQL如何保證備份數(shù)據(jù)的一致性詳解

    在高并發(fā)的場(chǎng)景下,大量的請(qǐng)求直接訪問(wèn)Mysql很容易造成性能問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于MySQL如何保證備份數(shù)據(jù)一致性的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • MySQL 全文索引的原理與缺陷

    MySQL 全文索引的原理與缺陷

    這篇文章主要介紹了MySQL 全文索引的原理與缺陷,幫助大家更好的理解和使用MySQL中的索引,感興趣的朋友可以了解下
    2020-12-12
  • 深入理解Mysql中的MVCC

    深入理解Mysql中的MVCC

    這篇文章主要介紹了深入理解Mysql中的MVCC,同樣的sql查詢語(yǔ)句在一個(gè)事務(wù)?里多次執(zhí)行查詢結(jié)果相同,就算其它事務(wù)對(duì)數(shù)據(jù)有修改也不會(huì)影響當(dāng)前事務(wù)sql語(yǔ)句的查詢結(jié)果,?這個(gè)隔離性就是靠MVCC機(jī)制來(lái)保證的,需要的朋友可以參考下
    2023-09-09
  • CentOS下重置MySQL的root密碼的教程

    CentOS下重置MySQL的root密碼的教程

    這篇文章主要介紹了CentOS下重置MySQL的root密碼的教程,首先要擁有系統(tǒng)的root權(quán)限,最后還附屬了一個(gè)使用mysqladmin下的方法,需要的朋友可以參考下
    2015-11-11
  • MySQL配置多主復(fù)制的實(shí)現(xiàn)步驟

    MySQL配置多主復(fù)制的實(shí)現(xiàn)步驟

    多主復(fù)制是一種允許多個(gè)MySQL服務(wù)器同時(shí)接受寫(xiě)操作的復(fù)制方式,本文就來(lái)介紹一下MySQL配置多主復(fù)制的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-08-08
  • 關(guān)于MySQL死鎖問(wèn)題的深入分析

    關(guān)于MySQL死鎖問(wèn)題的深入分析

    這篇文章主要給大家介紹了關(guān)于MySQL死鎖問(wèn)題的深入分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • MySQL數(shù)據(jù)庫(kù)優(yōu)化之索引實(shí)現(xiàn)原理與用法分析

    MySQL數(shù)據(jù)庫(kù)優(yōu)化之索引實(shí)現(xiàn)原理與用法分析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)優(yōu)化之索引實(shí)現(xiàn)原理與用法,結(jié)合實(shí)例形式分析了mysql數(shù)據(jù)庫(kù)優(yōu)化操作的索引原理、具體實(shí)現(xiàn)與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • mysql數(shù)據(jù)庫(kù)常見(jiàn)基本操作實(shí)例分析【創(chuàng)建、查看、修改及刪除數(shù)據(jù)庫(kù)】

    mysql數(shù)據(jù)庫(kù)常見(jiàn)基本操作實(shí)例分析【創(chuàng)建、查看、修改及刪除數(shù)據(jù)庫(kù)】

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)常見(jiàn)基本操作,結(jié)合實(shí)例形式分析了mysql創(chuàng)建、查看、修改及刪除數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • MySQL 篩選條件放 ON后 vs 放 WHERE 后的區(qū)別解析

    MySQL 篩選條件放 ON后 vs 放 WHERE 后的區(qū)

    文章解釋了在MySQL中,將篩選條件放在ON和WHERE中的區(qū)別,文章通過(guò)幾個(gè)場(chǎng)景說(shuō)明了ON和WHERE的區(qū)別,并總結(jié)了ON用于關(guān)聯(lián),WHERE用于過(guò)濾,以及在LEFT JOIN中ON用于保行,在INNER JOIN中用于提效,本文介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-12-12

最新評(píng)論

贺兰县| 项城市| 渭源县| 益阳市| 岑溪市| 章丘市| 荣成市| 洛扎县| 清远市| 江孜县| 秭归县| 康定县| 南靖县| 桃园县| 尉犁县| 祁阳县| 沅陵县| 陈巴尔虎旗| 舒兰市| 绥芬河市| 淮南市| 玉屏| 玉龙| 洪湖市| 巴彦县| 河间市| 屏边| 泉州市| 临潭县| 金山区| 孙吴县| 大同市| 正宁县| 锡林浩特市| 托里县| 荔浦县| 和静县| 连山| 梁平县| 赣州市| 杭锦旗|