本發(fā)明涉及數(shù)據(jù)庫管理技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫連接池的動態(tài)管理方法和系統(tǒng)。
背景技術(shù):
在當(dāng)今海量信息化的互聯(lián)網(wǎng)時代,數(shù)據(jù)庫從簡單的存儲各種數(shù)據(jù)表單到海量數(shù)據(jù)存儲在各行各業(yè)得到了廣泛的應(yīng)用,因此數(shù)據(jù)庫連接池的應(yīng)用越來越廣泛,數(shù)據(jù)庫連接池負責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個,能夠提高對數(shù)據(jù)庫操作的性能,因此,連接池的性能直接決定了訪問數(shù)據(jù)庫的性能,從而也決定了整個系統(tǒng)的性能。
現(xiàn)有的數(shù)據(jù)庫連接池的管理方案一般是:預(yù)先設(shè)置好連接池的各項配置參數(shù),連接池在工作時就按照設(shè)置好的配置參數(shù)運行,配置參數(shù)一般包括連接池的最大連接數(shù)、最小連接數(shù)等,其中,最小連接數(shù)是連接池會一直保持的數(shù)據(jù)連接,如果應(yīng)用程序?qū)?shù)據(jù)庫連接的使用量不大,將會有大量的數(shù)據(jù)庫連接資源被浪費掉;最大連接數(shù)是連接池能夠申請的最大連接數(shù),如果數(shù)據(jù)連接請求超過最大連接數(shù),后面的數(shù)據(jù)連接請求將被加入到等待隊列中,直到有數(shù)據(jù)庫連接釋放后,會按照等待隊伍中的數(shù)據(jù)連接請求的順序分配釋放的數(shù)據(jù)庫連接,但是當(dāng)?shù)却犖橹械臄?shù)據(jù)連接請求等待時間較長時,會影響之后的數(shù)據(jù)庫操作。
但是,對于現(xiàn)有的數(shù)據(jù)庫連接池,其最大連接數(shù)和最小連接數(shù)都是預(yù)先設(shè)置好的,并不會根據(jù)連接池的實時運行信息對其進行調(diào)整,因此無法對連接池進行動態(tài)調(diào)整,造成數(shù)據(jù)庫連接池的性能較低。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種數(shù)據(jù)庫連接池的動態(tài)管理方法和系統(tǒng),其主要目的在于解決無法對連接池進行動態(tài)調(diào)整的技術(shù)問題,提高數(shù)據(jù)庫連接池的性能。
為實現(xiàn)上述目的,本發(fā)明提供一種數(shù)據(jù)庫連接池的動態(tài)管理方法,該數(shù)據(jù)庫連接池的動態(tài)管理方法包括:
定時或者實時獲取連接池中的數(shù)據(jù)庫連接的運行信息,其中,所述運行信息包括獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù)中的一個或者多個;
根據(jù)獲取到的所述運行信息調(diào)整所述連接池的配置參數(shù),其中,所述配置參數(shù)包括所述連接池的最大連接數(shù)和最小連接數(shù),或者,根據(jù)獲取到的所述運行信息調(diào)整所述連接池中的數(shù)據(jù)庫連接的連接狀態(tài)。
可選地,所述根據(jù)獲取到的所述運行信息,調(diào)整所述連接池的連接數(shù)的步驟包括:
當(dāng)所述連接池的并發(fā)連接數(shù)在預(yù)設(shè)時長內(nèi)持續(xù)小于所述連接池的最小連接數(shù)時,減小所述連接池的最小連接數(shù)。
可選地,所述根據(jù)獲取到的所述運行信息,調(diào)整所述連接池的連接數(shù)的步驟包括:
當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,增大所述連接池的最大連接數(shù)。
可選地,所述當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,增大所述連接池的最大連接數(shù)的步驟包括:
當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,判斷數(shù)據(jù)庫當(dāng)前是否有空閑連接;
若所述數(shù)據(jù)庫當(dāng)前有空閑連接,則獲取空閑連接數(shù),并根據(jù)所述空閑連接數(shù)增大所述連接池的最大連接數(shù)。
可選地,所述根據(jù)獲取到的所述運行信息,調(diào)整所述連接池中的數(shù)據(jù)庫連接的連接狀態(tài)的步驟包括:
當(dāng)所述連接池中有數(shù)據(jù)庫連接的所述連接占用時長大于預(yù)設(shè)連接占用時間閾值時,關(guān)閉占用時長大于所述預(yù)設(shè)連接占用時間閾值的所述數(shù)據(jù)庫連接;
所述調(diào)整所述連接池中的數(shù)據(jù)庫連接的連接狀態(tài)的步驟之后,所述數(shù)據(jù)庫連接池的動態(tài)管理方法還包括步驟:
輸出所述連接池發(fā)生連接泄漏的通知信息。
此外,為實現(xiàn)上述目的,本發(fā)明還提供一種數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng),該數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)包括:
信息獲取模塊,用于定時或者實時獲取連接池中的數(shù)據(jù)庫連接的運行信息,其中,所述運行信息包括獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù)中的一個或者多個;
連接池調(diào)整模塊,用于根據(jù)獲取到的所述運行信息調(diào)整所述連接池的配置參數(shù),其中,所述配置參數(shù)包括所述連接池的最大連接數(shù)和最小連接數(shù),或者,根據(jù)獲取到的所述運行信息調(diào)整所述連接池中的數(shù)據(jù)庫連接的連接狀態(tài)。
可選地,所述連接池調(diào)整模塊,還用于當(dāng)所述連接池的并發(fā)連接數(shù)在預(yù)設(shè)時長內(nèi)持續(xù)小于所述連接池的最小連接數(shù)時,減小所述連接池的最小連接數(shù)。
可選地,所述連接池調(diào)整模塊,還用于當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,增大所述連接池的最大連接數(shù)。
可選地,所述連接池調(diào)整模塊包括:
連接判斷單元,用于當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,判斷數(shù)據(jù)庫當(dāng)前是否有空閑連接;
連接池調(diào)整單元,用于若所述數(shù)據(jù)庫當(dāng)前有空閑連接,則獲取空閑連接數(shù),并根據(jù)所述空閑連接數(shù)增大所述連接池的最大連接數(shù)。
可選地,所述連接池調(diào)整模塊,還用于當(dāng)所述連接池中有數(shù)據(jù)庫連接的所述連接占用時長大于預(yù)設(shè)連接占用時間閾值時,關(guān)閉占用時長大于所述預(yù)設(shè)連接占用時間閾值的所述數(shù)據(jù)庫連接;
所述數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)還包括:
信息輸出模塊,用于輸出所述連接池發(fā)生連接泄漏的通知信息。
本發(fā)明提出的數(shù)據(jù)庫連接池的動態(tài)管理方法和系統(tǒng),對數(shù)據(jù)庫連接池中的數(shù)據(jù)庫連接的運行信息進行定時或者實時地采集,運行信息包括獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù),也就說,在數(shù)據(jù)庫連接池處于運行狀態(tài)時,采集各個運行信息,對連接池的運行情況進行實時監(jiān)控,進而根據(jù)獲取到的運行信息對連接池的配置參數(shù)進行調(diào)整,例如連接池的最大連接數(shù)、最小連接數(shù)等,或者,根據(jù)獲取到的運行信息對連接池的數(shù)據(jù)庫的連接狀態(tài)進行調(diào)整,通過這種方式,能夠?qū)崟r地根據(jù)連接池中數(shù)據(jù)庫連接的使用情況對連接池的配置參數(shù)進行動態(tài)管理,能夠避免因為最小連接數(shù)過大,而導(dǎo)致數(shù)據(jù)庫連接長時間處于空閑狀態(tài)造成資源浪費,或者避免因為最大連接數(shù)不能滿足應(yīng)用當(dāng)前的需求而造成等待過久的問題,總之,本發(fā)明提出的方法和系統(tǒng)能夠提高對連接池進行動態(tài)調(diào)整,提高其性能,進而提高訪問數(shù)據(jù)庫的性能。
附圖說明
圖1為本發(fā)明數(shù)據(jù)庫連接池的動態(tài)管理方法第一實施例的流程圖;
圖2為本發(fā)明數(shù)據(jù)庫連接池的動態(tài)管理方法第二實施例的流程圖;
圖3為本發(fā)明數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)第一實施例的功能模塊示意圖;
圖4為本發(fā)明數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)第二實施例的功能模塊示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種數(shù)據(jù)庫連接池的動態(tài)管理方法。參照圖1所示,為本發(fā)明數(shù)據(jù)庫連接池的動態(tài)管理方法第一實施例的流程圖。
在本實施例中,該數(shù)據(jù)庫連接池的動態(tài)管理方法包括:
步驟S10,定時或者實時獲取連接池中的數(shù)據(jù)庫連接的運行信息,其中,所述運行信息包括獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù)中的一個或者多個;
可以理解的是,本發(fā)明提出的數(shù)據(jù)庫連接池的動態(tài)管理方法適用于各種不同類型的連接池,例如:DBCP(Database connection pool,數(shù)據(jù)庫連接池)、C3PO連接池(一種開放源代碼的JDBC連接池)、proxool連接池等各種類型的數(shù)據(jù)庫連接池。
數(shù)據(jù)庫連接池主要負責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個;釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因為沒有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。
連接池在系統(tǒng)初始化的時候,將數(shù)據(jù)庫連接作為對象存儲在內(nèi)存中,當(dāng)用戶需要訪問數(shù)據(jù)庫時,并非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。使用完畢后,也并非將連接關(guān)閉,而是將連接放回連接池中,以供下一個連接請求訪問使用。而連接的建立、斷開都由連接池自身來管理,或者通過其自身的管理機制來管理。
這些數(shù)據(jù)庫連接的數(shù)量由連接池的配置參數(shù)制約,配置參數(shù)包括但不限于:最小連接數(shù)、最大連接數(shù)、最大空閑時間、連接的最大使用次數(shù)等等,其中,最大空閑時間是指大于最小連接數(shù)的數(shù)據(jù)庫連接處于空閑狀態(tài)的最長時間,當(dāng)超過該時間后,它會被釋放;最小連接數(shù)是指無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫連接數(shù)量限定了這個連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請求的連接數(shù)超過最大連接數(shù)量時,這些請求將被加入到等待隊列中。最小連接數(shù)與最大連接數(shù)相差較大時,最先的連接請求將會獲利,之后超過最小連接數(shù)的連接請求等價于建立一個新的數(shù)據(jù)庫連接。不過,這些大于最小連接數(shù)的數(shù)據(jù)庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復(fù)使用或是空閑超時后被釋放。
在連接池的運行過程中,定時或者實時獲取連接池中的數(shù)據(jù)庫連接的運行信息,其中,運行信息包括但不限于:獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù)等。其中,獲取連接時長是指:連接池接收到應(yīng)用發(fā)送的連接獲取請求的時間點到分配一個連接池給該應(yīng)用的時間點之間的時長;連接占用時長是指:將一個數(shù)據(jù)庫連接分配給應(yīng)用的時間點到應(yīng)用使用完畢后將該連接歸還至連接池的時間點之間的時長;連接并發(fā)數(shù)是指連接池中當(dāng)前同時處于使用狀態(tài)的數(shù)據(jù)庫連接數(shù)量;空閑連接數(shù)是指連接池中當(dāng)前處于空閑狀態(tài)的數(shù)據(jù)庫連接的數(shù)量。
步驟S20,根據(jù)獲取到的所述運行信息調(diào)整所述連接池的配置參數(shù),其中,所述配置參數(shù)包括所述連接池的最大連接數(shù)和最小連接數(shù),或者,根據(jù)獲取到的所述運行信息調(diào)整所述連接池中的數(shù)據(jù)庫連接的連接狀態(tài)。
在獲取到上述運行信息后,根據(jù)運行信息對連接池的配置參數(shù)進行動態(tài)調(diào)整,具體地,對連接池的最大連接數(shù),最小連接數(shù)或者最大空閑時間等參數(shù)進行調(diào)整。關(guān)于調(diào)整連接池的配置參數(shù),可以包括多種情況,例如,減小最小連接數(shù),增大最大連接數(shù),增大最小連接數(shù)或者較小最大連接數(shù)等。
作為一種實施方式,步驟S20可以包括以下步驟:
當(dāng)所述連接池的并發(fā)連接數(shù)在預(yù)設(shè)時長內(nèi)持續(xù)小于所述連接池的最小連接數(shù)時,減小所述連接池的最小連接數(shù)。
如果連接池的并發(fā)連接數(shù)在一定時間內(nèi)持續(xù)小于連接池的最小連接數(shù),則說明當(dāng)前有一些數(shù)據(jù)庫連接是處于空閑狀態(tài)的,造成資源浪費,此時可以將最小連接數(shù)減小,以便于將空閑的連接再歸還給數(shù)據(jù)庫,以使數(shù)據(jù)庫能夠分配至其他的應(yīng)用使用,避免資源因為閑置而造成浪費。
作為另一種實施方式,步驟S20可以包括以下步驟:
當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,增大所述連接池的最大連接數(shù)。
獲取連接時長是連接池接收到應(yīng)用發(fā)送的連接獲取請求的時間點到分配一個連接池給該應(yīng)用的時間點之間的時長。連接池在接收到所述應(yīng)用的獲取數(shù)據(jù)庫連接請求時,判斷當(dāng)前的并發(fā)連接數(shù)是否小于最大連接數(shù),若是,則與數(shù)據(jù)庫建立新的連接,并將建立的新連接分配至所述應(yīng)用,若否,則將所述數(shù)據(jù)庫連接請求放入等待隊列中。因此,當(dāng)?shù)却犖橹械臄?shù)據(jù)庫連接請求較多時,會造成應(yīng)用的獲取連接時長較長,說明,此時應(yīng)用對于數(shù)據(jù)庫連接的需求量大,連接池中的數(shù)據(jù)庫連接數(shù)已經(jīng)不滿足應(yīng)用的使用需求,則增大連接池的最大連接數(shù),允許連接池向數(shù)據(jù)庫申請更多的連接。其中,預(yù)設(shè)連接請求時間閾值可以根據(jù)應(yīng)用的數(shù)據(jù)量進行設(shè)置。
需要說明的是,本發(fā)明提出的數(shù)據(jù)庫連接池的動態(tài)管理方法,同樣適用于對多應(yīng)用的管理,例如,數(shù)據(jù)庫同時為多個應(yīng)用提供連接,每個應(yīng)用有一個連接池,按照應(yīng)用的使用情況,將數(shù)據(jù)庫中的連接分配給多個不同的應(yīng)用。
進一步地,根據(jù)數(shù)據(jù)庫當(dāng)前的連接情況判斷能夠增大最大連接數(shù),如數(shù)據(jù)庫當(dāng)前有空閑連接時,增大連接池的最大連接數(shù),具體地,當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,增大所述連接池的最大連接數(shù)的步驟包括以下細化步驟:
當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,判斷數(shù)據(jù)庫當(dāng)前是否有空閑連接;
若所述數(shù)據(jù)庫當(dāng)前有空閑連接,則獲取空閑連接數(shù),并根據(jù)所述空閑連接數(shù)增大所述連接池的最大連接數(shù)。
對于一個連接池來說,能否增大最大連接數(shù)需要考慮為其提供連接的數(shù)據(jù)庫是否有空閑連接,因此,在獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,先判斷數(shù)據(jù)庫當(dāng)前是否有空閑連接,若有空閑連接,則獲取空閑連接數(shù),并根據(jù)空閑連接數(shù)增大連接池的最大連接數(shù),增大的連接數(shù)量可以小于或者等于數(shù)據(jù)庫當(dāng)前的空閑連接的數(shù)量。具體地,在判斷數(shù)據(jù)庫當(dāng)前是否有空閑連接時,可以向數(shù)據(jù)庫發(fā)送增大最大連接數(shù)的請求,數(shù)據(jù)庫在接收到請求時,可以向數(shù)據(jù)庫發(fā)送反饋信息,以說明是否有空閑連接以及空閑連接的數(shù)量。
本實施例提出的數(shù)據(jù)庫連接池的動態(tài)管理方法,對數(shù)據(jù)庫連接池中的數(shù)據(jù)庫連接的運行信息進行定時或者實時地采集,運行信息包括獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù),也就說,在數(shù)據(jù)庫連接池處于運行狀態(tài)時,采集各個運行信息,對連接池的運行情況進行實時監(jiān)控,進而根據(jù)獲取到的運行信息對連接池的配置參數(shù)進行調(diào)整,例如連接池的最大連接數(shù)、最小連接數(shù)等,或者,根據(jù)獲取到的運行信息對連接池的數(shù)據(jù)庫的連接狀態(tài)進行調(diào)整,通過這種方式,能夠?qū)崟r地根據(jù)連接池中數(shù)據(jù)庫連接的使用情況對連接池的配置參數(shù)進行動態(tài)管理,能夠避免因為最小連接數(shù)過大,而導(dǎo)致數(shù)據(jù)庫連接長時間處于空閑狀態(tài)造成資源浪費,或者避免因為最大連接數(shù)不能滿足應(yīng)用當(dāng)前的需求而造成等待過久的問題,總之,本發(fā)明提出的方法能夠提高對連接池進行動態(tài)調(diào)整,提高其性能,進而提高訪問數(shù)據(jù)庫的性能。
基于第一實施例提出本發(fā)明數(shù)據(jù)庫連接池的動態(tài)管理方法的第二實施例。參照圖2所示,在本實施例中,步驟S20包括以下細化步驟:
步驟S21,當(dāng)所述連接池中有數(shù)據(jù)庫連接的所述連接占用時長大于預(yù)設(shè)連接占用時間閾值時,關(guān)閉占用時長大于所述預(yù)設(shè)連接占用時間閾值的所述數(shù)據(jù)庫連接;
在步驟S20之后,該數(shù)據(jù)庫連接池的動態(tài)管理方法還包括:
步驟S30,輸出所述連接池發(fā)生連接泄漏的通知信息。
在本實施例中,在檢測到連接池中有數(shù)據(jù)庫連接的占用時長過長,即大于預(yù)設(shè)連接占用時間閾值時,說明應(yīng)用在獲取到數(shù)據(jù)庫連接后,長時間未將其歸還至連接池,判定發(fā)生了連接泄漏的情況,此時,將該被占用的時長過長的數(shù)據(jù)庫連接關(guān)閉,實現(xiàn)對連接池的動態(tài)管理,提高連接池的性能;同時,向用戶輸出通知信息,提示用戶連接池發(fā)生了連接泄漏,以便于用戶及時處理,關(guān)于輸出通知信息的方式,可以向綁定的郵箱發(fā)送郵件、或者向綁定的手機等移動終端發(fā)送通知信息等。
或者,作為一種實施方式,運行信息還包括建立連接時長,則步驟S20包括:當(dāng)所述建立連接時長大于預(yù)設(shè)建立連接時間閾值時,中斷連接的建立,并輸出提示信息以提示用戶當(dāng)前連接建立速度慢,可以在間隔一段時間后再重新建立。在網(wǎng)絡(luò)狀況不好的情況下,例如發(fā)生網(wǎng)絡(luò)擁堵時,連接池建立新的數(shù)據(jù)庫連接的時長會比較長,甚至?xí)霈F(xiàn)發(fā)送建立連接的請求后長時間內(nèi),仍然沒有成功建立新的連接的情況。此時,則可以中斷連接的建立,過一段時間后重新嘗試,實現(xiàn)對連接池的動態(tài)管理,提高連接池的管理效率,進而提高連接池的性能。
本發(fā)明還提出一種數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)。
參照圖3所示,為本發(fā)明數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)第一實施例的功能模塊示意圖。
在該實施例中,該數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)包括:
信息獲取模塊10,用于定時或者實時獲取連接池中的數(shù)據(jù)庫連接的運行信息,其中,所述運行信息包括獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù)中的一個或者多個;
可以理解的是,本發(fā)明提出的數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)適用于各種不同類型的連接池,例如:DBCP(Database connection pool,數(shù)據(jù)庫連接池)、C3PO連接池(一種開放源代碼的JDBC連接池)、proxool連接池等各種類型的數(shù)據(jù)庫連接池。
數(shù)據(jù)庫連接池主要負責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個;釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因為沒有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。
連接池在系統(tǒng)初始化的時候,將數(shù)據(jù)庫連接作為對象存儲在內(nèi)存中,當(dāng)用戶需要訪問數(shù)據(jù)庫時,并非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。使用完畢后,也并非將連接關(guān)閉,而是將連接放回連接池中,以供下一個連接請求訪問使用。而連接的建立、斷開都由連接池自身來管理,或者通過其自身的管理機制來管理。
這些數(shù)據(jù)庫連接的數(shù)量由連接池的配置參數(shù)制約,配置參數(shù)包括但不限于:最小連接數(shù)、最大連接數(shù)、最大空閑時間、連接的最大使用次數(shù)等等,其中,最大空閑時間是指大于最小連接數(shù)的數(shù)據(jù)庫連接處于空閑狀態(tài)的最長時間,當(dāng)超過該時間后,它會被釋放;最小連接數(shù)是指無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫連接數(shù)量限定了這個連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請求的連接數(shù)超過最大連接數(shù)量時,這些請求將被加入到等待隊列中。最小連接數(shù)與最大連接數(shù)相差較大時,最先的連接請求將會獲利,之后超過最小連接數(shù)的連接請求等價于建立一個新的數(shù)據(jù)庫連接。不過,這些大于最小連接數(shù)的數(shù)據(jù)庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復(fù)使用或是空閑超時后被釋放。
在連接池的運行過程中,信息獲取模塊10定時或者實時獲取連接池中的數(shù)據(jù)庫連接的運行信息,其中,運行信息包括但不限于:獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù)等。其中,獲取連接時長是指:連接池接收到應(yīng)用發(fā)送的連接獲取請求的時間點到分配一個連接池給該應(yīng)用的時間點之間的時長;連接占用時長是指:將一個數(shù)據(jù)庫連接分配給應(yīng)用的時間點到應(yīng)用使用完畢后將該連接歸還至連接池的時間點之間的時長;連接并發(fā)數(shù)是指連接池中當(dāng)前同時處于使用狀態(tài)的數(shù)據(jù)庫連接數(shù)量;空閑連接數(shù)是指連接池中當(dāng)前處于空閑狀態(tài)的數(shù)據(jù)庫連接的數(shù)量。
連接池調(diào)整模塊20,用于根據(jù)獲取到的所述運行信息調(diào)整所述連接池的配置參數(shù),其中,所述配置參數(shù)包括所述連接池的最大連接數(shù)和最小連接數(shù),或者,根據(jù)獲取到的所述運行信息調(diào)整所述連接池中的數(shù)據(jù)庫連接的連接狀態(tài)。
在獲取到上述運行信息后,連接池調(diào)整模塊20根據(jù)運行信息對連接池的配置參數(shù)進行動態(tài)調(diào)整,具體地,對連接池的最大連接數(shù),最小連接數(shù)或者最大空閑時間等參數(shù)進行調(diào)整。關(guān)于調(diào)整連接池的配置參數(shù),可以包括多種情況,例如,減小最小連接數(shù),增大最大連接數(shù),增大最小連接數(shù)或者較小最大連接數(shù)等。
作為一種實施方式,連接池調(diào)整模塊20還用于:當(dāng)所述連接池的并發(fā)連接數(shù)在預(yù)設(shè)時長內(nèi)持續(xù)小于所述連接池的最小連接數(shù)時,減小所述連接池的最小連接數(shù)。
如果連接池的并發(fā)連接數(shù)在一定時間內(nèi)持續(xù)小于連接池的最小連接數(shù),則說明當(dāng)前有一些數(shù)據(jù)庫連接是處于空閑狀態(tài)的,造成資源浪費,此時連接池調(diào)整模塊20可以將連接池的最小連接數(shù)減小,以便于將空閑的連接再歸還給數(shù)據(jù)庫,以使數(shù)據(jù)庫能夠分配至其他的應(yīng)用使用,避免資源因為閑置而造成浪費。
作為另一種實施方式,連接池調(diào)整模塊20還用于:當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,增大所述連接池的最大連接數(shù)。
獲取連接時長是連接池接收到應(yīng)用發(fā)送的連接獲取請求的時間點到分配一個連接池給該應(yīng)用的時間點之間的時長。連接池在接收到所述應(yīng)用的獲取數(shù)據(jù)庫連接請求時,判斷當(dāng)前的并發(fā)連接數(shù)是否小于最大連接數(shù),若是,則與數(shù)據(jù)庫建立新的連接,并將建立的新連接分配至所述應(yīng)用,若否,則將所述數(shù)據(jù)庫連接請求放入等待隊列中。因此,當(dāng)?shù)却犖橹械臄?shù)據(jù)庫連接請求較多時,會造成應(yīng)用的獲取連接時長較長,說明,此時應(yīng)用對于數(shù)據(jù)庫連接的需求量大,連接池中的數(shù)據(jù)庫連接數(shù)已經(jīng)不滿足應(yīng)用的使用需求,則連接池調(diào)整模塊20增大連接池的最大連接數(shù),允許連接池向數(shù)據(jù)庫申請更多的連接。其中,預(yù)設(shè)連接請求時間閾值可以根據(jù)應(yīng)用的數(shù)據(jù)量進行設(shè)置。
需要說明的是,本發(fā)明提出的數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng),同樣適用于對多應(yīng)用的管理,例如,數(shù)據(jù)庫同時為多個應(yīng)用提供連接,每個應(yīng)用有一個連接池,按照應(yīng)用的使用情況,將數(shù)據(jù)庫中的連接分配給多個不同的應(yīng)用。
進一步地,根據(jù)數(shù)據(jù)庫當(dāng)前的連接情況判斷能夠增大最大連接數(shù),如數(shù)據(jù)庫當(dāng)前有空閑連接時,增大連接池的最大連接數(shù),具體地,連接池調(diào)整模塊20包括連接判斷單元,用于當(dāng)所述獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,判斷數(shù)據(jù)庫當(dāng)前是否有空閑連接;連接池調(diào)整單元,用于若所述數(shù)據(jù)庫當(dāng)前有空閑連接,則獲取空閑連接數(shù),并根據(jù)所述空閑連接數(shù)增大所述連接池的最大連接數(shù)。
對于一個連接池來說,能否增大最大連接數(shù)需要考慮為其提供連接的數(shù)據(jù)庫是否有空閑連接,因此,在獲取連接時長大于預(yù)設(shè)連接請求時間閾值時,連接判斷單元先判斷數(shù)據(jù)庫當(dāng)前是否有空閑連接,若有空閑連接,則連接池調(diào)整單元獲取空閑連接數(shù),并根據(jù)空閑連接數(shù)增大連接池的最大連接數(shù),增大的連接數(shù)量可以小于或者等于數(shù)據(jù)庫當(dāng)前的空閑連接的數(shù)量。具體地,在判斷數(shù)據(jù)庫當(dāng)前是否有空閑連接時,可以向數(shù)據(jù)庫發(fā)送增大最大連接數(shù)的請求,數(shù)據(jù)庫在接收到請求時,可以向數(shù)據(jù)庫發(fā)送反饋信息,以說明是否有空閑連接以及空閑連接的數(shù)量。
本實施例提出的數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng),對數(shù)據(jù)庫連接池中的數(shù)據(jù)庫連接的運行信息進行定時或者實時地采集,運行信息包括獲取連接時長、連接占用時長、連接并發(fā)數(shù)以及空閑連接數(shù),也就說,在數(shù)據(jù)庫連接池處于運行狀態(tài)時,采集各個運行信息,對連接池的運行情況進行實時監(jiān)控,進而根據(jù)獲取到的運行信息對連接池的配置參數(shù)進行調(diào)整,例如連接池的最大連接數(shù)、最小連接數(shù)等,或者,根據(jù)獲取到的運行信息對連接池的數(shù)據(jù)庫的連接狀態(tài)進行調(diào)整,通過這種方式,能夠?qū)崟r地根據(jù)連接池中數(shù)據(jù)庫連接的使用情況對連接池的配置參數(shù)進行動態(tài)管理,能夠避免因為最小連接數(shù)過大,而導(dǎo)致數(shù)據(jù)庫連接長時間處于空閑狀態(tài)造成資源浪費,或者避免因為最大連接數(shù)不能滿足應(yīng)用當(dāng)前的需求而造成等待過久的問題,總之,本發(fā)明提出的系統(tǒng)能夠提高對連接池進行動態(tài)調(diào)整,提高其性能,進而提高訪問數(shù)據(jù)庫的性能。
基于第一實施例提出本發(fā)明數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)的第二實施例。參照圖4所示,在本實施例中,連接池調(diào)整模塊20還用于:當(dāng)所述連接池中有數(shù)據(jù)庫連接的所述連接占用時長大于預(yù)設(shè)連接占用時間閾值時,關(guān)閉占用時長大于所述預(yù)設(shè)連接占用時間閾值的所述數(shù)據(jù)庫連接;
該數(shù)據(jù)庫連接池的動態(tài)管理系統(tǒng)還包括:
信息輸出模塊30,用于輸出所述連接池發(fā)生連接泄漏的通知信息。
在本實施例中,在檢測到連接池中有數(shù)據(jù)庫連接的占用時長過長,即大于預(yù)設(shè)連接占用時間閾值時,說明應(yīng)用在獲取到數(shù)據(jù)庫連接后,長時間未將其歸還至連接池,判定發(fā)生了連接泄漏的情況,此時,連接池調(diào)整模塊20將該被占用的時長過長的數(shù)據(jù)庫連接關(guān)閉,實現(xiàn)對連接池的動態(tài)管理,提高連接池的性能;同時,信息輸出模塊30向用戶輸出通知信息,提示用戶連接池發(fā)生了連接泄漏,以便于用戶及時處理,關(guān)于輸出通知信息的方式,可以向綁定的郵箱發(fā)送郵件、或者向綁定的手機等移動終端發(fā)送通知信息等。
或者,作為一種實施方式,運行信息還包括建立連接時長,當(dāng)所述建立連接時長大于預(yù)設(shè)建立連接時間閾值時,連接池調(diào)整模塊20中斷連接的建立,信息輸出模塊30輸出提示信息以提示用戶當(dāng)前連接建立速度慢,可以在間隔一段時間后再重新建立。在網(wǎng)絡(luò)狀況不好的情況下,例如發(fā)生網(wǎng)絡(luò)擁堵時,連接池建立新的數(shù)據(jù)庫連接的時長會比較長,甚至?xí)霈F(xiàn)發(fā)送建立連接的請求后長時間內(nèi),仍然沒有成功建立新的連接的情況。此時,則可以中斷連接的建立,過一段時間后重新嘗試,實現(xiàn)對連接池的動態(tài)管理,提高連接池的管理效率,進而提高連接池的性能。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。