乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      mysql鎖機(jī)制總結(jié)

       昵稱10504424 2014-01-23

      1.隔離級(jí)別

      (1)讀不提交(Read UncommitedRU)

      這種隔離級(jí)別下,事務(wù)間完全不隔離,會(huì)產(chǎn)生臟讀,可以讀取未提交的記錄,實(shí)際情況下不會(huì)使用。

      (2)讀提交(Read commitedRC)

      僅能讀取到已提交的記錄,這種隔離級(jí)別下,會(huì)存在幻讀現(xiàn)象,所謂幻讀是指在同一個(gè)事務(wù)中,多次執(zhí)行同一個(gè)查詢,返回的記錄不完全相同的現(xiàn)象。幻讀產(chǎn)生的根本原因是,在RC隔離級(jí)別下,每條語(yǔ)句都會(huì)讀取已提交事務(wù)的更新,若兩次查詢之間有其他事務(wù)提交,則會(huì)導(dǎo)致兩次查詢結(jié)果不一致。雖然如此,讀提交隔離級(jí)別在生產(chǎn)環(huán)境中使用很廣泛。

      (3)可重復(fù)讀(Repeatable Read, RR)

      可重復(fù)讀解決了幻讀問(wèn)題。不是所有的數(shù)據(jù)庫(kù)都實(shí)現(xiàn)了該隔離級(jí)別,后面會(huì)簡(jiǎn)單介紹下mysql是如何實(shí)現(xiàn)可重復(fù)讀隔離級(jí)別的。

      (4)串行化(Serializable)

      在串行化隔離模式下,消除了臟讀,幻象,但事務(wù)并發(fā)度急劇下降,事務(wù)的隔離級(jí)別與事務(wù)的并發(fā)度成反比,隔離級(jí)別越高,事務(wù)的并發(fā)度越低。實(shí)際生產(chǎn)環(huán)境下,dba會(huì)在并發(fā)和滿足業(yè)務(wù)需求之間作權(quán)衡,選擇合適的隔離級(jí)別。

      2.并發(fā)調(diào)度方式

      與隔離級(jí)別緊密聯(lián)系的另外一個(gè)東西是并發(fā)調(diào)度,通過(guò)并發(fā)調(diào)度實(shí)現(xiàn)隔離級(jí)別。對(duì)于并發(fā)調(diào)度,不同的數(shù)據(jù)庫(kù)廠商有不同的實(shí)現(xiàn)機(jī)制,但基本原理類似,都是通過(guò)加鎖來(lái)保護(hù)數(shù)據(jù)對(duì)象不同時(shí)被多個(gè)事務(wù)修改。多版本的并發(fā)控制(MVCC)相對(duì)于傳統(tǒng)的基于鎖的并發(fā)控制主要特點(diǎn)是讀不上鎖,這種特性對(duì)于讀多寫少的場(chǎng)景,大大提高了系統(tǒng)的并發(fā)度,因此大部分關(guān)系型數(shù)據(jù)庫(kù)都實(shí)現(xiàn)了MVCC。

      3.兩階段鎖協(xié)議

      兩階段鎖協(xié)議的含義是,事務(wù)分為兩個(gè)階段,第一個(gè)階段是獲得封鎖,第二個(gè)階段是釋放封鎖。兩階段封鎖保證并發(fā)調(diào)度的正確性。兩階段封鎖相對(duì)于一階段封鎖(一次性獲得事務(wù)需要的所有鎖),提高了并發(fā)度,但同時(shí)也帶來(lái)了死鎖的可能。

      4.死鎖

      所謂死鎖是指兩個(gè)或多個(gè)事務(wù),各自占有對(duì)方的期望獲得的資源,形成的循環(huán)等待,彼此無(wú)法繼續(xù)執(zhí)行的一種狀態(tài)。

      5.鎖類型

      根據(jù)鎖的類型分,可以分為共享鎖,排他鎖,意向共享鎖和意向排他鎖。根據(jù)鎖的粒度分,又可以分為行鎖,表鎖。對(duì)于mysql而言,事務(wù)機(jī)制更多是靠底層的存儲(chǔ)引擎來(lái)實(shí)現(xiàn),因此,mysql層面只有表鎖,而支持事務(wù)的innodb存儲(chǔ)引擎則實(shí)現(xiàn)了行鎖(記錄鎖)gap鎖,next-key鎖。Mysql的記錄鎖實(shí)質(zhì)是索引記錄的鎖,因?yàn)?span lang="EN-US">innodb是索引組織表;gap鎖是索引記錄間隙的鎖,這種鎖只在RR隔離級(jí)別下有效;next-key鎖是記錄鎖加上記錄之前gap鎖的組合。mysql通過(guò)gap鎖和next-key鎖實(shí)現(xiàn)RR隔離級(jí)別。

      說(shuō)明:

      1. 對(duì)于更新操作(讀不上鎖),只有走索引才可能上行鎖;否則會(huì)對(duì)聚簇索引的每一行上寫鎖,實(shí)際等同于對(duì)表上寫鎖。
      2. 若多個(gè)物理記錄對(duì)應(yīng)同一個(gè)索引,若同時(shí)訪問(wèn),也會(huì)出現(xiàn)鎖沖突;
      3. 當(dāng)表有多個(gè)索引時(shí),不同事務(wù)可以用不同的索引鎖住不同的行,另外innodb會(huì)同時(shí)用行鎖對(duì)數(shù)據(jù)記錄(聚簇索引)加鎖。
      4. MVCC并發(fā)控制機(jī)制下,任何操作都不會(huì)阻塞讀操作,讀操作也不會(huì)阻塞任何操作,只因?yàn)樽x不上鎖。

      6. 鎖互斥與兼容關(guān)系矩陣


      X (排他鎖)

      S (共享鎖)

      IX (意向排他鎖)

      IS(意向共享鎖)

      X

      n

      n

      n

      n

      S

      n

      y

      n

      y

      IX

      n

      n

      y

      y

      IS

      n

      y

      y

      y

      (y表示兼容,n表示不兼容):

      7.mysql鎖相關(guān)操作

      (1).查看最近一次死鎖信息

      show innodb engine status;

      查看LATEST DETECTED DEADLOCK這一欄的相關(guān)信息。

      (2)查看正在使用的鎖

      SELECT r.trx_id waiting_trx_id,
      r.trx_query waiting_query,
      b.trx_id blocking_trx_id,
      b.trx_query blocking_query,
      b.trx_mysql_thread_id blocking_thread,
      b.trx_started,
      b.trx_wait_started
      FROM information_schema.innodb_lock_waits w
      INNER JOIN information_schema.innodb_trx b
      ON b.trx_id = w.blocking_trx_id
      INNER JOIN information_schema.innodb_trx r
      ON r.trx_id = w.requesting_trx_id

      (3)查看事務(wù)的隔離級(jí)別

      show variables like 'tx_isolation';

      8.典型SQL語(yǔ)句鎖分析

      (1).select ......lock in share mode 獲得共享鎖。【對(duì)于表上意向共享鎖;對(duì)于讀取的每一個(gè)行,上行級(jí)共享鎖】
      (2).select ...... for update 獲得排他鎖【對(duì)于表上意向排他鎖;對(duì)于讀取的每一個(gè)行,會(huì)上行級(jí)排他鎖】
      (3).insert into target_tab select * from source_tab where ...
      (4).create table new_tab as select ... From source_tab where ...
      (3)和(4)在RR隔離級(jí)別下,會(huì)對(duì)source_tab上鎖,防止出現(xiàn)幻讀;RC隔離級(jí)別下,不上鎖。
      (5).FLUSH TABLES WITH READ LOCK
      全局讀鎖定,鎖定數(shù)據(jù)庫(kù)中的所有庫(kù)中的所有表,mysqldump會(huì)用到這個(gè)命令。

      PS:登博有一篇文章《MySQL加鎖處理分析》對(duì)mysql加鎖寫地非常詳細(xì),大家可以好好學(xué)習(xí)下,鏈接地址:http:///?p=771

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多