DB2的代理和連接集中器
本文為您介紹了DB2 Universal Database代理的概念以及工作原理,連接集中器的概念及特性,并對(duì)DB2 連接上常見(jiàn)的問(wèn)題及代理的優(yōu)化作了詳細(xì)的分析。供您參考,希望對(duì)您有所幫助。
DB2 的代理 (agent) 是位于 DB2 服務(wù)器中的服務(wù)于應(yīng)用程序請(qǐng)求的一些進(jìn)程或線(xiàn)程。當(dāng)有外部應(yīng)用程序連接至 DB2 實(shí)例提出訪(fǎng)問(wèn)請(qǐng)求時(shí),DB2 的代理就會(huì)被激活去應(yīng)答這些請(qǐng)求。一般 DB2 的代理被稱(chēng)為工作代理,工作代理大概有三種類(lèi)型:空閑代理、活動(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í),這些代理開(kāi)始得到命令去服務(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ù)連接斷開(kāi)后,協(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)不再使用了。 #p#
◆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)取消了。
還有一個(gè)連接參數(shù) MAXAPPLS 可以通過(guò) db2 get db cfg for database_name 得到,它是一個(gè)數(shù)據(jù)庫(kù)級(jí)別的參數(shù),這個(gè)參數(shù)決定了同時(shí)連接至一個(gè)數(shù)據(jù)庫(kù)的***連接數(shù)。在一個(gè)實(shí)例下的所有數(shù)據(jù)庫(kù)的 MAXAPPLS 值之和不能超過(guò)實(shí)例參數(shù) MAX_CONNECTIONS。 #p#
連接集中器
基本原理
從 DB2 V8 開(kāi)始,DB2 實(shí)例中有一個(gè)叫做連接集中器的特性,可以用來(lái)優(yōu)化數(shù)據(jù)庫(kù)的連接。缺省情況下,在實(shí)例創(chuàng)建的時(shí)候,MAX_CONNECTIONS 與 MAX_COORDAGENTS 的值是一致的。這個(gè)時(shí)候每一個(gè)協(xié)調(diào)代理唯一地服務(wù)于一個(gè)連接。比如說(shuō)有 1000 個(gè)連接就要有 1000 個(gè)協(xié)調(diào)代理為之服務(wù)。這對(duì)服務(wù)器是一個(gè)很大的負(fù)擔(dān),因?yàn)槊恳粋€(gè)代理都要消耗一定的資源。而當(dāng)我們將 MAX_CONNECTIONS 的值設(shè)定的比 MAX_COORDAGENTS 大,這時(shí) DB2 的連接集中器就被激活了。它允許多個(gè)連接對(duì)應(yīng)于一個(gè)代理。
連接集中器的功能與 DB2 CONNECT 中的連接池相似。不過(guò)連接集中器比連接池的優(yōu)點(diǎn)在于它能夠重用外部連接,即多個(gè)排隊(duì)的應(yīng)用程序可以重復(fù)使用一個(gè)存在的連接,而連接池則需要先刪除再重建一個(gè)連接去服務(wù)于一個(gè)新的應(yīng)用程序。在連接集中器中每個(gè)協(xié)調(diào)代理并不唯一地服務(wù)于一個(gè)連接,當(dāng)某個(gè)外部連接斷開(kāi)后,協(xié)調(diào)代理被分配給其他連接。這樣。同時(shí)允許更多的連接連到數(shù)據(jù)庫(kù),并且減少了每個(gè)連接的內(nèi)存消耗,避免了頻繁的刪除和創(chuàng)建代理所帶來(lái)的系統(tǒng)開(kāi)銷(xiāo)。下面是連接集中器的具體工作原理:
首先將 MAX_CONNECTIONS 的值設(shè)定的大于 MAX_COORDAGENTS 去激活連接集中器。在連接集中器中代理被分成邏輯代理和工作代理。邏輯代理與外部應(yīng)用程序?qū)?yīng),它并不對(duì)應(yīng)與某個(gè)特定的引擎分配單元 (EDU)。工作代理和前面定義的一樣,是具體的引擎分配單元。當(dāng)邏輯代理多于工作代理時(shí)連接集中器就被激活了。當(dāng)有多個(gè)連接同時(shí)連接到服務(wù)器時(shí),連接被一一分配給各個(gè)邏輯代理。邏輯代理再去請(qǐng)求工作代理的服務(wù)。