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

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

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

    隨筆-25  評論-6  文章-0  trackbacks-0
    現(xiàn)在的DB2 UDB系統(tǒng)中, 主要通過鎖和隔離級別這兩個主要的工具來控制并發(fā)連接,維護數(shù)據(jù)庫中的數(shù)據(jù)在高并發(fā)的環(huán)境下的安全。

    我們在這里將簡要的闡述一下鎖和隔離級別。

    鎖:

    DB2 UDB中, 鎖的主要作用對象是表和行, 其他如表空間和索引也是鎖的對象, 但是因為其多為系統(tǒng)控制, 管理員和用戶使用較少,在這里就不涉及了。

    對于行級鎖和表級鎖, 它們的區(qū)別不言而喻, 主要是鎖的對象不同。 當(dāng)然鎖對象的不同連帶也會影響DB2的并發(fā)能力。

    DB2中的表級鎖主要有以下幾種:

    1. IS鎖: 此鎖作用于整個表,表示擁有此鎖的應(yīng)用連接要讀取表中的某些數(shù)據(jù), 但是在此應(yīng)用連接讀取具體的數(shù)據(jù)時, 還必須獲得該行的行級鎖;

    2. IX鎖: 此鎖作用于整個表,表示擁有此鎖的應(yīng)用連接需要獨占使用表中的某些數(shù)據(jù), 但是在此應(yīng)用連接獨占使用具體的數(shù)據(jù)時, 還必須獲得該行上相應(yīng)的行級鎖;

    3. SIX鎖: 此鎖是鎖轉(zhuǎn)換的產(chǎn)物,表示應(yīng)用連接擁有S和IX鎖的特性;

    4. S鎖: 此鎖作用于整個表, 擁有此鎖的應(yīng)用連接可以讀取表中的任何紀錄;

    5. U鎖: 此鎖作用于整個表, 擁有此鎖的應(yīng)用連接可以讀取表中的任何紀錄,也可以更新表中的紀錄, 但是更新時需要再獲得X鎖; 此鎖主要在“select … with update”語句建立的可更新游標(biāo)中起作用, 其他的應(yīng)用可以讀取表中的紀錄, 但是不能更新它;

    6. X鎖: 此鎖作用于整個表, 擁有此鎖的應(yīng)用連接獨占的使用表中的任何紀錄;可以進行更新或其他操作;

    7. Z鎖: 此鎖作用于整個表, 也稱超級獨占鎖,主要是在象修改表的定義、 刪除表這一類的語句中會使用。 擁有此鎖的應(yīng)用連接對該表有完全的控制權(quán)。 其他的任何應(yīng)用不能讀取或更新表中的任何紀錄。

    在這里我們主要要看一下 IS/IX/SIX這三個鎖。 在這三個鎖中IS/IX本身并不具備使得應(yīng)用連接可以讀取或更新紀錄的能力,應(yīng)用連接要讀取和更新紀錄時, 需要再得到相應(yīng)的行級鎖; 反之亦然, 任何應(yīng)用要獲得行級鎖操作數(shù)據(jù)記錄之前, 也必須獲得某個相應(yīng)的表級鎖。 SIX鎖也是類似的情況。這就是為什麼在很多情況下我們使用的是行級鎖, 但是用快照(SNAPSHOT)等工具卻能夠看到有表級鎖存在的原因。

    那麼DB2中又有哪些行級鎖呢? 讓我們來看下面的這張圖:

    那麼DB2中又有哪些行級鎖呢?

    此圖中列出了DB2中包含的行級鎖。 表中的第三列指出, 要獲得此行級鎖之前, 需要預(yù)先獲得的表級鎖, 這里列出的是最低要求。

    這六個行級鎖的主要功能如下:

    1. S鎖:此行級鎖的擁有者可以讀取該行的信息;

    2. U鎖:此行級鎖的擁有者可以讀取該行的信息,如果要更新該行,則仍然需要一個行級的X鎖;其他的應(yīng)用只能讀取該行的信息;此鎖主要是用于FOR UPDATE的游標(biāo)。

    3. X鎖:此行級鎖的擁有者可以更新該行的紀錄,其他的應(yīng)用不能連接此行的信息;

    4. W鎖:此鎖和X鎖類似,不同之處是此鎖和NW鎖兼容;

    5. NS鎖:類似于S鎖,用于Next Key;

    6. NW鎖:類似于W鎖,用于Next Key;

    在DB2數(shù)據(jù)庫中, 是通過行級鎖和表級鎖協(xié)調(diào)作用來提供較好的并發(fā)性, 同時保證數(shù)據(jù)庫中數(shù)據(jù)的安全。 在DB2中缺省情況下使用行級鎖(當(dāng)然需要IS/IX鎖配合),只有當(dāng)出現(xiàn)鎖資源不足, 或者是用命令指定使用表級鎖的情況下, 才會在應(yīng)用連接中使用表級鎖。 對鎖資源分配有興趣的讀者可以參考DB2的管理手冊, 查找其中關(guān)于locklist和maxlocks參數(shù)的論述。對于用命令指定表級鎖的情況, 可以參考DB2的命令手冊中的lock table命令, 此命令用于直接鎖表。

    隔離級別:

    下面讓我們來看一下隔離級別。 隔離級別主要用于控制在DB2根據(jù)應(yīng)用提交的SQL語句向DB2數(shù)據(jù)庫中的相應(yīng)對象加鎖時, 會鎖住哪些紀錄, 也就是鎖定的范圍。 隔離級別的不同, 鎖定的紀錄的范圍可能會有很大的差別。

    隔離級別分為RR/RS/CS/UR這四個級別。 下面讓我們來逐一論述:

    1. RR隔離級別: 在此隔離級別下, DB2會鎖住所有相關(guān)的紀錄。 在一個SQL語句執(zhí)行期間, 所有執(zhí)行此語句掃描過的紀錄都會被加上相應(yīng)的鎖。 具體的鎖的類型還是由操作的類型來決定, 如果是讀取,則加共享鎖; 如果是更新, 則加獨占鎖。 由于會鎖定所有為獲得SQL語句的結(jié)果而掃描的紀錄, 所以鎖的數(shù)量可能會很龐大, 這個時候, 索引的增加可能會對SQL語句的執(zhí)行有很大的影響,因為索引會影響SQL語句掃描的紀錄數(shù)量。

    2. RS隔離級別: 此隔離級別的要求比RR隔離級別稍弱,此隔離級別下會鎖定所有符合條件的紀錄。 不論是讀取, 還是更新, 如果SQL語句中包含查詢條件, 則會對所有符合條件的紀錄加相應(yīng)的鎖。 如果沒有條件語句, 也就是對表中的所有記錄進行處理,則會對所有的紀錄加鎖。

    3. CS隔離級別: 此隔離級別僅鎖住當(dāng)前處理的紀錄。

    4. UR隔離級別:此隔離級別下,如果是讀取操作,不會出現(xiàn)任何的行級鎖。對于非只讀的操作,它的鎖處理和CS相同。

    在這四種隔離級別中, CS是缺省值。 這四種隔離級別均可以保證DB2數(shù)據(jù)庫在并發(fā)的環(huán)境下不會有數(shù)據(jù)丟失的情況發(fā)生。 要注意的是如果對紀錄進行了修改,需要在相應(yīng)的紀錄上加獨占類型的鎖, 這些獨占類型的鎖直到交易結(jié)束時才會被釋放, 這一點在四種隔離級別下都是相同的。

    posted on 2006-08-22 12:07 MyJavaWorld 閱讀(886) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久精品无码一区二区三区免费| 免费人成网站在线观看不卡| 久久久久国产精品免费免费搜索| 亚洲精品福利网泷泽萝拉| 大地影院MV在线观看视频免费 | 黄床大片免费30分钟国产精品| 国产又黄又爽又猛的免费视频播放| 亚洲色最新高清av网站| 性做久久久久久久免费看| 中文字幕乱码亚洲精品一区| 性感美女视频在线观看免费精品| 精品丝袜国产自在线拍亚洲| 午夜dj在线观看免费视频| 亚洲youwu永久无码精品 | 亚洲熟妇无码AV在线播放| 美女无遮挡拍拍拍免费视频| 亚洲一区二区三区AV无码| 国产啪精品视频网站免费尤物| 日韩亚洲AV无码一区二区不卡| 精品无码无人网站免费视频| 亚洲国产亚洲片在线观看播放| 免费无码成人AV片在线在线播放| 国产成人亚洲精品91专区高清| 亚洲美女在线国产| 99久久精品免费视频| 亚洲制服丝袜中文字幕| 免费毛片在线视频| 国产精品hd免费观看| 久久精品国产亚洲AV无码麻豆| 国产成人免费爽爽爽视频 | 成人影片一区免费观看| 亚洲精品在线免费观看视频| 啦啦啦在线免费视频| 日韩a毛片免费观看| 色婷婷亚洲十月十月色天| 成人黄18免费视频| 久久嫩草影院免费看夜色| 亚洲国产综合人成综合网站00| 国产精品无码一区二区三区免费 | 亚洲狠狠爱综合影院婷婷| 久久亚洲免费视频|