全面解析DB2 V9.1復(fù)制技術(shù)的新特性和改進(jìn)
DB2 V9.1是IBM最新推出的數(shù)據(jù)庫(kù)系統(tǒng),除了延續(xù)以前版本對(duì)DB2數(shù)據(jù)庫(kù)管理的特性,還提供了新的查詢(xún)語(yǔ)言、新的存儲(chǔ)技術(shù)、新的索引技術(shù)以及支持純XML數(shù)據(jù)及其固有層次結(jié)構(gòu)的其他相關(guān)特性,等等。關(guān)于上述新特性的詳細(xì)介紹,請(qǐng)參見(jiàn)DW的相關(guān)系列文章,本文將要介紹的是DB2 V91在數(shù)據(jù)庫(kù)復(fù)制技術(shù)方面的改進(jìn)和相關(guān)新特性。
首先,在DB2 V9.1中,復(fù)制相關(guān)的產(chǎn)品取了一個(gè)新的名字,叫做'WebSphere Replication Server',通過(guò)這個(gè)名字,IBM更加強(qiáng)調(diào)了'復(fù)制'功能作為一個(gè)Server和服務(wù)的重要性。其次,從大的體系結(jié)構(gòu)來(lái)說(shuō),DB2 V91的數(shù)據(jù)庫(kù)復(fù)制技術(shù)仍然分為SQL復(fù)制和Q復(fù)制,而相關(guān)的復(fù)制組件也仍然是SQL復(fù)制的Capture、Apply和Monitor,以及Q復(fù)制中的Q Capture、Q Apply和Q Monitor,這一點(diǎn)和V8的差別不大。本文將按照復(fù)制技術(shù)的分類(lèi)以及復(fù)制組件的邏輯順序來(lái)對(duì)V91中的新特性和改進(jìn)做一個(gè)總體介紹。因此下面將分為如下三大部分:
·SQL復(fù)制的新特性和改進(jìn);
·Q復(fù)制的新特性和改進(jìn);
·其它方面的新特性和改進(jìn)。
SQL復(fù)制的新特性和改進(jìn):
由于SQL復(fù)制是發(fā)展比較成熟的一種復(fù)制技術(shù),所以其在V91中的改進(jìn)主要體現(xiàn)在Capture這個(gè)組件上,而Capture的改進(jìn)又主要體現(xiàn)在性能上。
通過(guò)在并行處理方面的完善,Capture的吞吐量比原來(lái)有更優(yōu)的表現(xiàn),從而提高了相關(guān)性能。如果對(duì)V8比較熟悉的話(huà),那么應(yīng)該知道,在V8中,日志的讀取的連續(xù)性并不是太好,這是因?yàn)槿罩镜淖x取需要和Capture程序中其他相關(guān)的內(nèi)部函數(shù)(這個(gè)函數(shù)和日志讀取線(xiàn)程不屬于同一個(gè)線(xiàn)程)進(jìn)行直接同步。在V91中,為了提高Capture程序的性能,就必須提高日志讀取的連續(xù)性,這是通過(guò)增加了一個(gè)新的線(xiàn)程(叫做transaction thread)來(lái)實(shí)現(xiàn)的。這樣,日志讀取的線(xiàn)程就不需要直接和其他內(nèi)部函數(shù)進(jìn)行同步,籍由新增加的專(zhuān)門(mén)的線(xiàn)程來(lái)隔離并處理相關(guān)的邏輯,從而使得日志的讀取更加高效和連續(xù)。這就有助于在各種環(huán)境中提高Capture的性能,特別是在z/OS的數(shù)據(jù)共享環(huán)境和LUW平臺(tái)下的數(shù)據(jù)分區(qū)環(huán)境中。
由于SQL復(fù)制是相對(duì)比較成熟的一種復(fù)制技術(shù),所以其改進(jìn)的地方相對(duì)于Q復(fù)制來(lái)說(shuō), 更少。下面將要介紹在V91中改進(jìn)較多的Q復(fù)制。
Q復(fù)制的新特性和改進(jìn)
在V91中,對(duì)Q復(fù)制有比較大的改進(jìn)和完善。
1.Q Capture的改進(jìn)和完善
首先,上述SQL復(fù)制中的Capture的改進(jìn)同樣適用于Q復(fù)制中的Q Capture。其次,在Q Capture status方面,在原來(lái)的V8版本中,在LUW平臺(tái)下,有時(shí)候很難知道Q Capture當(dāng)前所需要用到的最老的日志是哪個(gè)部分。而到了V91版本,在管理LUW平臺(tái)上的DB2日志文件方面有了較大提高,當(dāng)Q Capture不再需要某個(gè)日志文件的時(shí)候,那么用戶(hù)將會(huì)得到更好的相關(guān)信息(通過(guò)Q Capture status命令實(shí)現(xiàn)),具體說(shuō)來(lái),Q Capture status命令可以對(duì)如下方面的信息有更加詳細(xì)的顯示:
DB2日志文件的路徑
Q Capture重新啟動(dòng)時(shí)所需要的最老的DB2日志文件
當(dāng)前正在被捕捉的DB2日志文件
通過(guò)上面這些信息,用戶(hù)就能更好的判斷和決定哪些日志文件不再被使用從而可以刪除之。
此外,V9版本也將會(huì)對(duì)transaction的應(yīng)用處理方面(如忽略和過(guò)濾掉某些transaction)有更多完善。
2.Q Apply的改進(jìn)和完善
在Q Apply方面,新增加的特性和相關(guān)的改進(jìn)最多,主要為如下幾個(gè)方面:
Load的改進(jìn)
Spill queue名字的可定制化的改進(jìn)
刪除spill queue方面的靈活性增強(qiáng)
監(jiān)控?cái)?shù)據(jù)的改進(jìn)
時(shí)間參數(shù)粒度方面的改進(jìn)
改進(jìn)的status命令
數(shù)據(jù)轉(zhuǎn)換方面的改進(jìn)
在load階段,Q Apply將會(huì)創(chuàng)建和使用叫做'spill queue'的model queues,在V8的前期版本中,用戶(hù)沒(méi)有辦法控制Apply去選擇哪一個(gè)model queue,因?yàn)樗械念A(yù)定集都只有一個(gè)單一的并且已經(jīng)被系統(tǒng)硬編碼的model queue (IBMQREP.SPILL.MODELQ),用戶(hù)只能使用唯一的那個(gè)model queue (但是在V8的比較新的版本中,已經(jīng)開(kāi)始可以用戶(hù)自己指定相關(guān)的model queue了)。
而在V91中,model queue的定制化得到了進(jìn)一步增強(qiáng),主要體現(xiàn)在:用戶(hù)可以通過(guò)相關(guān)選項(xiàng)在預(yù)定集的級(jí)別來(lái)指定想要的MODELQ的名字,也因此,不同的預(yù)定集可以有不同的model queue。如下圖所示,說(shuō)明了相關(guān)的改進(jìn)和變化,用戶(hù)可以在Model queue對(duì)應(yīng)的空格里面添上自己想要的名字。
在V8中,直到Q Apply將相應(yīng)的spill queue刪除掉,它才能激活相應(yīng)的subscription。然而,如果Q Apply程序沒(méi)有刪除MQ隊(duì)列的權(quán)限,那么subscription就不能被激活。這個(gè)問(wèn)題唯一的解決辦法就是把相應(yīng)的權(quán)限賦給Q Apply程序。在V91中,這個(gè)問(wèn)題得到了更好的處理,用戶(hù)可以不用將相應(yīng)權(quán)限賦給Q Apply程序,同時(shí)也能使之激活相應(yīng)的subscription。
在監(jiān)控?cái)?shù)據(jù)的改進(jìn)方面,主要體現(xiàn)在粒度更加精細(xì)化。在V8中,有些監(jiān)控?cái)?shù)據(jù)的粒度是以秒為單位,但是在眾多客戶(hù)的使用過(guò)程中發(fā)現(xiàn),這個(gè)粒度在某些情形下過(guò)于粗糙,他們需要更細(xì)的粒度單位。因此,在V91中,有3個(gè)參數(shù)的粒度被細(xì)化到毫秒級(jí),即MONITOR_INTERVAL(監(jiān)控?cái)?shù)據(jù)的時(shí)間間隔),MEM_FULL_TIME(內(nèi)存滿(mǎn)時(shí)間)和APPLY_SLEEP_TIME(Apply的睡眠時(shí)間)。關(guān)于這三個(gè)參數(shù)的更詳細(xì)解釋?zhuān)?qǐng)參見(jiàn)相關(guān)的手冊(cè)和文檔。
對(duì)于status命令(主要用來(lái)檢查Q Apply等狀態(tài)的命令程序),在V8中其提供的輸出信息非常少,但是在V9中,該程序功能已經(jīng)大大加強(qiáng),可以通過(guò)設(shè)置相關(guān)參數(shù)(show details)來(lái)顯示更加全面和有用的Q Apply當(dāng)前信息。不過(guò)目前僅在LUW平臺(tái)下支持這個(gè)增強(qiáng)的功能。下面是V9中該命令的一個(gè)示例:
asnqacmd apply_server=qtest status show details
下面是該命令的一個(gè)示例輸出:
======================================================================
Q Apply program status
Server name (SERVER) = QTEST
Schema name (SCHEMA) = ASN
Program status (STATUS) = Up
Time since program started (UP_TIME) = 0d 0h 0m 29s
Log file location (LOGFILE) =
/home/tolleson/mylogs
Number of active Q subscriptions (ACTIVE_QSUBS) = 2
Time period used to calculate average (INTERVAL_LENGTH) = 0h 0m 0.50s
Receive queue : Q2
Number of active Q subscriptions (ACTIVE_QSUBS) = 1
All transactions applied as of (time) (OLDEST_TRANS) =
2005-07-30-12.52.42.000001
All transactions applied as of (LSN) (OLDEST_TRANS) =
0000:0000:0000:0000:0000
Oldest in-progress transaction (OLDEST_INFLT_TRANS) =
2005-07-30-12.52.42.000001
Average end-to-end latency (END2END LATENCY) = 0h 0m 1.476s
Average Q Capture latency (CAPTURE_LATENCY) = 0h 0m 0.661s
Average WSMQ latency (QLATENCY) = 0h 0m 0.786s
Average Q Apply latency (APPLY_LATENCY) = 0h 0m 0.29s
Current memory (CURENT_MEMORY) = 0 MB
Current queue depth (QDEPTH) = 92
======================================================================
從上面的輸出可以看到,這里的輸出信息更加詳細(xì)和完備,包括了current queue depth, average end-to-end latency以及Number of active subscriptions等重要信息。通過(guò)這些信息,用戶(hù)可以更好的判斷出當(dāng)前Q Apply的運(yùn)行情況。
3.Q Monitor的改進(jìn)和完善
Q Monitor在V9中主要增加了暫停監(jiān)控的功能。一旦定義好,不需要人工干預(yù),可以給系統(tǒng)管理和維護(hù)帶來(lái)很多便利之處。
在原來(lái)的V8中,如果想使Alert Monitor停止發(fā)送相關(guān)的通知(notification),唯一的辦法就是關(guān)掉Alert Monitor。這就意味著Alert Monitor在某些時(shí)候,譬如系統(tǒng)維護(hù)期間,如果忘記關(guān)閉的話(huà),將會(huì)發(fā)送一些不必要的信息,從而浪費(fèi)系統(tǒng)資源。在V9中,用戶(hù)可以對(duì)Alert Monitor自定義相關(guān)的屬性,如暫停時(shí)段的相關(guān)屬性等等。另外,一個(gè)Alert Monitor還能監(jiān)測(cè)多個(gè)Capture和Apply程序,并且,如果有需要的話(huà),Alert Monitor還可以對(duì)那些Capture和Apply分別設(shè)置獨(dú)立的暫停時(shí)段的相關(guān)屬性,從而靈活管理和維護(hù)復(fù)制環(huán)境。
不過(guò)需要注意的一點(diǎn)就是,目前暫時(shí)只支持通過(guò)asnclp命令行的方式來(lái)創(chuàng)建和定義相關(guān)的暫停監(jiān)控的時(shí)段屬性,圖形界面(復(fù)制中心)目前還不支持這一功能。而相應(yīng)新增加的asnclp命令為如下兩種:'CREATE MONITOR SUSPENSION'和'CREATE MONITOR SUSPENSION TEMPLATE'。通過(guò)這兩個(gè)命令,可以為特定的Capture或者Apply指定暫停監(jiān)控的時(shí)間段,或者為其指定合適的模版來(lái)定義其暫停監(jiān)控的模式。
關(guān)于這個(gè)暫停監(jiān)控的功能的應(yīng)用,舉下面這個(gè)例子來(lái)簡(jiǎn)單說(shuō)明一下。假設(shè)用戶(hù)有下面這樣一個(gè)需求:
Alert Monitor需要24x7不間斷運(yùn)行
Alert Monitor監(jiān)控一個(gè)叫做QSRVR2的Q Capture Server
系統(tǒng)停用的時(shí)間安排計(jì)劃如下:
1. 從2005年3月1號(hào)開(kāi)始停用
2. 在2005年12月1號(hào)恢復(fù)使用
3. 在上述開(kāi)始時(shí)間和結(jié)束時(shí)間期間的每個(gè)星期天開(kāi)始連著的2天暫停監(jiān)控
要完成上述要求,相應(yīng)的asnclp命令如下:
首先創(chuàng)建一個(gè)MONITOR SUSPENSION TEMPLATE:
SET SERVER MONITOR TO DB SAMPLE;
SET OUTPUT MONITOR SCRIPT monperiod1.sql;
CREATE MONITOR SUSPENSION TEMPLATE SUNDAYT1
REPEATS WEEKLY DAY OF WEEK SUNDAY FOR DURATION 2 DAYS;
這段腳本中,我們?cè)O(shè)定了Alert Monitor控制服務(wù)器,然后創(chuàng)建了一個(gè)叫做SUNDAYT1的模版,這個(gè)模版定義了滿(mǎn)足上述時(shí)間安排計(jì)劃(第3點(diǎn))的暫停監(jiān)控的時(shí)間要求。
然后創(chuàng)建MONITOR SUSPENSION:
SET SERVER MONITOR TO DB SAMPLE;
SET OUTPUT MONITOR SCRIPT monperiod1.sql;
CREATE SUSPENSION NAME S2 FOR SERVER QSRVR2
STARTING DATE 2005-03-01
USING PATTERN SUNDAYT1
ENDING DATE 2005-12-01;
這段腳本主要?jiǎng)?chuàng)建了一個(gè)叫做S2的suspension,它指定了Server為QSRVR2,同時(shí)指定了開(kāi)始時(shí)間和結(jié)束時(shí)間,以及使用的模版。通過(guò)上面的簡(jiǎn)單腳本,就可以實(shí)現(xiàn)該用戶(hù)的上述需求了。
關(guān)于Alert Monitor,還需要提及的就是,Alert Monitor現(xiàn)在可以給z/OS console發(fā)送警報(bào)消息了。如果是V8版本,可以通過(guò)一個(gè)PTF來(lái)增加這個(gè)功能。其具體實(shí)現(xiàn)就是在已有的asnclp中加入了兩個(gè)新的選項(xiàng),即'CREATE ALERT CONDITIONS'和'ALTER ALERT CONDITIONS'。
4.CCD方面的改進(jìn)和完善
CCD方面的改進(jìn)和完善是Q復(fù)制中很重要的一部分。CCD是Consistent Change Data的縮寫(xiě),它是單向復(fù)制中的目標(biāo)表的類(lèi)型之一。事實(shí)上,該類(lèi)型的目標(biāo)表在SQL復(fù)制中早已存在,通過(guò)CCD類(lèi)型的目標(biāo)表,可以記錄下源表所有的數(shù)據(jù)變化歷史信息,進(jìn)一步的,可以在此基礎(chǔ)上將相應(yīng)的所需要的子集數(shù)據(jù)分發(fā)到其他需要的表里面,從而實(shí)現(xiàn)類(lèi)似于數(shù)據(jù)審核等這樣的功能需求,如下面兩個(gè)圖所示。
在V9中,對(duì)CCD做的重大改進(jìn)就是,用戶(hù)可以對(duì)如下兩個(gè)方面通過(guò)圖形界面的方式進(jìn)行設(shè)定:
'complete'或者'noncomplete'
'condensed'或者'noncondensed'
所謂complete,就是指目標(biāo)表是源表的一個(gè)完全的拷貝;而noncomplete則是指目標(biāo)表僅包含源表的變化的部分(目標(biāo)表數(shù)據(jù)初始為空)。所謂condensed,就是指對(duì)應(yīng)于源表的每一行數(shù)據(jù),目標(biāo)表僅有一行數(shù)據(jù)對(duì)應(yīng)之,并且該行是源表相應(yīng)的那行數(shù)據(jù)的最近操作后的結(jié)果數(shù)據(jù);而noncondensed則包含了對(duì)應(yīng)于源表的每一行數(shù)據(jù)的所有的操作的對(duì)應(yīng)的結(jié)果數(shù)據(jù)(每一個(gè)操作對(duì)應(yīng)于目標(biāo)表中的一行)。因此,CCD類(lèi)型的目標(biāo)表和其他類(lèi)型的目標(biāo)表的不同之處在于:CCD包含了除用戶(hù)數(shù)據(jù)本身之外的關(guān)于源表的操作信息,這些操作包括插入、刪除和更新以及他們的操作順序等信息。為了支持這個(gè)功能,CCD表額外增加了一些相應(yīng)的列,通過(guò)那些列,Q Apply程序從而可以實(shí)現(xiàn)相應(yīng)功能。
具體操作界面如下所示,這個(gè)界面是在創(chuàng)建Q預(yù)定集的時(shí)候出現(xiàn)的。在目標(biāo)表這個(gè)步驟的時(shí)候,用戶(hù)可以指定目標(biāo)表類(lèi)型為CCD并且設(shè)置相關(guān)的屬性。具體操作細(xì)節(jié)不再贅述。
其它方面的新特性和改進(jìn)
除了上面這些主要組件的新特性和改進(jìn)外,V9中還有一些其他的新特性和改進(jìn)。主要列舉如下:
復(fù)制中心(圖形界面)的增強(qiáng)--對(duì)MQ支持的增強(qiáng)
Live Monitor
Exceptions table formatter
即將發(fā)布的Q Replication Dashboard
當(dāng)V8剛發(fā)布時(shí),在操作Q復(fù)制的時(shí)候,所有關(guān)于MQ的相關(guān)對(duì)象,都必須由用戶(hù)手動(dòng)敲入相關(guān)的名字,譬如用戶(hù)必須手動(dòng)敲入像queue manager、admin queue和restart queue等對(duì)象的名字,這就很容易造成鍵盤(pán)敲入不慎帶來(lái)的低級(jí)錯(cuò)誤,使得相關(guān)問(wèn)題的診斷變得困難。
為了解決這類(lèi)問(wèn)題,在V9中對(duì)復(fù)制中心和asnclp做了改進(jìn),用戶(hù)可以通過(guò)列表的方式來(lái)選擇已經(jīng)存在的相關(guān)的MQ對(duì)象。實(shí)際上,在DB2 V8 FP10(LUW平臺(tái))以及z/OS版本9中,已經(jīng)集成了這個(gè)功能,不過(guò)用戶(hù)需要到相關(guān)網(wǎng)站去下載幾個(gè)相應(yīng)的文件補(bǔ)丁。一個(gè)示例性的圖形界面如下圖所示。
Q replication Live Monitor是一個(gè)用來(lái)實(shí)時(shí)顯示系統(tǒng)延遲和系統(tǒng)吞吐量的圖形工具。每一個(gè)Q Capture和Q Apply都可以有一個(gè)Live Monitor。如下圖所示,顯示了相關(guān)的Q Capture、Q Apply甚至MQ的延遲和吞吐量等實(shí)時(shí)信息。通過(guò)Live Monitor,也可以探測(cè)Q Capture或者Q Apply是不是處于非活動(dòng)狀態(tài),等等。
Exception Table Formatter是一個(gè)命令行工具,主要從Apply控制服務(wù)器的異常表中選擇相關(guān)數(shù)據(jù)并且以用戶(hù)友好的可讀方式將相關(guān)信息顯示出來(lái)。其輸出信息可以通過(guò)網(wǎng)絡(luò)瀏覽器以文本方式顯示出來(lái)。
Dashboard是一個(gè)新的小窗口式的圖形界面,主要可以用來(lái)顯示Q Capture和Q Apply的運(yùn)行狀態(tài)。如下圖所示,我們能看到每一個(gè)Server上面的Q Capture和Q Apply的運(yùn)行狀態(tài),綠色表示處于正常運(yùn)行狀態(tài),紅色處于停止?fàn)顟B(tài),沒(méi)有內(nèi)容的空白項(xiàng)(如GREEN(ASN1)的Q Apply單元格),表示該Server上沒(méi)有相應(yīng)的Q Capture或者Q Apply。
當(dāng)點(diǎn)擊圖中的相應(yīng)Server時(shí),可以進(jìn)一步顯示該Server更加詳細(xì)的信息。下圖是其中界面之一(還有其他的一些類(lèi)似的界面,這里不再贅述),包括了相應(yīng)的表所處的預(yù)定集的狀態(tài)、復(fù)制的類(lèi)型、節(jié)點(diǎn)信息等等。這些信息對(duì)于問(wèn)題和環(huán)境的診斷是非常有幫助的。
結(jié)束語(yǔ)
本文主要介紹了DB2 V9版本在復(fù)制技術(shù)方面的一些改進(jìn)、完善以及新特性。通過(guò)對(duì)SQL復(fù)制的新特性和改進(jìn)、Q復(fù)制的新特性和改進(jìn)以及其它方面的新特性和改進(jìn)三個(gè)大方面來(lái)講述。從文中可以發(fā)現(xiàn),DB2 V9提供的復(fù)制技術(shù)更加穩(wěn)定易用,也更加強(qiáng)大快捷,從而可以為企業(yè)數(shù)據(jù)環(huán)境帶來(lái)更高更穩(wěn)定的生產(chǎn)效率。
