DB2V9.7當(dāng)前已落實(CurrentlyCommitted)_第1頁
DB2V9.7當(dāng)前已落實(CurrentlyCommitted)_第2頁
DB2V9.7當(dāng)前已落實(CurrentlyCommitted)_第3頁
DB2V9.7當(dāng)前已落實(CurrentlyCommitted)_第4頁
DB2V9.7當(dāng)前已落實(CurrentlyCommitted)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、DB2 V9.7 當(dāng)前已落實(Currently Committed)在游標(biāo)穩(wěn)定性隔離級別時減少鎖等待以及死鎖出現(xiàn)的頻率DB2 V9.7 引入了一系列新特性,使客戶可以更輕松地節(jié)省 IT 成本。具體包括壓縮增強、pureXML 增強、易用性增強、監(jiān)控增強、工作負(fù)載管理增強、安全性提高、性能提高、應(yīng)用開發(fā)提高、SQL PL 語言支持、SQL 兼容性提高和高可用、備份、日志、彈性、恢復(fù)提高等。本文的重點是介紹“當(dāng)前已落實”新特性,該新特性的顯著特點是在游標(biāo)穩(wěn)定性隔離級別時可以明顯減少鎖等待的出現(xiàn),以及死鎖的出現(xiàn)頻率。通過使用“當(dāng)前已落實”的 CS 隔離級別,可以有效提升高吞吐量事務(wù)處理環(huán)境下的數(shù)據(jù)

2、庫性能。從 DB2 V9.7 開始,DB2 通過采用完全鎖定避免技術(shù),當(dāng)能夠明確獲得數(shù)據(jù)或者頁的“已落實”版本時,允許掃描避免使用行級鎖。當(dāng)無法獲知索引或行記錄是否已落實時,掃描將改用使用傳統(tǒng)的鎖定方式。未提交的插入行在行級鎖中是直接被標(biāo)識的,允許“當(dāng)前已落實”掃描直接忽略或跳過該行。簡介從 IBM DB2 V9.7 開始,DB2 引入了一系列新特性,使客戶可以更輕松地節(jié)省 IT 成本。具體包括壓縮增強(通過對 XML 數(shù)據(jù)、臨時表、索引、數(shù)據(jù)復(fù)制源表的壓縮支持,進一步減少了對存儲的需求,提高了 I/O 的效率,提高了對磁盤數(shù)據(jù)的快速訪問)、pureXML 增強(通過對 pureXML 功能的

3、進一步增強,使得數(shù)據(jù)倉庫中可以部署和分析 XML 數(shù)據(jù);現(xiàn)在 XML 可以在表分區(qū)、MDC 表、臨時表、用戶函數(shù)、分區(qū)數(shù)據(jù)庫環(huán)境中使用)、易用性增強(通過對易用性的增強,減少了總體擁有成本 TCO,減少了執(zhí)行系統(tǒng)管理任務(wù)對系統(tǒng)的影響,擴展了以前版本發(fā)布的自治特性)、監(jiān)控增強(可以更靈活、更高粒度的監(jiān)控 DB2 環(huán)境)、工作負(fù)載管理增強(新增調(diào)配正在進行的活動的優(yōu)先級、與 Linux 工作負(fù)載管理 WLM 集成、對服務(wù)類提高緩沖池中 I/O 優(yōu)先級控制等,新增了 AGGSQLTEMPSPACE、CPUTIME、CPUTIMEINSC、SQLROWSREAD、SQLROWSREADINSC 等閾值

4、,改進了基于時間的閾值 ACTIVITYTOTALTIME、CONNECTIONIDLETIME 的粒度)、安全性提高(可以對敏感數(shù)據(jù)進行更好的保護)、性能提高(通過在游標(biāo)穩(wěn)定性隔離級別下引入“當(dāng)前已落實”、掃描共享、在表分區(qū)上創(chuàng)建分區(qū)索引、在表中存儲內(nèi)嵌 LOB 文件等提高了對數(shù)據(jù)的訪問速度,增加了數(shù)據(jù)的并發(fā)性; DB2 優(yōu)化器通過訪問計劃重用、Statement concentrator 支持等增強了 DB2 的性能)、應(yīng)用開發(fā)提高(通過“使用 ALTER TABLE 重命名列名”等簡化了數(shù)據(jù)庫對象的管理,通過引入 TRUNCATE 語句、創(chuàng)建臨時表、公共同義詞等很多新的功能提高了 SQL

5、 編程、存儲過程開發(fā)得到了簡化和提高等)、SQL PL 語言支持、SQL 兼容性提高(可以從諸如 ORACLE 應(yīng)用程序等更容易的遷移到 DB2 環(huán)境中)和高可用、備份、日志、彈性、恢復(fù)提高等。本文的重點是介紹“當(dāng)前已落實”(currently committed semantics,以后會簡稱 CC)新特性,該新特性的顯著特點是在游標(biāo)穩(wěn)定性(Cursor stability,以后會簡稱 CS)隔離級別時可以明顯減少鎖等待的出現(xiàn),以及死鎖的出現(xiàn)頻率。在 DB2 V9.7 之前的版本中,當(dāng)我們使用游標(biāo)穩(wěn)定性隔離級別(默認(rèn)的隔離級別)時,一般只鎖定事務(wù)聲明并打開的游標(biāo)當(dāng)前引用的行,也就是說該事務(wù)一

6、般只鎖定當(dāng)前行,對當(dāng)前行以外的記錄不做鎖定;對其所獲取的鎖一直有效,直到游標(biāo)重定位或事務(wù)終止為止 。如果游標(biāo)重定位,原來行上的鎖就被釋放,并獲得游標(biāo)現(xiàn)在引用的行上的鎖 。如果事務(wù)修改了它檢索到的任何行,那么在事務(wù)終止之前,其他事務(wù)不能更新或刪除該行,即使游標(biāo)不再位于被更新或刪除的行 。需要注意:如果只檢索的話,一般只鎖定當(dāng)前行;如果對檢索的行還進行了更新或刪除的話,則對修改的行也進行了鎖定,即便指針移向了其他行,對修改行的鎖定還是存在。而對修改行的鎖定會阻止其他應(yīng)用程序讀取該行,直到對修改行的鎖定解除后(對該修改落實后),其他應(yīng)用才能讀取該行。我們首先來看一下 ORACLE 在 Snapsho

7、t 隔離級別下讀操作與寫操作堵塞的情況,具體如表格 1 所示,當(dāng)讀操作遇上讀操作、讀操作遇上寫操作和寫操作遇上讀操作都不會發(fā)生堵塞,而寫操作遇上寫操作時則會發(fā)生堵塞:表 1. ORACLE Snapshot 隔離級別情況下的的堵塞情況先出現(xiàn)的工作負(fù)載 后出現(xiàn)的工作負(fù)載讀工作負(fù)載寫工作負(fù)載讀工作負(fù)載否(不堵塞)否(不堵塞)寫工作負(fù)載否(不堵塞)是(堵塞)下面我們看一下在 DB2 V9.7 之前的版本中使用游標(biāo)穩(wěn)定性隔離級別時讀操作與寫操作堵塞的情況,具體如表格 2 所示,當(dāng)讀操作遇上讀操作時不會發(fā)生堵塞;當(dāng)讀操作遇上寫操作時可能會發(fā)生堵塞(FOR READ ONLY 的讀操作不會堵塞寫操作,而

8、FOR UPDATE 的讀操作由于其行上有 U 鎖,會堵塞寫操作);當(dāng)寫操作遇上讀操作時一定會發(fā)生堵塞,而當(dāng)寫操作遇上寫操作時同樣會發(fā)生堵塞。表格 2 . DB2 V9.7 之前的版本中使用 CS 隔離級別情況下的堵塞情況先出現(xiàn)的工作負(fù)載 后出現(xiàn)的工作負(fù)載讀工作負(fù)載寫工作負(fù)載讀工作負(fù)載否(不堵塞)可能寫工作負(fù)載是(堵塞)是(堵塞)再看一下在 DB2 V9.7 中,啟用“當(dāng)前已落實”的游標(biāo)穩(wěn)定性隔離級別時的讀操作與寫操作堵塞的情況,具體如表格 3 所示,可以看到比 DB2 之前的版本有了明顯的改進,當(dāng)讀操作遇上讀操作、讀操作遇上寫操作和寫操作遇上讀操作都不會發(fā)生堵塞,只有寫操作遇上寫操作時才會發(fā)

9、生堵塞:表格 3 . DB2 V9.7 中啟用“當(dāng)前已落實”的 CS 隔離級別情況下的堵塞情況先出現(xiàn)的工作負(fù)載 后出現(xiàn)的工作負(fù)載讀工作負(fù)載寫工作負(fù)載讀工作負(fù)載否(不堵塞)否(不堵塞)寫工作負(fù)載否(不堵塞)是(堵塞)在 DB2 V9.7 中,在游標(biāo)穩(wěn)定性隔離級別下,通過啟用“當(dāng)前已落實”新特性,一個讀操作已經(jīng)不需要再等待該變更落實后再返回值,而是直接返回該行未變更前的值(也就是當(dāng)前已落實的結(jié)果值,忽略任何可能發(fā)生的未落實操作)。不過需要注意的是在可更新游標(biāo)中存在例外的情況:如果某行基于它自己之前的內(nèi)容被更新過,當(dāng)前已落實結(jié)果無法立即返回。在游標(biāo)穩(wěn)定性隔離級別使用行級鎖的情況(沒有啟用“當(dāng)前已落實

10、”)下,可能會出現(xiàn)鎖定超時和死鎖,特別是那些沒有為防止這些問題進行特殊設(shè)計的應(yīng)用程序。某些高吞吐量數(shù)據(jù)庫應(yīng)用程序不能容忍事物處理過程中的鎖等待,某些應(yīng)用不能容忍處理未提交的數(shù)據(jù),但仍然需要不堵塞讀操作事務(wù)。通過在 CS 隔離級別下啟用“當(dāng)前已落實”,可以有效提高高吞吐量事務(wù)處理環(huán)境下的數(shù)據(jù)庫性能。在這些環(huán)境中,過多的鎖等待是不能容忍的,通過啟用“當(dāng)前已落實”的 CS 隔離級別,可以有效的減少 timeout 和 deadlocks 。在“當(dāng)前已落實”啟用的情況下,只有落實的數(shù)據(jù)才會被返回,就像之前的例子,現(xiàn)在讀操作不需要再等待更新操作釋放行級鎖了,讀操作將直接返回“當(dāng)前已落實”版本的數(shù)據(jù)(也就

11、是首次寫操作之前的值)。由于“當(dāng)前已落實”是 DB2 V9.7 的新特性,很多客戶不知道該如何使用,本文將重點介紹 DB2 V9.7 關(guān)于“當(dāng)前已落實”新特性以及相關(guān)的概念,并結(jié)合實際的例子幫助大家理解和提高。當(dāng)前已落實(Currently Committed) 工作原理從 DB2 V9.7 開始,DB2 通過采用完全鎖定避免(full lock avoidance techniques)技術(shù),當(dāng)能夠明確獲得數(shù)據(jù)或者頁的“已落實”版本時,允許掃描避免使用行級鎖。當(dāng)無法獲知索引或行記錄是否已落實時,掃描將改為使用傳統(tǒng)的鎖定方式。 DB2 通過在行級鎖定中增加新的反饋機制,來標(biāo)識哪些“日志記錄”描

12、述了該行的首次修改(從該行的首次修改,就可以獲得修改前的數(shù)據(jù)值,也就是該行的已落實版本),當(dāng)發(fā)生一個鎖沖突時鎖管理器將使用該反饋機制直接返回這些日志記錄編號。一個當(dāng)前已落實掃描將用使用該反饋結(jié)果,用來從日志(日志緩沖區(qū)中或者活動日志文件中)訪問該行的“當(dāng)前已落實”版本(也就是首次更新之前的結(jié)果值)。未提交的插入行在行級鎖中是直接被標(biāo)識的,允許“當(dāng)前已落實”掃描直接忽略或跳過該行。具體如圖 1 所示,emp 表有 5 條記錄,其中第二行和第四行插入操作已經(jīng)完成,描述該插入操作的日志記錄已經(jīng)存儲在使用 TSM 歸檔的帶庫中,具體如圖 1 中右下方紅色部分所示;第三行正處于更新狀態(tài)(還沒落實),記錄

13、該行的日志記錄處于磁盤中的活動日志文件中,該日志記錄描述了第三行的首次更改情況,具體如圖 1 右邊中間黃色部分所示;第五行正處于插入狀態(tài)(還沒落實),記錄該行的日志記錄處于磁盤中的活動日志文件中,該日志記錄描述了第五行的首次插入情況,具體如圖 1 右邊中間黃色部分所示;第一行正處于刪除狀態(tài)(還沒落實),記錄該行的日志記錄處于日志緩沖區(qū)中,該日志記錄描述了第一行的首次更改情況,具體如圖 1 右邊上方綠色部分所示;圖 1 中間的 Locklist 部分表示鎖管理器,在鎖管理器中描述了第一行、第三行、第五行處于 X 鎖狀態(tài),與這些行對應(yīng)的日志記錄也在該鎖管理器中,這就是 DB2 V9.7 對行級鎖定

14、新增的反饋機制,來標(biāo)識哪些“日志記錄”描述了該行的首次修改,當(dāng)發(fā)生一個鎖沖突時鎖管理器將使用該反饋機制直接返回這些日志記錄編號,如黑色箭頭所示。當(dāng)其他應(yīng)用試圖讀取第一行或第三行時,將會直接從日志緩沖區(qū)或日志文件中返回該行的“已落實”版本數(shù)據(jù)。而對未提交的第五行,掃描將直接忽略或跳過該行。圖 1. “當(dāng)前已落實”(Currently Committed)工作原理“當(dāng)前已落實”是通過從日志中獲取數(shù)據(jù)的可用性的(即從日志中獲取已落實版本的數(shù)據(jù)),DB2 首先會從日志緩沖區(qū)中查找數(shù)據(jù)。當(dāng)更新事務(wù)仍處于活動狀態(tài)時,已落實版本數(shù)據(jù)會處于日志緩沖區(qū)或磁盤上的活動日志文件中。通過行級鎖定中新增的反饋機制,DB

15、2 不需要對所有日志文件進行搜索來查找已落實版本數(shù)據(jù),而是直接訪問合適的日志文件以及文件中的記錄(直接 I/O 訪問取代了對所有日志記錄的掃描)。當(dāng) DB2 無法在活動日志文件中找到相關(guān)記錄時,DB2 將切換到“當(dāng)前已落實”不啟用的狀態(tài),即讀操作會等待寫操作落實。需要注意的是,啟用“當(dāng)前已落實”特性需要更多的日志表空間,因為記錄一個事務(wù)內(nèi)某行的第一次更新需要額外的空間。當(dāng)檢索該行的“當(dāng)前已落實”映像(也就是第一次修改前的值)時將會用到這些日志數(shù)據(jù)。根據(jù)工作負(fù)載的不同,增加的日志數(shù)據(jù)對需要使用的總?cè)罩究臻g有一個微不足道的或可衡量的影響。當(dāng) cur_commit 數(shù)據(jù)庫配置參數(shù)不啟用時,將不需要額

16、外的日志空間。如果日志文件所在磁盤存在大量讀操作或者磁盤使用率比較高,可以考慮適當(dāng)增加日志緩沖區(qū)參數(shù) logbufsz 的大小。如果增加 logbufsz 的大小,還需要考慮增加 dbheap 數(shù)據(jù)庫配置參數(shù)的大小,因為 logbufsz 所控制的日志緩沖區(qū)使用的內(nèi)存空間是受 dbheap 參數(shù)控制的。默認(rèn)情況下,新創(chuàng)建的數(shù)據(jù)庫“當(dāng)前已落實”處于開啟狀態(tài),這將允許任何的應(yīng)用程序從這個新特性中獲益(不需要對現(xiàn)有的應(yīng)用做任何的更改)。如果你的數(shù)據(jù)庫是從之前的版本升級上來的,那么默認(rèn)情況下,“當(dāng)前已落實”設(shè)置是處于不啟用狀態(tài)的。你可以通過數(shù)據(jù)庫配置參數(shù) cur_commit 來啟用或不啟用“當(dāng)前已落

17、實”設(shè)置。同時,你還可以通過使用帶 CONCURRENTACCESSRESOLUTION 選項的 BIND 和 PRECOMPILE 命令,對某個獨立的應(yīng)用單獨設(shè)置“當(dāng)前已落實”,以替代數(shù)據(jù)庫級別的設(shè)置。回頁首示例在示例數(shù)據(jù)庫 SAMPLE 中,存在 RHETTE.EMPLOYEE 和 RHETTE.DEPARTMENT 兩張表,我們分別打開兩個 DB2 CLP 窗口,分別稱為窗口 1 和窗口 2,在窗口 1 中連上示例數(shù)據(jù)庫 SAMPLE,更新表 RHETTE.EMPLOYEE,并試圖讀取表 RHETTE.DEPARTMENT,在窗口 2 中連上示例數(shù)據(jù)庫 SAMPLE,更新表 RHETTE

18、.DEPARTMENT,并試圖讀取表 RHETTE.EMPLOYEE,如果不啟用“當(dāng)前已落實”,將會產(chǎn)生一個死鎖,并使其中一個應(yīng)用程序失敗,具體如清單 1 所示:清單 1. 不啟用 CC 情況下讀操作與寫操作堵塞示例- - 窗口 1 C:> db2 connect to sample 數(shù)據(jù)庫連接信息 數(shù)據(jù)庫服務(wù)器 = DB2 / NT 9.7.0 SQL 授權(quán)標(biāo)識 = RHETTE 本地數(shù)據(jù)庫別名 = SAMPLE C:> db2 update db cfg using cur_commit DISABLED DB20000I UPDATE DATABASE CONFIGURATI

19、ON 命令成功完成。 SQL1363W 未動態(tài)更改為立即修改而提交的一個或多個參數(shù)。 對于這些配置參數(shù),必須在所有應(yīng)用程序都與此數(shù)據(jù)庫斷開連接之后,更改才會生效。 C:> db2 force applications all DB20000I FORCE APPLICATION 命令成功完成。 DB21024I 此命令為異步的,可能未能立即生效。 C:>db2 get db cfg | find "CUR_COMMIT" 當(dāng)前已落實 ( CUR_COMMIT ) = DISABLED C:> db2 connect to sample 數(shù)據(jù)庫連接信息 數(shù)據(jù)

20、庫服務(wù)器 = DB2 / NT 9.7.0 SQL 授權(quán)標(biāo)識 = RHETTE 本地數(shù)據(jù)庫別名 = SAMPLE C:> db2 +c update rhette.employee set firstnme = ' CHRISTINE1 ' where empno = 00010 DB20000I SQL 命令成功完成。 C:> db2 +c select * from rhette.department DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION - - - - - - - - - - - - - - - - - - - - -

21、 - - - - - - - - - - - - - - - - - - - - - - - A00 SPIFFY COMPUTER SERVICE DIV. 000010 A00 - B01 PLANNING 000020 A00 - C01 INFORMATION CENTER 000030 A00 - D01 DEVELOPMENT CENTER - A00 - D11 MANUFACTURING SYSTEMS 000060 D01 - D21 ADMINISTRATION SYSTEMS 000070 D01 - E01 SUPPORT SERVICES 000050 A00 - E

22、11 OPERATIONS 000090 E01 - E21 SOFTWARE SUPPORT 000100 E01 - F22 BRANCH OFFICE F2 - E01 - G22 BRANCH OFFICE G2 - E01 - H22 BRANCH OFFICE H2 - E01 - I22 BRANCH OFFICE I2 - E01 - J22 BRANCH OFFICE J2 - E01 - 14 條記錄已選擇。 - - 窗口 2 C:> db2 connect to sample 數(shù)據(jù)庫連接信息 數(shù)據(jù)庫服務(wù)器 = DB2 / NT 9.7.0 SQL 授權(quán)標(biāo)識 = RH

23、ETTE 本地數(shù)據(jù)庫別名 = SAMPLE C:> db2 +c update rhette.department set deptname = ' PLANNING1 ' where deptno = 'B01' DB20000I SQL 命令成功完成。 C:> db2 +c select * from rhette.employee SQL0911N 因為死鎖或超時,所以當(dāng)前事務(wù)已回滾。原因碼為 " 2 " 。 SQLSTATE = 40001 。現(xiàn)在我們在窗口 1 中對示例數(shù)據(jù)庫 SAMPLE 啟用“當(dāng)前已落實”,再次重復(fù)上

24、面的操作,可以發(fā)現(xiàn) 2 個窗口應(yīng)用程序都執(zhí)行成功,沒有發(fā)生讀操作等待寫操作(同樣沒有發(fā)生死鎖),具體如清單 2 所示:清單 2. 啟用 CC 情況下讀操作與寫操作不堵塞示例- - 窗口 1 C:> db2 update db cfg using cur_commit on DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。 SQL1363W 未動態(tài)更改為立即修改而提交的一個或多個參數(shù)。 對于這些配置參數(shù),必須在所有應(yīng)用程序都與此數(shù)據(jù)庫斷開連接之后,更改才會生效。 C:> db2 force applications all DB20000I

25、 FORCE APPLICATION 命令成功完成。 DB21024I 此命令為異步的,可能未能立即生效。 C:> db2 connect to sample 數(shù)據(jù)庫連接信息 數(shù)據(jù)庫服務(wù)器 = DB2 / NT 9.7.0 SQL 授權(quán)標(biāo)識 = RHETTE 本地數(shù)據(jù)庫別名 = SAMPLE C:> db2 get db cfg | find "CUR_COMMIT" 當(dāng)前已落實 ( CUR_COMMIT ) = ON C:> db2 +c update rhette.employee set firstnme = ' CHRISTINE1 

26、9; where empno = 00010 DB20000I SQL 命令成功完成。 C:> db2 +c select * from rhette.department DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A00 SPIFFY COMPUTER SERVICE DIV. 000010 A00 - B01 PLANNING 000020 A00 - C01 INFORM

27、ATION CENTER 000030 A00 - D01 DEVELOPMENT CENTER - A00 - D11 MANUFACTURING SYSTEMS 000060 D01 - D21 ADMINISTRATION SYSTEMS 000070 D01 - E01 SUPPORT SERVICES 000050 A00 - E11 OPERATIONS 000090 E01 - E21 SOFTWARE SUPPORT 000100 E01 - F22 BRANCH OFFICE F2 - E01 - G22 BRANCH OFFICE G2 - E01 - H22 BRANCH

28、 OFFICE H2 - E01 - I22 BRANCH OFFICE I2 - E01 - J22 BRANCH OFFICE J2 - E01 - 14 條記錄已選擇。 - - 窗口 2 C:> db2 connect to sample 數(shù)據(jù)庫連接信息 數(shù)據(jù)庫服務(wù)器 = DB2 / NT 9.7.0 SQL 授權(quán)標(biāo)識 = RHETTE 本地數(shù)據(jù)庫別名 = SAMPLE C:> db2 +c update rhette.department set deptname = ' PLANNING1 ' where deptno = 'B01' DB

29、20000I SQL 命令成功完成。 C:> db2 +c select * from rhette.employee EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT(后面省略) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 000010 CHRISTINE I HAAS A00 000020 MICHAEL L THOMPSON B01 000030 SALLY A KWAN C01 000050 JOHN B GEYER

30、E01 . . . . . . . . . . 42 條記錄已選擇。回頁首如何獲取或請求“當(dāng)前已落實”可以通過配置數(shù)據(jù)庫配置參數(shù) CUR_COMMIT 獲取“當(dāng)前已落實”或者通過 BIND / PRECOMPILE/PREP 命令對其 CONCURRENTACCESSRESOLUTION 子句指定 USE CURRENTLY COMMITTED 或 WAIT FOR OUTCOME 來請求“當(dāng)前已落實”。一、數(shù)據(jù)庫配置參數(shù) cur_commit該數(shù)據(jù)庫配置參數(shù)主要是用來控制游標(biāo)穩(wěn)定性掃描的行為,默認(rèn)值為 ON,可選值為:(1)ON :打開;對于新創(chuàng)建的數(shù)據(jù)庫,默認(rèn)值是 ON,在此情況下,當(dāng)你試

31、圖讀取一個正在被其他應(yīng)用程序修改的行時,將直接返回該行的當(dāng)前已落實版本數(shù)據(jù)(也就是首次更改之前的值)。(2)AVAILABLE:可用;此值表示你的應(yīng)用需要顯式地請求“當(dāng)前已落實行為”才能得到“當(dāng)前已落實”結(jié)果。(3)DISABLED:禁用;如果數(shù)據(jù)庫是從之前的版本升級而來,這個參數(shù)將被設(shè)置成 DISABLED,這是為了和以前版本的行為保持一致。如果你希望使用當(dāng)前已落實來控制游標(biāo)穩(wěn)定性掃描的行為,需要將這個參數(shù)更改成 ON 。需要注意的是,注冊表變量 DB2_EVALUNCOMMITTED、DB2_SKIPDELETED 和 DB2_SKIPINSERTED 在啟用 cur_commit 參數(shù)后

32、會受到影響。在綁定(BIND)或預(yù)編譯(PRECOMPILE)時對 CONCURRENTACCESSRESOLUTION 選項指定 USE CURRENTLY COMMITTED 或 WAIT FOR OUTCOME,那么注冊表變量 DB2_EVALUNCOMMITTED、DB2_SKIPDELETED 和 DB2_SKIPINSERTED 將被忽略。二、BIND 和 PRECOMPILE/PREP 的命令 CONCURRENTACCESSRESOLUTION 子句BIND 和 PRECOMPILE/PREP 命令的 CONCURRENTACCESSRESOLUTION 子句主要是為了對程序包

33、中的語句指定使用并行訪問解析,語法結(jié)構(gòu)如清單 3 所示:清單 3. BIND 命令 CONCURRENTACCESSRESOLUTION 子句語法結(jié)構(gòu)>> - BIND - - filename - - - - - - - - - - - - - - - - - - - - - - - - - - > > - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - > ' - CONCURRENTACCESSRESOLUTION - - + - USE CURRENTLY COMMITTE

34、D - + - ' ' - WAIT FOR OUTCOME - - - - - - ' - - 清單 3 - 2 . PRECOMPILE/PREP 命令 CONCURRENTACCESSRESOLUTION 子句語法結(jié)構(gòu) >> - + - PRECOMPILE - + - - filename - - - - - - - - - - - - - - - - - - -> ' - PREP - - - - - - - ' > - - + - - - - - - - - - - - - - - - - - - - - - - -

35、- - - - - - - + - - - > ' - CONCURRENTACCESSRESOLUTION - - + - USE CURRENTLY COMMITTED - + - ' ' - WAIT FOR OUTCOME - - - - - - - 'USE CURRENTLY COMMITTED該選項值表示:當(dāng)數(shù)據(jù)處于更新或刪除的過程中時,指定數(shù)據(jù)庫管理器對掃描行為使用“當(dāng)前已落實版本”,當(dāng)行處于插入的過程中時這個設(shè)定將被跳過。當(dāng)隔離級別處于游標(biāo)穩(wěn)定性或者讀穩(wěn)定性隔離級別時(對讀穩(wěn)定性隔離級別這個子句將只跳過未提交的插入操作)這個子句將有效,并

36、且將忽略掉其他設(shè)置。WAIT FOR OUTCOME該選項值表示:當(dāng)遇上數(shù)據(jù)正處于更新的過程中時,指定游標(biāo)穩(wěn)定性或更高的隔離級別掃描等待其提交或回滾完成。當(dāng)行處于插入或刪除的過程中時這些行在掃描時將不再被跳過。這個選項值將會造成 DB2_EVALUNCOMMITTED、 DB2_SKIPDELETED 和 DB2_SKIPINSERTED 不再生效?;仨撌讓?DB2_EVALUNCOMMITTED、 DB2_SKIPDELETED 和 DB2_SKIPINSERTED 的影響首先我們來看一下這幾個注冊表變量的用途:(1)DB2_SKIPINSERTED當(dāng)該變量啟用時,將允許 CS 或 RS 掃

37、描跳過未提交的插入行。實際上在 DB2 V9.7 之前的版本中,正是通過該注冊表變量提供了“當(dāng)前已落實”的部分功能。如果啟用“當(dāng)前已落實”設(shè)置(掃描將直接跳過未提交的讀),那么這個注冊表變量無效。如果 DB2_SKIPINSERTED 設(shè)置成 OFF,則并不會使得“當(dāng)前已落實”的跳過未提交讀的功能失效。需要注意,“當(dāng)前已落實”的跳過未提交讀的行為在所有的 CS/RS 掃描中是有效的,除非將“當(dāng)前已落實”改成別的值。(2)DB2_SKIPDELETED當(dāng)該變量啟用時,將允許 CS / RS 掃描跳過未提交的刪除行和索引鍵(index updates = delete + insert) 。在早期

38、 DB2 版本中 DB2_SKIPDELETED 生效時,未提交的已刪除行將被跳過,但是更新和插入行還會導(dǎo)致鎖等待。在 DB2 V9.7 中,這個參數(shù)被設(shè)置生效后,同時“當(dāng)前已落實”也有效的情況下,未提交的已刪除行將不再跳過(而是使用 Currently Committed version 替代進行運算)。但是,當(dāng)“當(dāng)前已落實”不可用時,未提交的已刪除行還是會被跳過。(3)DB2_EVALUNCOMMITTED當(dāng)該變量啟用時,將允許 CS / RS 掃描對未落實的數(shù)據(jù)進行謂詞求值。帶來的影響是,它將進行表或索引訪問掃描以延遲或避免行鎖定(掃描時使用 UR),直到知道數(shù)據(jù)記錄滿足謂詞求值為止。下面我們解釋幾個名詞的含義:(1)隱式“當(dāng)前已落實”:是指當(dāng)數(shù)據(jù)庫上的“當(dāng)前已落實”設(shè)置啟用,而請求沒有顯式的請求“當(dāng)前已落實”(也就是數(shù)據(jù)庫配置參數(shù) CUR_COMMIT=ON,而且請求沒有通過 BIND 或 PREP 命令將 CONCURREN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論