深入DB2代理的工作原理與連接過(guò)程
簡(jiǎn)介
DB2 的代理 (agent) 是位于 DB2 服務(wù)器中的服務(wù)于應(yīng)用程序請(qǐng)求的一些進(jìn)程或線程。當(dāng)有外部應(yīng)用程序連接至 DB2 實(shí)例提出訪問(wèn)請(qǐng)求時(shí),DB2 的代理就會(huì)被激活去應(yīng)答這些請(qǐng)求。一般 DB2 的代理被稱為工作代理,工作代理大概有三種類型:空閑代理、活動(dòng)的協(xié)調(diào)代理、子代理。
◆空閑代理:指的是沒(méi)有任何任務(wù)的代理。這種代理不服務(wù)于任何遠(yuǎn)程連接也不服務(wù)于本地連接,處于一種備用或待命狀態(tài)。
◆活動(dòng)的協(xié)調(diào)代理:指的是處于工作狀態(tài)的代理,每一個(gè)外部應(yīng)用程序產(chǎn)生的數(shù)據(jù)庫(kù)活動(dòng)連接的都有一個(gè)活動(dòng)協(xié)調(diào)代理來(lái)為它服務(wù)。
◆子代理:指的是接受協(xié)調(diào)代理分發(fā)出來(lái)的工作的下一級(jí)代理。在 DB2 V95 以前,只有在多分區(qū)環(huán)境 (MPP) 或節(jié)點(diǎn)內(nèi)并行環(huán)境 (SMP) 下才存在子代理,在 DB2 V95 中所有環(huán)境中都可能存在子代理。
在 DB2 服務(wù)器中有一個(gè)代理池,當(dāng)實(shí)例剛啟動(dòng)后這里便有一些代理(其數(shù)量取決于實(shí)例參數(shù) NUM_INITAGENTS)。在沒(méi)有任何數(shù)據(jù)庫(kù)連接時(shí),它們處于待命狀態(tài),就是空閑代理。而當(dāng)有外部程序連接至數(shù)據(jù)庫(kù)時(shí),這些代理開始得到命令去服務(wù)于這些新建的連接,這時(shí)它們就變成了活動(dòng)的協(xié)調(diào)代理。這些協(xié)調(diào)代理再將請(qǐng)求逐步細(xì)分,分配給下一級(jí)代理即子代理去處理。如果當(dāng)前的代理都已經(jīng)在工作了,同時(shí)又來(lái)了新的請(qǐng)求,數(shù)據(jù)庫(kù)管理器會(huì)產(chǎn)生一個(gè)新的代理去應(yīng)答。當(dāng)事務(wù)處理完畢而且數(shù)據(jù)庫(kù)連接斷開后,協(xié)調(diào)代理要么返回代理池變回空閑代理,要么就自動(dòng)消失了(取決于實(shí)例參數(shù) NUM_POOLAGENTS)。這就是一個(gè)代理的生命周期。
相關(guān)的配置參數(shù)
通過(guò)執(zhí)行 DB2 get dbm cfg 可以看到以下幾個(gè)和代理相關(guān)的實(shí)例參數(shù):MAXAGENTS,NUM_POOLAGENTS,NUM_INITAGENTS,MAX_COORDAGENTS,MAX_CONNECTIONS,MAXCAGENTS。下面對(duì)它們做一下簡(jiǎn)要介紹:
◆MAXAGENTS:這個(gè)參數(shù)為當(dāng)前實(shí)例中全部代理的數(shù)量,包括協(xié)調(diào)代理,空閑代理和子代理之和。不過(guò)這個(gè)參數(shù)在 DB2 V95 中已經(jīng)不再使用了。
◆NUM_POOLAGENTS:這個(gè)參數(shù)用來(lái)控制代理池中的空閑代理的數(shù)量。當(dāng)活動(dòng)的代理完成工作返回代理池變成空閑代理時(shí),如果數(shù)量超過(guò)了這個(gè)參數(shù),那么這個(gè)代理就會(huì)自動(dòng)消失了。注意:在連接集中器激活的情況下,代理池中的空閑代理數(shù)目在某一時(shí)刻可能會(huì)超過(guò) NUM_POOLAGENTS 的大小,以應(yīng)對(duì)突發(fā)的高密度連接。
◆NUM_INITAGENTS:這個(gè)參數(shù)就是前面提到的在實(shí)例剛剛啟動(dòng)時(shí)便生成的一些空閑代理的數(shù)目。這是為了提高性能,因?yàn)檫@些代理可以隨時(shí)變成協(xié)調(diào)代理去應(yīng)答外部應(yīng)用請(qǐng)求,而不用臨時(shí)再生成新的代理。
◆MAX_COORDAGENTS:這個(gè)參數(shù)決定了在實(shí)例中在同一時(shí)刻***的協(xié)調(diào)代理的數(shù)目 ( 在多分區(qū)環(huán)境指的是一個(gè)節(jié)點(diǎn)上的***協(xié)調(diào)代理數(shù) )。
◆MAX_CONNECTIONS:這個(gè)參數(shù)決定了允許連接至一個(gè)實(shí)例的***的連接數(shù) ( 在多分區(qū)環(huán)境指的是一個(gè)節(jié)點(diǎn)上的***連接數(shù) )。
◆MAXCAGENT:這個(gè)參數(shù)決定了實(shí)例中的令牌的數(shù)量,一個(gè)協(xié)調(diào)代理只有得到了令牌才能去服務(wù)于應(yīng)用程序。當(dāng)沒(méi)有得到令牌時(shí),協(xié)調(diào)代理只能等候。不過(guò)這個(gè)參數(shù)在 DB2 V95 中也已經(jīng)取消了。
【編輯推薦】