DB2的代理和連接集中器
本文為您介紹了DB2 Universal Database代理的概念以及工作原理,連接集中器的概念及特性,并對DB2 連接上常見的問題及代理的優(yōu)化作了詳細(xì)的分析。供您參考,希望對您有所幫助。
DB2 的代理 (agent) 是位于 DB2 服務(wù)器中的服務(wù)于應(yīng)用程序請求的一些進(jìn)程或線程。當(dāng)有外部應(yīng)用程序連接至 DB2 實(shí)例提出訪問請求時(shí),DB2 的代理就會被激活去應(yīng)答這些請求。一般 DB2 的代理被稱為工作代理,工作代理大概有三種類型:空閑代理、活動的協(xié)調(diào)代理、子代理。
◆空閑代理:指的是沒有任何任務(wù)的代理。這種代理不服務(wù)于任何遠(yuǎn)程連接也不服務(wù)于本地連接,處于一種備用或待命狀態(tài)。
◆活動的協(xié)調(diào)代理:指的是處于工作狀態(tài)的代理,每一個(gè)外部應(yīng)用程序產(chǎn)生的數(shù)據(jù)庫活動連接的都有一個(gè)活動協(xié)調(diào)代理來為它服務(wù)。
◆子代理:指的是接受協(xié)調(diào)代理分發(fā)出來的工作的下一級代理。在 DB2 V95 以前,只有在多分區(qū)環(huán)境 (MPP) 或節(jié)點(diǎn)內(nèi)并行環(huán)境 (SMP) 下才存在子代理,在 DB2 V95 中所有環(huán)境中都可能存在子代理。
在 DB2 服務(wù)器中有一個(gè)代理池,當(dāng)實(shí)例剛啟動后這里便有一些代理(其數(shù)量取決于實(shí)例參數(shù) NUM_INITAGENTS)。在沒有任何數(shù)據(jù)庫連接時(shí),它們處于待命狀態(tài),就是空閑代理。而當(dāng)有外部程序連接至數(shù)據(jù)庫時(shí),這些代理開始得到命令去服務(wù)于這些新建的連接,這時(shí)它們就變成了活動的協(xié)調(diào)代理。這些協(xié)調(diào)代理再將請求逐步細(xì)分,分配給下一級代理即子代理去處理。如果當(dāng)前的代理都已經(jīng)在工作了,同時(shí)又來了新的請求,數(shù)據(jù)庫管理器會產(chǎn)生一個(gè)新的代理去應(yīng)答。當(dāng)事務(wù)處理完畢而且數(shù)據(jù)庫連接斷開后,協(xié)調(diào)代理要么返回代理池變回空閑代理,要么就自動消失了(取決于實(shí)例參數(shù) NUM_POOLAGENTS)。這就是一個(gè)代理的生命周期。
相關(guān)的配置參數(shù)
通過執(zhí)行 DB2 get dbm cfg 可以看到以下幾個(gè)和代理相關(guān)的實(shí)例參數(shù):MAXAGENTS,NUM_POOLAGENTS,NUM_INITAGENTS,MAX_COORDAGENTS,MAX_CONNECTIONS,MAXCAGENTS。下面對它們做一下簡要介紹:
◆MAXAGENTS:這個(gè)參數(shù)為當(dāng)前實(shí)例中全部代理的數(shù)量,包括協(xié)調(diào)代理,空閑代理和子代理之和。不過這個(gè)參數(shù)在 DB2 V95 中已經(jīng)不再使用了。 #p#
◆NUM_POOLAGENTS:這個(gè)參數(shù)用來控制代理池中的空閑代理的數(shù)量。當(dāng)活動的代理完成工作返回代理池變成空閑代理時(shí),如果數(shù)量超過了這個(gè)參數(shù),那么這個(gè)代理就會自動消失了。注意:在連接集中器激活的情況下,代理池中的空閑代理數(shù)目在某一時(shí)刻可能會超過 NUM_POOLAGENTS 的大小,以應(yīng)對突發(fā)的高密度連接。
◆NUM_INITAGENTS:這個(gè)參數(shù)就是前面提到的在實(shí)例剛剛啟動時(shí)便生成的一些空閑代理的數(shù)目。這是為了提高性能,因?yàn)檫@些代理可以隨時(shí)變成協(xié)調(diào)代理去應(yīng)答外部應(yī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)沒有得到令牌時(shí),協(xié)調(diào)代理只能等候。不過這個(gè)參數(shù)在 DB2 V95 中也已經(jīng)取消了。
還有一個(gè)連接參數(shù) MAXAPPLS 可以通過 db2 get db cfg for database_name 得到,它是一個(gè)數(shù)據(jù)庫級別的參數(shù),這個(gè)參數(shù)決定了同時(shí)連接至一個(gè)數(shù)據(jù)庫的***連接數(shù)。在一個(gè)實(shí)例下的所有數(shù)據(jù)庫的 MAXAPPLS 值之和不能超過實(shí)例參數(shù) MAX_CONNECTIONS。 #p#
連接集中器
基本原理
從 DB2 V8 開始,DB2 實(shí)例中有一個(gè)叫做連接集中器的特性,可以用來優(yōu)化數(shù)據(jù)庫的連接。缺省情況下,在實(shí)例創(chuàng)建的時(shí)候,MAX_CONNECTIONS 與 MAX_COORDAGENTS 的值是一致的。這個(gè)時(shí)候每一個(gè)協(xié)調(diào)代理唯一地服務(wù)于一個(gè)連接。比如說有 1000 個(gè)連接就要有 1000 個(gè)協(xié)調(diào)代理為之服務(wù)。這對服務(wù)器是一個(gè)很大的負(fù)擔(dān),因?yàn)槊恳粋€(gè)代理都要消耗一定的資源。而當(dāng)我們將 MAX_CONNECTIONS 的值設(shè)定的比 MAX_COORDAGENTS 大,這時(shí) DB2 的連接集中器就被激活了。它允許多個(gè)連接對應(yīng)于一個(gè)代理。
連接集中器的功能與 DB2 CONNECT 中的連接池相似。不過連接集中器比連接池的優(yōu)點(diǎn)在于它能夠重用外部連接,即多個(gè)排隊(duì)的應(yīng)用程序可以重復(fù)使用一個(gè)存在的連接,而連接池則需要先刪除再重建一個(gè)連接去服務(wù)于一個(gè)新的應(yīng)用程序。在連接集中器中每個(gè)協(xié)調(diào)代理并不唯一地服務(wù)于一個(gè)連接,當(dāng)某個(gè)外部連接斷開后,協(xié)調(diào)代理被分配給其他連接。這樣。同時(shí)允許更多的連接連到數(shù)據(jù)庫,并且減少了每個(gè)連接的內(nèi)存消耗,避免了頻繁的刪除和創(chuàng)建代理所帶來的系統(tǒng)開銷。下面是連接集中器的具體工作原理:
首先將 MAX_CONNECTIONS 的值設(shè)定的大于 MAX_COORDAGENTS 去激活連接集中器。在連接集中器中代理被分成邏輯代理和工作代理。邏輯代理與外部應(yīng)用程序?qū)?yīng),它并不對應(yīng)與某個(gè)特定的引擎分配單元 (EDU)。工作代理和前面定義的一樣,是具體的引擎分配單元。當(dāng)邏輯代理多于工作代理時(shí)連接集中器就被激活了。當(dāng)有多個(gè)連接同時(shí)連接到服務(wù)器時(shí),連接被一一分配給各個(gè)邏輯代理。邏輯代理再去請求工作代理的服務(wù)。