IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類(lèi)|軟件專(zhuān)題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁(yè)數(shù)據(jù)庫(kù)MYSQL → Mysql教程 對(duì)MySQL中的鎖機(jī)制的總結(jié)

Mysql教程 對(duì)MySQL中的鎖機(jī)制的總結(jié)

時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)

  今天來(lái)簡(jiǎn)單總結(jié)一下mysql的鎖機(jī)制,不妥的歡迎拍磚!

  1、對(duì)于MySQL來(lái)說(shuō),有三種鎖的級(jí)別:頁(yè)級(jí)、表級(jí)、行級(jí)。

  頁(yè)級(jí)的典型代表引擎為BDB。

  表級(jí)的典型代表引擎為MyISAM,MEMORY以及很久以前的ISAM。

  行級(jí)的典型代表引擎為INNODB。

  2、我們實(shí)際應(yīng)用中用的最多的就是行鎖了。

  行級(jí)鎖的優(yōu)點(diǎn)如下:

  1)、當(dāng)很多連接分別進(jìn)行不同的查詢(xún)時(shí)減小LOCK狀態(tài)。

  2)、如果出現(xiàn)異常,可以減少數(shù)據(jù)的丟失。因?yàn)橐淮慰梢灾换貪L一行或者幾行少量的數(shù)據(jù)。

  行級(jí)鎖的缺點(diǎn)如下:

  1)、比頁(yè)級(jí)鎖和表級(jí)鎖要占用更多的內(nèi)存。

  2)、進(jìn)行查詢(xún)時(shí)比頁(yè)級(jí)鎖和表級(jí)鎖需要的I/O要多,所以我們經(jīng)常把行級(jí)鎖用在寫(xiě)操作而不是讀操作。

  3)、容易出現(xiàn)死鎖。

  3、MySQL用寫(xiě)隊(duì)列和讀隊(duì)列來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的寫(xiě)和讀操作。

  對(duì)于寫(xiě)鎖定如下:

  1)、如果表沒(méi)有加鎖,那么對(duì)其加寫(xiě)鎖定。

  2)、否則,那么把請(qǐng)求放入寫(xiě)鎖隊(duì)列中。

  對(duì)于讀鎖定如下:

  1)、如果表沒(méi)有加寫(xiě)鎖,那么加一個(gè)讀鎖。

  2)、否則,那么把請(qǐng)求放到讀鎖隊(duì)列中。

  當(dāng)然我們可以分別用low_priority 以及high_priority在寫(xiě)和讀操作上來(lái)改變這些行為。

  4、下面我來(lái)一個(gè)簡(jiǎn)單的例子解釋上面的說(shuō)法

  我們來(lái)運(yùn)行一個(gè)時(shí)間很長(zhǎng)的查詢(xún)

  1)客戶(hù)端1:

  mysql>selectcount(*) from content group by content;

  ...

  客戶(hù)端2:

  mysql>updatecontent set content = 'I love you' where id = 444;

  Query OK, 1 row affected (30.68 sec)

  Rows matched: 1 Changed: 1 Warnings: 0

  用了半分鐘。

  2)我們現(xiàn)在終止客戶(hù)端1。

  此時(shí)客戶(hù)端2:

  mysql>updatecontent set content = 'I hate you' where id = 444;

  Query OK, 1 row affected (0.02 sec)

  Rows matched: 1 Changed: 1 Warnings: 0

  僅僅用了20毫秒。

  這個(gè)例子很好的說(shuō)明了讀寫(xiě)隊(duì)列的運(yùn)行。

  對(duì)于1中的客戶(hù)端1,此時(shí)表沒(méi)有加鎖,當(dāng)然也沒(méi)有加寫(xiě)鎖了,那么此時(shí)客戶(hù)端1對(duì)表加了一個(gè)讀鎖。

  對(duì)于1中的客戶(hù)端2,此時(shí)因?yàn)楸碛幸粋(gè)讀鎖,所以把UPDATE請(qǐng)求放到寫(xiě)鎖定隊(duì)列中。

  當(dāng)讀鎖釋放的時(shí)候,也就是SHOW PROCESSLIST中STATUS 為COPY TO TMP TABLE的時(shí)候,UPDATE操作開(kāi)始執(zhí)行。

  5、可以在REPLICATION中對(duì)MASTER 和SLAVE運(yùn)用不同的鎖定使系統(tǒng)達(dá)到最佳的性能。(當(dāng)然這個(gè)前提是SQL語(yǔ)句都是最優(yōu)的。)

關(guān)鍵詞標(biāo)簽:總結(jié),機(jī)制,教程,客戶(hù)端

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門(mén)文章 10款MySQL數(shù)據(jù)庫(kù)客戶(hù)端圖形界面管理工具推薦10款MySQL數(shù)據(jù)庫(kù)客戶(hù)端圖形界面管理工具推薦MySQL常用維護(hù)管理工具MySQL常用維護(hù)管理工具Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)MySQL復(fù)制的概述、安裝、故障、技巧、工具MySQL復(fù)制的概述、安裝、故障、技巧、工具

相關(guān)下載

人氣排行 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)Mysql 1045錯(cuò)誤解決辦法10款MySQL數(shù)據(jù)庫(kù)客戶(hù)端圖形界面管理工具推薦MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法MySQL導(dǎo)出導(dǎo)入命令的用例MySQL無(wú)法啟動(dòng)、無(wú)法停止各種解決方法總結(jié)三種常用的MySQL建表語(yǔ)句Mysql清空表的實(shí)現(xiàn)方法