<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0

    1、事務(wù)

          事務(wù)是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。 事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會(huì)永久更新面向數(shù)據(jù)的資源。通過將一組相關(guān)操作組合為一個(gè)要么全部成功要么全部失敗的單元,可以簡(jiǎn)化錯(cuò)誤恢復(fù)并使應(yīng)用程序更加可靠。數(shù)據(jù)庫服務(wù)器保證在事務(wù)范圍內(nèi)執(zhí)行的操作完整且正確地提交至磁盤,否則數(shù)據(jù)庫會(huì)復(fù)原至事務(wù)啟動(dòng)之前的狀態(tài)。
         一個(gè)邏輯工作單元要成為事務(wù),必須滿足所謂的ACID屬性。ACID的具體含義如下:
         1)A(Atomicity):操作序列要么完整的執(zhí)行,否則什么都不做;
         2)C(Consistency):一致性,事務(wù)執(zhí)行后,保證數(shù)據(jù)庫從一個(gè)一致性狀態(tài)到另外一個(gè)一致性狀態(tài);
         3)I(Isolation):隔離,一個(gè)事務(wù)的中間狀態(tài)對(duì)其他事務(wù)不可見,即每個(gè)用戶都感覺他們?cè)趩为?dú)使用數(shù)據(jù)庫。隔離級(jí)別用來定義多大程度的隔離多個(gè)不同的事務(wù);
         4)D(Durability):持久性,事務(wù)的有效性,不會(huì)應(yīng)用硬件或軟件的失敗而丟失。
    2、并發(fā)控制
          1)相關(guān)概念
           i)隔離(+一致性) => 并發(fā)控制;
           ii)多個(gè)事務(wù)可以訪問或修改相同的資源;
           iii)只要多個(gè)進(jìn)程共享資源,就需要對(duì)訪問進(jìn)程進(jìn)行排隊(duì)控制;
           iv)在進(jìn)行并發(fā)控制時(shí),數(shù)據(jù)庫內(nèi)部將生成多個(gè)并發(fā)事務(wù)訪問資源的操作序列表,并且每一個(gè)事務(wù)內(nèi)部的各個(gè)操作都需要序列化。
           2)串行調(diào)度存在的問題
           在串行調(diào)度中,采用操作序列,一個(gè)事務(wù)完成了再完成另外一個(gè),即使兩個(gè)事務(wù)T1、T2更新的是數(shù)據(jù)庫中不同的對(duì)象。此種方式從并發(fā)和性能角度考慮,都不能很好的利用計(jì)算機(jī)資源。
           為了改善性能,需要采用非串行調(diào)度,即允許事務(wù)并發(fā)執(zhí)行,即一個(gè)事務(wù)內(nèi)的操作可以在其他事務(wù)提交前開始執(zhí)行。
            3)并發(fā)調(diào)度的常見問題
            i)臟讀:事務(wù)T2讀取到了事務(wù)T1沒有提交的結(jié)果
             例如如下的操作序列會(huì)導(dǎo)致臟讀:
             事務(wù)T1讀取記錄,然后更新記錄;
             事務(wù)T2讀取了更新后的記錄;
             若T1后續(xù)操作失敗,會(huì)導(dǎo)致更新的記錄回滾,而同時(shí)事務(wù)T2已經(jīng)使用了這個(gè)沒有提交的值。
             ii)不可重復(fù)讀:事務(wù)T1中多個(gè)讀操作返回不同的結(jié)果
             事務(wù)T1讀取一個(gè)對(duì)象;
             事務(wù)T2讀取并更新同一個(gè)對(duì)象;
             事務(wù)T1再次讀取同一個(gè)對(duì)象返回了不同的值。
             iii)幻影讀:如果事務(wù)T1在同樣的情況下多次執(zhí)行select讀取的結(jié)果不同
             事務(wù)T1從一個(gè)表中檢索滿足特定條件的記錄返回m條記錄;
             事務(wù)T2往該表中insert/delete其他滿足相同條件的記錄;
             事務(wù)T1再次以相同的條件檢索該表的數(shù)據(jù)返回的數(shù)據(jù)記錄不為m條。
    3、鎖機(jī)制
           1)相關(guān)概念
            i)用戶可以鎖定一個(gè)對(duì)象,可以防止 其它用戶修改鎖定的對(duì)象;
            ii)在多個(gè)用戶并發(fā)訪問數(shù)據(jù)庫的情況下,為保證數(shù)據(jù)完整性,鎖是很有必要的;
            iii)程序可以顯式的對(duì)數(shù)據(jù)枷鎖,數(shù)據(jù)庫系統(tǒng)可以隱式的對(duì)對(duì)象進(jìn)行加鎖。
           2)鎖的類型
           i)共享鎖(Shared locks):多個(gè)用戶可以讀取相同的記錄
           如果一個(gè)對(duì)象上沒有排他鎖,則共享鎖可以加在該對(duì)象上,它可以防止其他事務(wù)更新數(shù)據(jù),但同時(shí),其他事務(wù)可以讀取該數(shù)據(jù),多個(gè)事務(wù)可以在同一個(gè)對(duì)象上加多個(gè)共享鎖。
           ii)排他鎖(Exclusive locks):同一時(shí)間僅僅有一個(gè)用戶可以讀取相同的記錄
           如果一個(gè)對(duì)象上沒有任何鎖,排他鎖才可以加在該對(duì)象上。一旦在記錄上加了排他鎖,則不能在該記錄上增加任何鎖了,直至鎖釋放。它可以防止其他事務(wù)讀取和更新數(shù)據(jù)。
           iii)提升/更新鎖(Promotable/Update lock):可以對(duì)鎖進(jìn)行升級(jí)或者降級(jí)
           在更新游標(biāo)時(shí)使用,由游標(biāo)在含有“for update”選項(xiàng)執(zhí)行時(shí)產(chǎn)生,只能在沒有排他鎖或其他更新鎖的記錄上加更新鎖。當(dāng)鎖定的記錄真正執(zhí)行的時(shí)候,更新鎖將提升為排他鎖。
           iv)專一鎖(Intent lock):是一種表級(jí)鎖,標(biāo)識(shí)在該表上有一個(gè)游標(biāo)在讀取數(shù)據(jù)
           由IDS自動(dòng)分配,如果一條記錄上的記錄被更新,一個(gè)排他鎖將分配在該記錄上,同時(shí)將該記錄的表上自動(dòng)加上專一鎖,這能保證沒有session可以在該表上增加排他鎖,只要該表中有記錄被增加了排他鎖。
           3)鎖的有效期
            i)程序可以控制數(shù)據(jù)庫鎖的有效期;
            ii)當(dāng)數(shù)據(jù)庫關(guān)閉后,數(shù)據(jù)庫鎖將被釋放;
            iii)根據(jù)數(shù)據(jù)庫使用了事務(wù)的情況,表鎖的有效期不同。如果數(shù)據(jù)沒有使用事務(wù)(沒有使用事務(wù)日志,也不使用commit work語句),顯式對(duì)一個(gè)表lock,當(dāng)執(zhí)行unload table時(shí),鎖將被釋放;
            iv)當(dāng)數(shù)據(jù)庫使用了事務(wù),事務(wù)結(jié)束時(shí),將釋放事務(wù)所有的鎖。
            4)不同粒度的鎖
             i)數(shù)據(jù)庫級(jí)別的鎖:數(shù)據(jù)庫管理活動(dòng),比如imports和exports。例如:
    DATABASE database_name EXCLUSIVE;
             ii)表級(jí)別的鎖:當(dāng)整個(gè)表或表的大部分?jǐn)?shù)據(jù)需要更新,加表級(jí)鎖效率高。參考語句如下:
             創(chuàng)建排他鎖實(shí)例:
    LOCK TABLE tab1 IN EXCLUSIVE MODE;
             創(chuàng)建共享鎖實(shí)例:
    LOCK TABLE tab2 IN SHARE MODE;
             取消表上的鎖實(shí)例:
    UNLOCK TABLE tab1;
             iii)頁級(jí)鎖:當(dāng)按數(shù)據(jù)物理順序進(jìn)行訪問和更新時(shí),頁級(jí)鎖效率高。修改鎖模似為頁級(jí)鎖的參考語句如下:
    ALTER TABLE tab1 LOCK MODE PAGE;
            頁級(jí)鎖模式是數(shù)據(jù)庫默認(rèn)的表鎖模式。
             iv)行級(jí)鎖:OLTP事務(wù)采用行級(jí)鎖效率高。創(chuàng)建表時(shí)指定為行級(jí)鎖的參考語句如下:
    CREATE TABLE tab1 (col1) LOCK MODE ROW;
             將某表修改為行級(jí)別的語句參考如下:
    ALTER TABLE tab1 LOCK MODE (ROW);
             5)何種情況下用何種鎖?
             i)如果更新表中相對(duì)較小一部分?jǐn)?shù)據(jù)的時(shí)候,采用行級(jí)鎖將獲取最好的性能,如果一個(gè)事務(wù)只訪問表中的一小部分?jǐn)?shù)據(jù),那就采用行級(jí)鎖。
             ii)如果一個(gè)事務(wù)頻繁訪問整個(gè)表中的數(shù)據(jù),設(shè)置更粗的力度,比如表級(jí)鎖;
             iii)如果更新數(shù)據(jù)庫中大部分表的大部分?jǐn)?shù)據(jù)的情況下,采用數(shù)據(jù)庫級(jí)別的鎖;
             iv)informix默認(rèn)的鎖模式為頁級(jí)鎖。
             v)ONCONFIG參數(shù)DEF_TABLE_LOCKMODE用于設(shè)置默認(rèn)鎖模式;
             vi)查看表鎖模式的方法如下:
             方法1:
    oncheck –pt dbname:tablename;
             方法2:
    dbschema –d dbname –t tablename -ss;
    4、事務(wù)和會(huì)話的隔離級(jí)別
            1)Dirty Read(臟讀)
            設(shè)置為Dirty Read隔離級(jí)別的參考語句如下:
    SET ISOLATION TO DIRTY READ;
             采用這種隔離級(jí)別,數(shù)據(jù)庫服務(wù)器不會(huì)分配任何鎖。查詢過程中,可以查詢到任何數(shù)據(jù)行,甚至那些被修改但尚未提交的記錄。非日志數(shù)據(jù)庫中只有Dirty-Read一種隔離級(jí)別。它一般用在如下應(yīng)用場(chǎng)景:
             靜態(tài)表(沒有更新,只讀的表),速度比100%準(zhǔn)備更重要的情況,以及不能等待鎖的釋放的情況中。
             2)Commited Read(只讀已提交的數(shù)據(jù))
             設(shè)置為該級(jí)別的參考語句如下:
    SET ISOLATION TO COMMITTED READ;
             這種隔離級(jí)別能確保所有的記錄都是提交到數(shù)據(jù)庫的,因而能避免讀取到臟數(shù)據(jù),能確保所有讀取到的記錄都是已提交的,當(dāng)一個(gè)進(jìn)程讀完記錄后,其它進(jìn)程就可以修改。
             在讀取數(shù)據(jù)前,數(shù)據(jù)庫服務(wù)器嘗試在記錄上加共享鎖。加鎖前,需要先檢查是否可以對(duì)對(duì)象加共享鎖;如果可以加鎖,則要保證要加鎖的記錄沒有其他進(jìn)程正在更新;當(dāng)繼續(xù)正在更新時(shí),記錄上有排他鎖,此時(shí)我們不能對(duì)記錄加共享鎖。
              3)Cursor Stability(游標(biāo)穩(wěn)定性)
              參考設(shè)置語句如下:
    SET ISOLATION TO CURSOR STABILITY;
             給更新Cursor,游標(biāo)讀的所有記錄加上共享鎖。通過游標(biāo)檢索數(shù)據(jù),共享鎖將一直保持到執(zhí)行下一個(gè)FETCH語句。不僅可以看到提交的記錄,也可以保證看到的記錄不會(huì)被更新,其它進(jìn)程不能更新或刪除你鎖看到的記錄,當(dāng)移動(dòng)到下一行時(shí),鎖才會(huì)釋放,記錄就可以進(jìn)行修改。
             4)Repeatable Read(可重復(fù)讀) 
             參考設(shè)置語句如下:
    SET ISOLATION TO REPEATABLE READ;

          數(shù)據(jù)庫在讀取的記錄上加共享鎖,驗(yàn)證是否可以讀取數(shù)據(jù),直到事務(wù)提交,鎖才能釋放,其他用戶可以讀取數(shù)據(jù),但是不能修改。可以保證在同一事務(wù)中前后兩次讀取記錄是一致的。當(dāng)必須要信任所有讀取的記錄,保證記錄不被修改,我們可以采用repeatable read,例如統(tǒng)計(jì)數(shù)據(jù)(銀行賬號(hào)的余額情況)、關(guān)聯(lián)查詢多個(gè)表等。
             5)Last Committed Read(讀取最后提交的數(shù)據(jù))
             這是一種樂觀鎖,它解決了Commited Read的不足,因?yàn)镃ommited Read在記錄被鎖時(shí),其它進(jìn)程需要等待。
             這種隔離級(jí)別常被用在WEB應(yīng)用系統(tǒng)中,例如在電子商務(wù)系統(tǒng)中,可以選擇商品添加到購物籃中,但是此時(shí)后臺(tái)可能你正在對(duì)商品的價(jià)格進(jìn)行更新,當(dāng)再次檢查的時(shí)候,可能發(fā)現(xiàn)商品的價(jià)格已經(jīng)發(fā)生變化。
             設(shè)置語句參考如下:

        SET ISOLATION TO COMMITTED READ LAST COMMITTED;

              相對(duì)Committed Read而言,提高了并發(fā)量和系統(tǒng)的吞吐量。可以通過ONCONFIG參數(shù)設(shè)置為隔離級(jí)別:USELASTCOMMITTED。表需要設(shè)置為行級(jí)鎖,不能是頁級(jí)鎖。
              6)幾種隔離級(jí)別的比較
              隔離級(jí)別                          臟讀?              不可重復(fù)讀?              幻影讀?
              Dirty Read                          Yes                         Yes                             Yes
              Last Commited Read         No                          Yes                             Yes          
              Commited Read                  No                          Yes                             Yes
              Cursor Stability                  No                          No                              Yes
              Repeatable Read                No                          No                               No            
    5、設(shè)置事務(wù)/會(huì)話的鎖模式
             1)不等待鎖的釋放
             為默認(rèn)的鎖模式,如果數(shù)據(jù)庫對(duì)象被鎖,則立即返回錯(cuò)誤。錯(cuò)誤消息參考如下:

    -244: Could not do a physical-order read to fetch the next row
    • 
    107: ISAM error: record is locked
             設(shè)置為此種鎖模式的參考語句如下:
    SET LOCK MODE TO NOT WAIT;
              2)一直等待鎖的釋放
              一個(gè)事務(wù)可能發(fā)生死鎖或掛住,等待資源的釋放。設(shè)置為此種模式的語句如下:
    SET LOCK MODE TO WAIT;
              3)在鎖釋放前,等待n秒
              直到等待n秒后,如果鎖一直沒有釋放將返回鎖等待超時(shí)錯(cuò)誤信息。參考設(shè)置語句如下:
    SET LOCK MODE TO WAIT 20;
    6、鎖的監(jiān)控
             1)監(jiān)控session的隔離級(jí)別
             使用: onstat –g sql 或者 onstat –g ses,例如在筆者測(cè)試服務(wù)器上運(yùn)行onstat -g sql,運(yùn)行結(jié)果如下:
    IBM Informix Dynamic Server Version 10.00.UC1     -- On-Line (Prim) -- Up 102 days 05:26:42 -- 1507468 Kbytes

    Sess  SQL            
    Current            Iso Lock       SQL  ISAM F.E.
    Id    Stmt type      
    Database           Lvl Mode       ERR  ERR  Vers Explain    
    880   -              sdp                CR  Wait 20    0    0    9.03 Off        
    878   SELECT         sdp                CR  Not Wait   0    0    9.03 Off        
    877   -              sdp                CR  Wait 20    0    0    9.03 Off        
    756   -              sdp                CR  Wait 20    0    0    9.03 Off        
    755   -              sdp                CR  Wait 20    0    0    9.03 Off        
    754   -              sdp                CR  Wait 20    0    0    9.03 Off        
    753   -              sdp                CR  Wait 20    0    0    9.03 Off        
    752                  sdp                CR  Wait 20    0    0    9.03 Off        
    751   -              sdp                CR  Wait 20    0    0    9.03 Off        
    750   -              sdp                CR  Wait 20    0    0    9.03 Off        
    480   -              sdp                CR  Wait 20    0    0    9.03 Off        
    479   -              sdp                CR  Wait 20    0    0    9.03 Off        
    478   -              sdp                CR  Wait 20    0    0    9.03 Off        
    477   -              sdp                CR  Wait 20    0    0    9.03 Off        
    476   -              sdp                CR  Wait 20    0    0    9.03 Off        
    475   -              sdp                CR  Wait 20    0    0    9.03 Off        
    474   -              sdp                CR  Wait 20    0    0    9.03 Off        
    473   -              sdp                CR  Wait 20    0    0    9.03 Off        
    472   -              sdp                CR  Wait 20    0    0    9.03 Off        
    471   -              sdp                CR  Wait 20    0    0    9.03 Off        
    470   -              sdp                CR  Wait 20    0    0    9.03 Off        
    469   -              sdp                CR  Wait 20    0    0    9.03 Off        
    468   -              sdp                CR  Wait 20    0    0    9.03 Off        
    467   -              sdp                CR  Wait 20    0    0    9.03 Off        
    466   -              sdp                CR  Wait 20    0    0    9.03 Off        
    465   -              sdp                CR  Wait 20    -232 0    9.03 Off        
    464   -              sdp                CR  Wait 20    0    0    9.03 Off        
    463   -              sdp                CR  Wait 20    0    0    9.03 Off        
    43    -              sdp                CR  Wait 20    0    0    9.03 Off        
    40    -              sdp                CR  Wait 20    0    0    9.03 Off    
            查看sid的詳細(xì)信息: onstat –g sql sid,例如查看878這個(gè)sid的消息,可使用:onstat -g sql 878,參考返回結(jié)果如下:
    Sess  SQL            Current            Iso Lock       SQL  ISAM F.E.
    Id    Stmt type      
    Database           Lvl Mode       ERR  ERR  Vers Explain    
    878   -              sdp                CR  Wait 20    0    0    9.03 Off        

    Last parsed SQL statement :
      
    select count(*from 

           2)查看用戶進(jìn)程鎖等待情況
           使用: onstat –u。
           3)查看鎖使用和等待情況
           使用: onstat -k
           4)監(jiān)控?cái)?shù)據(jù)庫事務(wù)及其狀態(tài)
           使用: onstat -x

     
    posted on 2010-11-23 10:22 阿蜜果 閱讀(11383) 評(píng)論(0)  編輯  收藏 所屬分類: database
    <2010年11月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

          生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
          我的作品:
          玩轉(zhuǎn)Axure RP  (2015年12月出版)
          

          Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊(cè)

    關(guān)注blog

    積分與排名

    • 積分 - 2294312
    • 排名 - 3

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲AV综合色区无码另类小说| 无码人妻精品一二三区免费| 最近2022中文字幕免费视频| 99久久久国产精品免费无卡顿 | 日韩精品在线免费观看| 久久综合国产乱子伦精品免费| 国产成人午夜精品免费视频| 国产一区二区免费在线| 国产亚洲成av片在线观看| 亚洲国产超清无码专区| 久久精品国产亚洲AV电影网| 国产一级a毛一级a看免费人娇| 国产精品久久久久久久久免费| 国产午夜鲁丝片AV无码免费| 国产亚洲成av人片在线观看| 亚洲乱码日产精品BD在线观看| 爱情岛论坛亚洲品质自拍视频网站| 国产麻豆成人传媒免费观看| 蜜桃视频在线观看免费网址入口 | 无码中文字幕av免费放| 免费人成视网站在线观看不卡| 亚洲Av永久无码精品三区在线| 亚洲偷自拍另类图片二区| 中文字幕无线码中文字幕免费| 国产成人精品免费午夜app | 日本免费无遮挡吸乳视频电影| 亚洲欧洲自拍拍偷午夜色无码| 亚洲精品一二三区| 久久性生大片免费观看性| 91热成人精品国产免费| 亚洲精品黄色视频在线观看免费资源| 911精品国产亚洲日本美国韩国| 黄色免费在线网址| 国产h视频在线观看网站免费| 亚洲国产婷婷综合在线精品| 亚洲国产情侣一区二区三区| 一出一进一爽一粗一大视频免费的| 亚洲免费观看在线视频| 亚洲中文字幕无码日韩| 久久亚洲精品高潮综合色a片| 久久国产色AV免费观看|