• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            http://www-900.ibm.com/cn/support/nav/200402/p45-1.shtml

            隨著網(wǎng)絡(luò)的不斷發(fā)展, 現(xiàn)今的應(yīng)用系統(tǒng)一般都需要相對(duì)較強(qiáng)的多用戶同時(shí)訪問(wèn)的能力。 作為應(yīng)用系統(tǒng)基礎(chǔ)的數(shù)據(jù)庫(kù)產(chǎn)品對(duì)多用戶能力的支持也就越發(fā)重要。IBM DB2 UDB作為當(dāng)今較為流行的數(shù)據(jù)庫(kù)產(chǎn)品也在不斷的改進(jìn)其并發(fā)處理能力。 現(xiàn)在的DB2 UDB系統(tǒng)中, 主要通過(guò)鎖和隔離級(jí)別這兩個(gè)主要的工具來(lái)控制并發(fā)連接,維護(hù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)在高并發(fā)的環(huán)境下的安全。

            我們?cè)谶@里將簡(jiǎn)要的闡述一下鎖和隔離級(jí)別。

            鎖:

            DB2 UDB中, 鎖的主要作用對(duì)象是表和行, 其他如表空間和索引也是鎖的對(duì)象, 但是因?yàn)槠涠酁橄到y(tǒng)控制, 管理員和用戶使用較少,在這里就不涉及了。

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

            DB2中的表級(jí)鎖主要有以下幾種:

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

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

            3. SIX鎖: 此鎖是鎖轉(zhuǎn)換的產(chǎn)物,表示應(yīng)用連接擁有S和IX鎖的特性;
            (share with intent exclusive)鎖定的擁有者可以讀取和更改表格,其他用戶可以讀取表格。

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

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

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

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

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

            那麼DB2中又有哪些行級(jí)鎖呢? 讓我們來(lái)看下面的這張圖:

            那麼DB2中又有哪些行級(jí)鎖呢?

             

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

            這六個(gè)行級(jí)鎖的主要功能如下:

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

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

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

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

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

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

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

            隔離級(jí)別:



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

            隔離級(jí)別分為RR/RS/CS/UR這四個(gè)級(jí)別。 下面讓我們來(lái)逐一論述:

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

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

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

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

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

            到這里, 我們已經(jīng)對(duì)DB2中的表鎖, 行鎖, 隔離級(jí)別進(jìn)行了論述。 DB2數(shù)據(jù)庫(kù)的并發(fā)控制主要是通過(guò)這些機(jī)制。 理解了這些概念,我們就可以在使用DB2數(shù)據(jù)庫(kù)時(shí)根據(jù)系統(tǒng)的實(shí)際需要來(lái)設(shè)計(jì)鎖模式和隔離級(jí)別, 來(lái)實(shí)現(xiàn)我們的系統(tǒng)要求, 在保障數(shù)據(jù)安全的前提下, 提供較好的并發(fā)性。

            如果還需要了解更多的相關(guān)DB2數(shù)據(jù)庫(kù)的并發(fā)控制, 鎖, 和隔離級(jí)別的相關(guān)信息, 可以參考以下的文檔說(shuō)明:

            1. DB2 Command Reference

            2. DB2 Administrator Reference

            青青热久久国产久精品| 精品久久人妻av中文字幕| 欧美午夜精品久久久久免费视| 久久99精品九九九久久婷婷| 99精品伊人久久久大香线蕉 | 久久精品国产亚洲AV高清热 | 久久精品国产69国产精品亚洲| 一本久道久久综合狠狠爱| 久久天天躁狠狠躁夜夜av浪潮| 最新久久免费视频| 久久亚洲国产最新网站| 狠狠精品久久久无码中文字幕| 69久久精品无码一区二区| 久久这里只有精品18| 91精品国产色综久久| 国产精品成人99久久久久91gav| 久久本道综合久久伊人| 久久国产高清一区二区三区| 久久人人爽人人爽人人片AV麻豆 | 亚洲AV无码久久精品色欲| 国产成人精品久久免费动漫| 国产精品丝袜久久久久久不卡 | 69久久夜色精品国产69| 久久精品国产精品亚洲精品| 亚洲国产成人久久精品99| 久久99精品久久久久久久不卡| 久久精品国产WWW456C0M| 看全色黄大色大片免费久久久| 久久亚洲欧美国产精品| 久久精品国产国产精品四凭| 久久综合偷偷噜噜噜色| 久久精品国产亚洲AV香蕉| 精品久久久久久无码中文字幕| 久久午夜无码鲁丝片秋霞| 久久精品国产亚洲AV大全| 亚洲国产成人久久综合野外| 亚洲va久久久噜噜噜久久狠狠| 久久精品国产欧美日韩| 人妻无码αv中文字幕久久| 成人国内精品久久久久影院VR| 久久久久亚洲AV片无码下载蜜桃 |