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