DB2 Capture程序的正確解析,專家答疑版
文章主要向大家講述的是專家答疑之DB2 Capture程序的正確解析,我們大家都知道DB2 Capture程序是一個(gè)非常關(guān)鍵的應(yīng)用程序,在數(shù)據(jù)庫(kù)復(fù)制的實(shí)際解決方案中表現(xiàn)尤為突出。這個(gè)程序的主要的作用就是追蹤在DB2服務(wù)器上對(duì)復(fù)制源所做的更改。
如果有更改的話,會(huì)將這些更改的記錄保存在一張?zhí)厥獾谋碇?CD表)。
通常情況下,這個(gè)應(yīng)用程序時(shí)運(yùn)行在控制服務(wù)器上。不過(guò)具體運(yùn)行在哪個(gè)位置,根據(jù)操作系統(tǒng)的不同可以有不同的選擇。作為數(shù)據(jù)庫(kù)管理員,必須要將Capture程序牢牢的掌握在手中。讓其在關(guān)鍵的時(shí)候發(fā)揮關(guān)鍵的作用。具體的來(lái)說(shuō),需要在必要的時(shí)候,啟動(dòng)如下幾個(gè)DB2 Capture程序相關(guān)的進(jìn)程。
一、工程程序進(jìn)程
如上圖所示,既然Capture程序主要用來(lái)監(jiān)測(cè)數(shù)據(jù)源表的變動(dòng)并將相關(guān)的記錄保存到CD表中,那么必然要有一個(gè)進(jìn)程,好像一只眼睛一樣,時(shí)刻盯著數(shù)據(jù)源表數(shù)據(jù)的的變化情況。如果有變化的話,即使告知其他進(jìn)程。這個(gè)進(jìn)程就叫做工作程序進(jìn)程。通常情況下,當(dāng)啟動(dòng)Capture進(jìn)程的時(shí)候,這個(gè)工作程序進(jìn)程就會(huì)啟動(dòng)。
工作程序進(jìn)程與復(fù)制源所駐留的DB2數(shù)據(jù)庫(kù)相連,監(jiān)視復(fù)制源的更改情況。同時(shí),其也決定了Capture程序的啟動(dòng)方式(即根據(jù)相關(guān)的參數(shù)來(lái)決定是以熱啟動(dòng)方式或者以冷啟動(dòng)方式來(lái)啟動(dòng)Capture程序)。當(dāng)這個(gè)工作程序進(jìn)程啟動(dòng)的時(shí)候,它就會(huì)讀取活動(dòng)的數(shù)據(jù)庫(kù)日志,以判斷相關(guān)的復(fù)制源(如基礎(chǔ)表、視圖)等等是否進(jìn)行了更改。
只要啟動(dòng)了這個(gè)進(jìn)程,那么這個(gè)監(jiān)測(cè)會(huì)一直持續(xù)下去。也就是說(shuō),并不是用戶對(duì)復(fù)制源作了更改,才觸發(fā)這個(gè)進(jìn)程。而是無(wú)論復(fù)制源是否有更改,這個(gè)進(jìn)程一直都存在(只要啟動(dòng)了DB2 Capture程序)。對(duì)于這個(gè)進(jìn)程,筆者認(rèn)為數(shù)據(jù)庫(kù)管理員需要從以下幾個(gè)方面去了解。
一是其監(jiān)測(cè)的內(nèi)容來(lái)源。工作程序進(jìn)程會(huì)讀取活動(dòng)的數(shù)據(jù)庫(kù)日志。不過(guò)對(duì)于DB2數(shù)據(jù)庫(kù)來(lái)說(shuō),數(shù)據(jù)庫(kù)日志包括兩部分,分別為重做日志緩存與重做日志文件。由于內(nèi)存的速度要比硬盤速度快的多,所以為了提高數(shù)據(jù)庫(kù)的性能,系統(tǒng)往往是先將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。然后在符合一定的條件下,再將內(nèi)存中的數(shù)據(jù)保存到數(shù)據(jù)文件中。
而內(nèi)存中的事務(wù)日志又可以分為兩類,分別為已落實(shí)的事務(wù)記錄(即已經(jīng)遞交的事務(wù))與未落實(shí)的事務(wù)記錄(還沒有遞交的事務(wù))。工作程序進(jìn)程在工作過(guò)程中,會(huì)收集內(nèi)存中屬于每個(gè)事務(wù)的所有記錄,并每個(gè)一個(gè)固定的時(shí)間將收集到的已經(jīng)落實(shí)的事務(wù)寫入到對(duì)應(yīng)的CD表中。故其數(shù)據(jù)源其實(shí)是內(nèi)存中已經(jīng)落實(shí)了的事務(wù)記錄。
二是需要注意,一個(gè)時(shí)間間隔的問題。即隔多少時(shí)間,將相關(guān)的記錄保存到CD表中。如果這個(gè)時(shí)間間隔設(shè)置的比較長(zhǎng),那么數(shù)據(jù)的同步性就比較差。而如果設(shè)置的比較短的話,又會(huì)影響數(shù)據(jù)庫(kù)的性能。一般情況下,只要采取數(shù)據(jù)庫(kù)的默認(rèn)設(shè)置即可。但是如果數(shù)據(jù)源表中的數(shù)據(jù)更改非常頻繁,則需要根據(jù)實(shí)際情況來(lái)合理調(diào)整這個(gè)時(shí)間參數(shù),以提高數(shù)據(jù)庫(kù)性能。
筆者的建議是,先采用默認(rèn)的值,并進(jìn)行數(shù)據(jù)庫(kù)性能的監(jiān)測(cè)。如果發(fā)現(xiàn)這個(gè)值不合適的話,則可以適當(dāng)調(diào)整并繼續(xù)監(jiān)測(cè)其對(duì)數(shù)據(jù)庫(kù)性能的影響。經(jīng)過(guò)幾次調(diào)試之后,就可以得到一個(gè)相對(duì)合理的時(shí)間間隔值。
二、修剪進(jìn)程
如上圖所示,工作DB2 Capture程序進(jìn)程會(huì)將復(fù)制源表的變化都保存到CD表中。而這個(gè)CD表中的數(shù)據(jù)又會(huì)根據(jù)不同的應(yīng)用最終復(fù)制到其他的目的表中。也就是說(shuō),這個(gè)CD表只是一個(gè)中間表。一般用戶不會(huì)直接從這個(gè)表中讀取數(shù)據(jù),而是通過(guò)其他的表來(lái)訪問CD表中的相關(guān)信息。此時(shí)就會(huì)引出一個(gè)新的問題。即隨著時(shí)間的推移,這個(gè)CD表中的數(shù)據(jù)會(huì)越來(lái)越多。
這不僅會(huì)影響數(shù)據(jù)庫(kù)的性能,而且還會(huì)浪費(fèi)存儲(chǔ)的空間。由于CD表中的數(shù)據(jù)會(huì)根據(jù)一定的規(guī)則復(fù)制到目標(biāo)表中。為此就需要有一種機(jī)制,來(lái)不定時(shí)的清理CD表中的數(shù)據(jù),將垃圾數(shù)據(jù)清除出去。此時(shí)就需要用到修剪進(jìn)程。
根據(jù)實(shí)際的應(yīng)用,這個(gè)CD表中的數(shù)據(jù)可以分為兩種類型。一是CD表中的數(shù)據(jù)已經(jīng)被復(fù)制到其他目的表中了,此時(shí)這個(gè)CD表中的數(shù)據(jù)已經(jīng)沒有任何作用了。二是CD表中的數(shù)據(jù)雖然沒有被復(fù)制到其他表中,但是已近過(guò)了有效期限。此時(shí)這個(gè)數(shù)據(jù)也已經(jīng)沒有用途了,也需要清除。針對(duì)這兩種不同的情況,又可以將修剪進(jìn)程分為正常修剪進(jìn)程與保留限制進(jìn)程。
正常修剪進(jìn)程就是指,當(dāng)修剪集表和修剪控制表中的值顯示已經(jīng)將組成這些行的事務(wù)復(fù)制到依賴于該CD表的所有目標(biāo)表時(shí),就會(huì)將CD表中的相關(guān)行以及工作單元表中相應(yīng)的行刪除。簡(jiǎn)單的說(shuō),就是需要用到這個(gè)CD表中的目標(biāo)表已經(jīng)將數(shù)據(jù)復(fù)制過(guò)去了,此時(shí)這個(gè)CD表中的相關(guān)記錄就會(huì)被刪除。不過(guò)需要注意,修剪也不是時(shí)刻進(jìn)行的。
也就是說(shuō),不是目的表將CD表中的數(shù)據(jù)復(fù)制過(guò)去,這個(gè)表中的數(shù)據(jù)就被刪除了。另外需要注意的是,目的表只是把CD表中的數(shù)據(jù)復(fù)制過(guò)去,而不是剪貼過(guò)去。這主要是因?yàn)榭赡苡卸鄰埬康谋硇枰玫竭@個(gè)CD表中的數(shù)據(jù)。修剪進(jìn)程會(huì)沒隔一段時(shí)間來(lái)檢查一下,是否滿足這個(gè)條件。如果滿足的話,就將CD表中的記錄刪除。而這個(gè)時(shí)間間隔是由參數(shù)PRUNE_INTERVAL決定的。
很顯然這個(gè)參數(shù)的值會(huì)影響到修剪進(jìn)程的效率。如何這個(gè)參數(shù)的值設(shè)置的比較大,那么修剪進(jìn)程作業(yè)的時(shí)間間隔就會(huì)比較長(zhǎng),這在一定程度上會(huì)提高數(shù)據(jù)庫(kù)的性能。但是如果設(shè)置的太長(zhǎng)的話,則CD表中的記錄就會(huì)比較多,又會(huì)給數(shù)據(jù)庫(kù)的性能造成負(fù)面的影響。為此數(shù)據(jù)庫(kù)管理員必須要根據(jù)復(fù)制源數(shù)據(jù)更新的頻率,在必要的情況下要手工調(diào)整這個(gè)參數(shù)。
如果目的表永遠(yuǎn)不從這個(gè)CD表中復(fù)制記錄,難道修剪進(jìn)程永遠(yuǎn)不刪除CD表中的記錄嗎?其實(shí)不然。在修剪進(jìn)程中,除了正常修剪之外,還有一個(gè)保留限制修剪。這個(gè)這個(gè)修剪中,進(jìn)程會(huì)檢查CD表中某些記錄的存在時(shí)間,是否超過(guò)了有效期。如果超過(guò)了的話,則保留限制修剪進(jìn)程就會(huì)刪除CD表中的行以及工作單元表中相應(yīng)的行。
這個(gè)CD表中的有效期是有參數(shù)RETENTION_LIMIT來(lái)控制的。顯然這個(gè)參數(shù)也非常的重要。如果這個(gè)參數(shù)設(shè)置的比較短,那么可能還沒等用戶復(fù)制記錄,表中記錄就會(huì)因?yàn)檫^(guò)了有效期而導(dǎo)致數(shù)據(jù)被刪除。但是如果設(shè)置的比較長(zhǎng)的話,那么垃圾數(shù)據(jù)就會(huì)越來(lái)越多,浪費(fèi)存儲(chǔ)空間,影響數(shù)據(jù)庫(kù)性能。
對(duì)此筆者的建議是,數(shù)據(jù)庫(kù)管理員需要在性能、存儲(chǔ)空間、RETENTION_LIMIT參數(shù)之間取得一個(gè)均衡的值。一般情況下,只要數(shù)據(jù)庫(kù)性能與存儲(chǔ)空間允許,則***將這個(gè)參數(shù)的值設(shè)置的比較長(zhǎng)一點(diǎn)。以免這表中的數(shù)據(jù)在目的表還沒有復(fù)制之前就被刪除。
除了以上這兩個(gè)進(jìn)程外,DB2 Capture程序還有管理進(jìn)程、串行化進(jìn)程等等。不過(guò)這些進(jìn)程要么是數(shù)據(jù)庫(kù)自動(dòng)管理的,要么就是對(duì)于Capture程序的影響不是很大??傊皇菙?shù)據(jù)庫(kù)管理員關(guān)注的重點(diǎn),為此筆者就不做過(guò)多的闡述。筆者認(rèn)為,從數(shù)據(jù)庫(kù)性能的角度考慮,數(shù)據(jù)庫(kù)管理員主要是要關(guān)注這個(gè)幾個(gè)進(jìn)程中涉及到的時(shí)間間隔參數(shù)。
這些參數(shù)是把雙刃劍。設(shè)置的好,可以提高數(shù)據(jù)庫(kù)性能。如設(shè)置的不好,相反會(huì)降低數(shù)據(jù)庫(kù)的效率。
【編輯推薦】
- IBM DB2數(shù)據(jù)庫(kù)與注意事項(xiàng)_DB2編程的描述
- DB2 并行版本中的查詢優(yōu)化登峰造極!
- DB2數(shù)據(jù)庫(kù)進(jìn)行備份在AIX如何操作?
- 對(duì)DB2 增量備份的正確運(yùn)用描述
- DB2 存儲(chǔ)過(guò)程的異常處理器類型有幾種?