DB2的樂觀鎖定新特性
本文將為您介紹DB2數(shù)據(jù)庫(kù)9的全新樂觀鎖定特性,可以使DB2 能夠檢索特定時(shí)間段內(nèi)的行,能夠了解它們的最后修改時(shí)間,具有很好的輔助效果。
DB2 for z/OS 客戶正在將新的、尖端的數(shù)據(jù)倉(cāng)庫(kù)任務(wù)添加到傳統(tǒng)OLTP 中。
為支持多個(gè)系統(tǒng)以及應(yīng)對(duì)那些往往缺乏真知灼見的應(yīng)用程序開發(fā)人員和主管,使得 DBA 工作充滿挑戰(zhàn)。幸運(yùn)的是,DB2 9 for z/OS 提供了一種全新的樂觀鎖定特性,可以提高系統(tǒng)性能——或許也能使 DBA(和應(yīng)用程序開發(fā)人員)的心態(tài)樂觀起來。
數(shù)據(jù)庫(kù)鎖定是必不可少的開銷,也是所有 DBMS 的核心組件。鎖通過防止多個(gè)事務(wù)在同一時(shí)間更改相同的數(shù)據(jù)來維護(hù)數(shù)據(jù)完整性。但獲取和維護(hù)數(shù)據(jù)庫(kù)鎖的成本可能非常高昂,對(duì)于復(fù)雜的系統(tǒng)、應(yīng)用程序或事務(wù)來說更是如此。
樂觀鎖定現(xiàn)使用 DB2 表中定義的新特性來減少死鎖、降低總體鎖定開銷,并提升系統(tǒng)和應(yīng)用程序的性能。
要使用樂觀鎖定的新特性,您需要使用新參數(shù)(GENERATED ALWAYS、FOR EACH ROW ON UPDATE、AS ROW CHANGE TIMESTAMP)在DB2表內(nèi)定義新的 ROW CHANGE TIMESTAMP 列,如下所示:
清單 1. 使用樂觀鎖定的新特性
CREATE TABLE BEULKE.PRODUCT_TBL (
PROD_NBR INTEGER NOT NULL,
PROD_INVENTORY INTEGER NOT NULL,
PROD_LAST_UPD NOT NULL
GENERATED ALWAYS
AS ROW CHANGE
TIMESTAMP);
這些參數(shù)告訴 DB2,應(yīng)該總是填充并特別注意時(shí)間戳和表。最后更新的時(shí)間戳已經(jīng)內(nèi)嵌在某些應(yīng)用程序中多年了;IBM 如今承認(rèn)并改進(jìn)了這種技術(shù)。
這些新特性使DB2 能夠檢索特定時(shí)間段內(nèi)的行,能夠了解它們的最后修改時(shí)間。DB2 不僅關(guān)注行時(shí)間戳信息,還關(guān)注記錄 ID(RID)和變更標(biāo)記信息。關(guān)注行屬性使應(yīng)用程序和用戶能夠通過時(shí)間戳查詢數(shù)據(jù)庫(kù),根據(jù) WHERE 時(shí)間戳子句標(biāo)準(zhǔn)獲取一個(gè)特定的行或一組行。
新的列特性允許大多數(shù)應(yīng)用程序回彈從而降低了鎖定開銷,還將鎖定配置文件從 Repeatable Read(RR)、Read Stability(RS)或Cursor Stability(CS)還原為 Uncommitted Read(UR)。Uncommitted Read 避免了數(shù)據(jù)庫(kù)鎖定;應(yīng)用程序可以通過在應(yīng)用程序 UPDATE SQL 語(yǔ)句中使用新的時(shí)間戳列來維護(hù)數(shù)據(jù)庫(kù)事務(wù)完整性。新時(shí)間戳列提供了行的時(shí)間戳和記錄 ID(RID),DB2 可用此信息來驗(yàn)證無其他應(yīng)用程序更改了所需數(shù)據(jù)。
另外一條 DB2 9 SQL 短語(yǔ)——SKIP LOCKED DATA,也有助于避免鎖定,因?yàn)樗粫?huì)使用不兼容的鎖來檢索或影響數(shù)據(jù)行??梢栽?SELECT、UPDATE 和 DELETE 等 SQL 語(yǔ)句中使用該短語(yǔ)來避免死鎖。使用隔離級(jí)別的 UR 和 SKIP LOCKED DATA 短語(yǔ)時(shí)應(yīng)倍加謹(jǐn)慎。盡管這些技術(shù)能夠顯著減少鎖定數(shù)量、提升性能,但需要您透徹理解自己的應(yīng)用程序。在使用這種性能提升技術(shù)之前,應(yīng)詳細(xì)研究每一個(gè)應(yīng)用程序,還應(yīng)閱讀 DB2 手冊(cè),查看所有細(xì)節(jié)。由于這些技術(shù)能夠大幅減少死鎖和鎖定開銷——特別是在數(shù)據(jù)共享環(huán)境中,因此值得為此付出研究和實(shí)現(xiàn)的時(shí)間。
 















 
 
 
 
 
 
 