處理從Oracle遷移到DB2 for z/OS過程中的鎖定問題策略

oracle 數(shù)據(jù)庫遷移到 IBM DB2 on z/OS 并非完全無縫,必須進行精心策劃。由于兩種數(shù)據(jù)庫之間存在鎖定差異,因此當從 Oracle 向 DB2 on z/OS 遷移時,管理員可能會面臨各種問題(參見表 1)。不過,這些問題在很大程度上是可以緩解的。 Oracle 與 DB2 on z

oracle 遷移到 ibm db2 on z/os 并非完全無縫,必須進行精心策劃。由于兩種之間存在鎖定差異,因此當從 oracle 向 db2 on z/os 遷移時,管理員可能會面臨各種問題(參見表 1)。不過,這些問題在很大程度上是可以緩解的。

Oracle 與 DB2 on z/OS 之間的主要鎖定行為差異之一在于:Oracle 不會在閱讀時對行進行任何鎖定,而 DB2 卻會。這種差異可能導致出現(xiàn)鎖等待和相關(guān)問題(如從 Oracle 向 DB2 遷移的應用程序中出現(xiàn)死鎖和超時)的幾率增加。

? Oracle DB2 on z/OS
1 除非 FOR UPDATE 子句明確要求,否則讀取查詢不會對行執(zhí)行任何鎖定。 默認情況下,讀取查詢持有共享級鎖。
2 只有行級鎖可以隱式執(zhí)行。如果需要,可以顯式鎖定整個表。 默認鎖為頁面級鎖,但也可以在行、表、表空間和 LOB 級別上應用鎖。
3 不存在鎖升級概念。 如果鎖數(shù)目增加,則可以執(zhí)行鎖升級。升級結(jié)果會促使行級鎖升級為表級鎖和頁面級鎖,然后再升級到表空間級鎖,這樣可降低鎖數(shù)目。
4 由于不存在未提交讀取概念,所以無法執(zhí)行臟讀。 可以執(zhí)行未提交讀取,并且臟讀是讀取不帶共享級鎖的行的一種方法。

表 1. Oracle 與 DB2 on z/OS 之間的關(guān)鍵鎖定差異

要處理鎖定問題,需要在數(shù)據(jù)庫、應用程序和操作級別上實施遷移策略。

數(shù)據(jù)庫級策略

以下幾種類型的數(shù)據(jù)庫和設(shè)計更改有助于緩解鎖定問題:

? 行級鎖。覆蓋默認的 DB2 頁面級鎖設(shè)置并進行重組,以便表運用行級鎖定提高并發(fā)性。行級鎖應當謹慎使用,因為鎖數(shù)增加可能會導致開銷增加,如果未能妥善處理,則勢必會造成鎖升級增加。

? 索引和查詢優(yōu)化。讀取查詢(可能需要執(zhí)行表掃描)不會造成 Oracle 問題,卻會導致 DB2 on z/OS 出現(xiàn)問題,因為讀取查詢會鎖定整個表。為了緩解這個問題,需要確保已經(jīng)優(yōu)化了所有查詢的索引和訪問路徑,從而避免不必要的表掃描,尤其是在線交易過程中訪問的表掃描。

? 分區(qū)。在 DB2 for z/OS 中引入分區(qū)表空間后,并發(fā)性將得到大幅提升,批量運行尤為明顯。通過確定分區(qū)鍵并根據(jù)鍵值范圍將數(shù)據(jù)分別置于不同的分區(qū),可以將數(shù)據(jù)劃分為不同的分區(qū)。在進行批處理時,可以根據(jù)分區(qū)鍵值啟動多個線程,這樣不同線程就可以訪問不同分區(qū)并提供更高的并發(fā)性。

應用程序級策略

某些關(guān)鍵應用程序設(shè)計更改可能有助于緩解鎖定問題,這些更改包括:

? 跳過鎖定數(shù)據(jù)。您可能遇到過這樣一種情況:同一表執(zhí)行不同的事務,您只需訪問所有給定表中當前未鎖定的行。在這些情況下,DB2 提供了一個選項,通過使用 SELECT、UPDATE 和 DELETE 子句中的 KIP LOCKED DATA 選項僅查詢未鎖定的行。此選項只有在設(shè)置游標穩(wěn)定性 (CS) 和讀取穩(wěn)定性 (RS) 隔離級別的情況下才適用,并且僅適用于行級鎖和頁面級鎖。

? 未提交讀取。在某些情況下,如果讀取查詢響應包含未提交數(shù)據(jù)是可以接受的,那么請嘗試使用 WITH UR 選項在 DB2 中讀取查詢,因此它不具有任何共享鎖。對于用戶驗收測試或生產(chǎn)區(qū)域內(nèi)的應用程序測試人員和業(yè)務分析師,此選項在運行用戶查詢時十分有用。這些查詢可能與應用程序查詢彼此抗衡,因而,運行采用了 WITH UR 子句的用戶查詢可能需要避免出現(xiàn)這種狀況。

? 表訪問順序。由于并行事務表的訪問順序不當,從 Oracle 向 DB2 for z/OS 遷移時也又可能發(fā)生鎖爭用現(xiàn)象。使訪問順序一致有助于避免發(fā)生這種問題。例如,如果事務 1 先訪問表 A,再訪問表 B,后續(xù)事務訪問同樣的表時也應當采用相同的順序。

操作級策略

由于同一表執(zhí)行不同類型的工作負載(例如,批處理和在線工作負載同時訪問表,或者不同批次同時訪問表),因此可能發(fā)生爭用現(xiàn)象。在這些情況下,一種方法是執(zhí)行操作級更改,如重新安排發(fā)生沖突的事務。同時也可以在非高峰期(當在線工作負載不運行)時運行批處理工作負載。如果兩個批次并行運行,則嘗試一前一后運行,或者設(shè)置依賴關(guān)系,以便一個工作負載無法在另一工作負載運行時運行,反之亦然。

結(jié)束語

Oracle 與 DB2 on z/OS 之間存在一些主要鎖定差異,因此,當應用程序從 Oracle 向 DB2 遷移時,可能會導致鎖定問題。不過,正如本文所述,我們可以在數(shù)據(jù)庫、應用程序和操作級別上執(zhí)行一些方案,極大地緩解可能出現(xiàn)的任何問題。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊15 分享