新聞中心
我們大家都知道DB2 V9.7 數(shù)據(jù)庫,其引入了一系列新的特性,這些新的特征的出現(xiàn)會使客戶可以更輕松地節(jié)省 IT 成本。起具體的特性包括壓縮增強、pureXML 增強、易用性增強、監(jiān)控增強、工作負載管理增強。

創(chuàng)新互聯(lián)建站是一家業(yè)務范圍包括IDC托管業(yè)務,虛擬空間、主機租用、主機托管,四川、重慶、廣東電信服務器租用,成都服務器托管,成都網(wǎng)通服務器托管,成都服務器租用,業(yè)務范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務公司。
安全性提高、性能提高、應用開發(fā)提高、SQL PL 語言支持、SQL 兼容性提高和高可用、備份、日志、彈性、恢復提高等。
本文的重點是介紹“當前已落實”新特性,該新特性的顯著特點是在游標穩(wěn)定性隔離級別時可以明顯減少鎖等待的出現(xiàn),以及死鎖的出現(xiàn)頻率。通過使用“當前已落實”的 CS 隔離級別,可以有效提升高吞吐量事務處理環(huán)境下的數(shù)據(jù)庫性能。
從 DB2 V9.7 開始,DB2 通過采用完全鎖定避免技術,當能夠明確獲得數(shù)據(jù)或者頁的“已落實”版本時,允許掃描避免使用行級鎖。當無法獲知索引或行記錄是否已落實時,掃描將改用使用傳統(tǒng)的鎖定方式。未提交的插入行在行級鎖中是直接被標識的,允許“當前已落實”掃描直接忽略或跳過該行。
簡介
從 IBM DB2 V9.7 開始,DB2 引入了一系列新特性,使客戶可以更輕松地節(jié)省 IT 成本。具體包括壓縮增強(通過對 XML 數(shù)據(jù)、臨時表、索引、數(shù)據(jù)復制源表的壓縮支持,進一步減少了對存儲的需求,提高了 I/O 的效率,提高了對磁盤數(shù)據(jù)的快速訪問)、pureXML 增強(通過對 pureXML 功能的進一步增強,使得數(shù)據(jù)倉庫中可以部署和分析 XML 數(shù)據(jù);
現(xiàn)在 XML 可以在表分區(qū)、MDC 表、臨時表、用戶函數(shù)、分區(qū)數(shù)據(jù)庫環(huán)境中使用)、易用性增強(通過對易用性的增強,減少了總體擁有成本 TCO,減少了執(zhí)行系統(tǒng)管理任務對系統(tǒng)的影響,擴展了以前版本發(fā)布的自治特性)、監(jiān)控增強(可以更靈活、更高粒度的監(jiān)控 DB2 環(huán)境)、工作負載管理增強(新增調(diào)配正在進行的活動的優(yōu)先級、與 Linux 工作負載管理 WLM 集成、對服務類提高緩沖池中 I/O 優(yōu)先級控制等。
新增了 AGGSQLTEMPSPACE、CPUTIME、CPUTIMEINSC、SQLROWSREAD、SQLROWSREADINSC 等閾值,改進了基于時間的閾值 ACTIVITYTOTALTIME、CONNECTIONIDLETIME 的粒度)、安全性提高(可以對敏感數(shù)據(jù)進行更好的保護)、性能提高(通過在游標穩(wěn)定性隔離級別下引入“當前已落實”、掃描共享、在表分區(qū)上創(chuàng)建分區(qū)索引、在表中存儲內(nèi)嵌 LOB 文件等提高了對數(shù)據(jù)的訪問速度,增加了數(shù)據(jù)的并發(fā)性;
DB2 優(yōu)化器通過訪問計劃重用、Statement concentrator 支持等增強了 DB2 的性能)、應用開發(fā)提高(通過“使用 ALTER TABLE 重命名列名”等簡化了數(shù)據(jù)庫對象的管理,通過引入 TRUNCATE 語句、創(chuàng)建臨時表、公共同義詞等很多新的功能提高了 SQL 編程、存儲過程開發(fā)得到了簡化和提高等)、SQL PL 語言支持、SQL 兼容性提高(可以從諸如 ORACLE 應用程序等更容易的遷移到 DB2 環(huán)境中)和高可用、備份、日志、彈性、恢復提高等。
本文的重點是介紹“當前已落實”(currently committed semantics,以后會簡稱 CC)新特性,該新特性的顯著特點是在游標穩(wěn)定性(Cursor stability,以后會簡稱 CS)隔離級別時可以明顯減少鎖等待的出現(xiàn),以及死鎖的出現(xiàn)頻率。
在 DB2 V9.7 之前的版本中,當我們使用游標穩(wěn)定性隔離級別(默認的隔離級別)時,一般只鎖定事務聲明并打開的游標當前引用的行,也就是說該事務一般只鎖定當前行,對當前行以外的記錄不做鎖定;對其所獲取的鎖一直有效,直到游標重定位或事務終止為止 。如果游標重定位,原來行上的鎖就被釋放,并獲得游標現(xiàn)在引用的行上的鎖 。
如果事務修改了它檢索到的任何行,那么在事務終止之前,其他事務不能更新或刪除該行,即使游標不再位于被更新或刪除的行 。需要注意:如果只檢索的話,一般只鎖定當前行;如果對檢索的行還進行了更新或刪除的話,則對修改的行也進行了鎖定,即便指針移向了其他行,對修改行的鎖定還是存在。而對修改行的鎖定會阻止其他應用程序讀取該行,直到對修改行的鎖定解除后(對該修改落實后),其他應用才能讀取該行。
我們首先來看一下 ORACLE 在 Snapshot 隔離級別下讀操作與寫操作堵塞的情況,具體如表格 1 所示,當讀操作遇上讀操作、讀操作遇上寫操作和寫操作遇上讀操作都不會發(fā)生堵塞,而寫操作遇上寫操作時則會發(fā)生堵塞:
ORACLE Snapshot 隔離級別情況下的的堵塞情況
先出現(xiàn)的工作負載 \ 后出現(xiàn)的工作負載 讀工作負載 寫工作負載
讀工作負載 否(不堵塞) 否(不堵塞)
寫工作負載 否(不堵塞) 是(堵塞)
下面我們看一下在 DB2 V9.7 之前的版本中使用游標穩(wěn)定性隔離級別時讀操作與寫操作堵塞的情況,具體如表格 2 所示,當讀操作遇上讀操作時不會發(fā)生堵塞;當讀操作遇上寫操作時可能會發(fā)生堵塞(FOR READ ONLY 的讀操作不會堵塞寫操作,而 FOR UPDATE 的讀操作由于其行上有 U 鎖,會堵塞寫操作);當寫操作遇上讀操作時一定會發(fā)生堵塞,而當寫操作遇上寫操作時同樣會發(fā)生堵塞。
DB2 V9.7 之前的版本中使用 CS 隔離級別情況下的堵塞情況
先出現(xiàn)的工作負載 \ 后出現(xiàn)的工作負載 讀工作負載 寫工作負載
讀工作負載 否(不堵塞) 可能
寫工作負載 是(堵塞) 是(堵塞)
再看一下在 DB2 V9.7 中,啟用“當前已落實”的游標穩(wěn)定性隔離級別時的讀操作與寫操作堵塞的情況,具體如表格 3 所示,可以看到比 DB2 之前的版本有了明顯的改進,當讀操作遇上讀操作、讀操作遇上寫操作和寫操作遇上讀操作都不會發(fā)生堵塞,只有寫操作遇上寫操作時才會發(fā)生堵塞:
DB2 V9.7 中啟用“當前已落實”的 CS 隔離級別情況下的堵塞情況
先出現(xiàn)的工作負載 \ 后出現(xiàn)的工作負載 讀工作負載 寫工作負載
讀工作負載 否(不堵塞) 否(不堵塞)
寫工作負載 否(不堵塞) 是(堵塞)
在 DB2 V9.7 中,在游標穩(wěn)定性隔離級別下,通過啟用“當前已落實”新特性,一個讀操作已經(jīng)不需要再等待該變更落實后再返回值,而是直接返回該行未變更前的值(也就是當前已落實的結(jié)果值,忽略任何可能發(fā)生的未落實操作)。不過需要注意的是在可更新游標中存在例外的情況:如果某行基于它自己之前的內(nèi)容被更新過,當前已落實結(jié)果無法立即返回。
在游標穩(wěn)定性隔離級別使用行級鎖的情況(沒有啟用“當前已落實”)下,可能會出現(xiàn)鎖定超時和死鎖,特別是那些沒有為防止這些問題進行特殊設計的應用程序。某些高吞吐量數(shù)據(jù)庫應用程序不能容忍事物處理過程中的鎖等待,某些應用不能容忍處理未提交的數(shù)據(jù),但仍然需要不堵塞讀操作事務。
通過在 CS 隔離級別下啟用“當前已落實”,可以有效提高高吞吐量事務處理環(huán)境下的數(shù)據(jù)庫性能。在這些環(huán)境中,過多的鎖等待是不能容忍的,通過啟用“當前已落實”的 CS 隔離級別,可以有效的減少 timeout 和 deadlocks 。在“當前已落實”啟用的情況下,只有落實的數(shù)據(jù)才會被返回,就像之前的例子,現(xiàn)在讀操作不需要再等待更新操作釋放行級鎖了,讀操作將直接返回“當前已落實”版本的數(shù)據(jù)(也就是首次寫操作之前的值)。
由于“當前已落實”是 DB2 V9.7 的新特性,很多客戶不知道該如何使用,本文將重點介紹 DB2 V9.7 關于“當前已落實”新特性以及相關的概念,并結(jié)合實際的例子幫助大家理解和提高。
當前已落實(Currently Committed) 工作原理
從 DB2 V9.7 開始,DB2 通過采用完全鎖定避免(full lock avoidance techniques)技術,當能夠明確獲得數(shù)據(jù)或者頁的“已落實”版本時,允許掃描避免使用行級鎖。當無法獲知索引或行記錄是否已落實時,掃描將改為使用傳統(tǒng)的鎖定方式。 DB2 通過在行級鎖定中增加新的反饋機制,來標識哪些“日志記錄”描述了該行的首次修改(從該行的首次修改,就可以獲得修改前的數(shù)據(jù)值,也就是該行的已落實版本),當發(fā)生一個鎖沖突時鎖管理器將使用該反饋機制直接返回這些日志記錄編號。
一個當前已落實掃描將用使用該反饋結(jié)果,用來從日志(日志緩沖區(qū)中或者活動日志文件中)訪問該行的“當前已落實”版本(也就是首次更新之前的結(jié)果值)。未提交的插入行在行級鎖中是直接被標識的,允許“當前已落實”掃描直接忽略或跳過該行。
具體如圖 1 所示,emp 表有 5 條記錄,其中第二行和第四行插入操作已經(jīng)完成,描述該插入操作的日志記錄已經(jīng)存儲在使用 TSM 歸檔的帶庫中,具體如圖 1 中右下方紅色部分所示;第三行正處于更新狀態(tài)(還沒落實),記錄該行的日志記錄處于磁盤中的活動日志文件中,該日志記錄描述了第三行的首次更改情況,具體如圖 1 右邊中間黃色部分所示;
第五行正處于插入狀態(tài)(還沒落實),記錄該行的日志記錄處于磁盤中的活動日志文件中,該日志記錄描述了第五行的首次插入情況,具體如圖 1 右邊中間黃色部分所示;第一行正處于刪除狀態(tài)(還沒落實),記錄該行的日志記錄處于日志緩沖區(qū)中,該日志記錄描述了第一行的首次更改情況,
具體如圖 1 右邊上方綠色部分所示;圖 1 中間的 Locklist 部分表示鎖管理器,在鎖管理器中描述了第一行、第三行、第五行處于 X 鎖狀態(tài),與這些行對應的日志記錄也在該鎖管理器中,這就是 DB2 V9.7 對行級鎖定新增的反饋機制,來標識哪些“日志記錄”描述了該行的首次修改。
當發(fā)生一個鎖沖突時鎖管理器將使用該反饋機制直接返回這些日志記錄編號,如黑色箭頭所示。當其他應用試圖讀取第一行或第三行時,將會直接從日志緩沖區(qū)或日志文件中返回該行的“已落實”版本數(shù)據(jù)。而對未提交的第五行,掃描將直接忽略或跳過該行。
【編輯推薦】
- 實現(xiàn)DB2備份數(shù)據(jù)庫的操作方案漫談
- DB2歸檔日志的管理方案從哪幾點入手?
- 對DB2取得當前時間的正確解析
- DB2性能調(diào)優(yōu)中存在哪些問題,如何破解?
- DB2 數(shù)據(jù)類型如何才能輕松接觸?
網(wǎng)站標題:DB2V9.7新特征可以給你帶來哪些好處?
網(wǎng)頁網(wǎng)址:http://m.5511xx.com/article/dpjgepc.html


咨詢
建站咨詢
