用于數(shù)據(jù)庫連接池的資源分配方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請涉及數(shù)據(jù)庫領(lǐng)域,具體而言,涉及一種用于數(shù)據(jù)庫連接池的資源分配方法 和裝置。
【背景技術(shù)】
[0002] 在分布式環(huán)境下,應(yīng)用系統(tǒng)需要對外提供多種服務(wù),這些服務(wù)大多需要訪問數(shù)據(jù) 庫。在相關(guān)技術(shù)中,為了使應(yīng)用系統(tǒng)能夠快速訪問數(shù)據(jù)庫中的數(shù)據(jù),通常采用數(shù)據(jù)庫連接池 機(jī)制來實(shí)現(xiàn)應(yīng)用系統(tǒng)和數(shù)據(jù)庫之間的連接:當(dāng)應(yīng)用系統(tǒng)需要與數(shù)據(jù)庫通信時(shí),需要先檢查 數(shù)據(jù)庫連接池中是否有可用的數(shù)據(jù)庫連接(即,空閑數(shù)據(jù)庫連接);如果該數(shù)據(jù)庫連接池中 有可用的數(shù)據(jù)庫連接,則直接使用可用的數(shù)據(jù)庫連接來實(shí)現(xiàn)上述通信;如果該數(shù)據(jù)庫連接 池中沒有可用的數(shù)據(jù)庫連接,則需要實(shí)時(shí)創(chuàng)建新的數(shù)據(jù)庫連接,并使用新創(chuàng)建的數(shù)據(jù)庫連 接來實(shí)現(xiàn)上述通信。
[0003] 雖然上述數(shù)據(jù)庫連接池機(jī)制避免了建立大量數(shù)據(jù)庫連接所花費(fèi)的時(shí)間代價(jià),提升 了應(yīng)用系統(tǒng)的性能,但是該機(jī)制缺乏對sql (Structured Query Language,結(jié)構(gòu)化查詢語 言)運(yùn)行狀況的監(jiān)控管理。這樣,每當(dāng)應(yīng)用系統(tǒng)需要訪問數(shù)據(jù)庫時(shí),數(shù)據(jù)庫都會直接給予 連接,導(dǎo)致某些由于運(yùn)維故障或者數(shù)據(jù)不斷積累等原因而運(yùn)行越來越慢的sql在獲得連接 后,難以釋放連接,從進(jìn)而導(dǎo)致數(shù)據(jù)庫連接池中的資源耗盡,使得其他需要訪問數(shù)據(jù)庫的應(yīng) 用系統(tǒng)無法正常對外提供服務(wù)。
[0004] 針對相關(guān)技術(shù)中數(shù)據(jù)庫連接池機(jī)制在執(zhí)行數(shù)據(jù)庫連接分配時(shí),容易導(dǎo)致數(shù)據(jù)庫連 接池中的資源耗盡的問題,目前尚未提出有效的解決方案。
[0005] 申請內(nèi)容
[0006] 本申請的主要目的在于提供一種用于數(shù)據(jù)庫連接池的資源分配方法和裝置,以解 決相關(guān)技術(shù)中數(shù)據(jù)庫連接池機(jī)制在執(zhí)行數(shù)據(jù)庫連接分配時(shí),容易導(dǎo)致數(shù)據(jù)庫連接池中的資 源耗盡的問題。
[0007] 為了實(shí)現(xiàn)上述目的,根據(jù)本申請的一個(gè)方面,提供了一種用于數(shù)據(jù)庫連接池的資 源分配方法,該方法包括:接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求;以及根據(jù)所述數(shù)據(jù)庫訪問 請求的歷史執(zhí)行結(jié)果判斷是否允許將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶 端。
[0008] 進(jìn)一步地,根據(jù)所述數(shù)據(jù)庫訪問請求的歷史執(zhí)行結(jié)果判斷是否允許將數(shù)據(jù)庫連接 池中空閑的數(shù)據(jù)庫連接分配給所述客戶端包括:從所述歷史執(zhí)行結(jié)果中獲取已執(zhí)行的所述 數(shù)據(jù)庫訪問請求的執(zhí)行結(jié)果屬性;以及根據(jù)所述執(zhí)行結(jié)果屬性判斷是否允許將數(shù)據(jù)庫連接 池中空閑的數(shù)據(jù)庫連接分配給所述客戶端。
[0009] 進(jìn)一步地,所述執(zhí)行結(jié)果屬性包括:執(zhí)行時(shí)間,根據(jù)所述執(zhí)行結(jié)果屬性判斷是否允 許將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端包括:從已執(zhí)行的所述數(shù)據(jù)庫訪 問請求中獲取執(zhí)行時(shí)間超過第一預(yù)定時(shí)間閾值的數(shù)據(jù)庫訪問請求的第一個(gè)數(shù);以及若所述 第一個(gè)數(shù)小于第一數(shù)量閾值,則判斷出允許將所述數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配 給所述客戶端。
[0010] 進(jìn)一步地,所述執(zhí)行結(jié)果屬性包括:出錯率,根據(jù)所述執(zhí)行結(jié)果屬性判斷是否允許 將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端包括:從已執(zhí)行的所述數(shù)據(jù)庫訪問 請求中獲取出現(xiàn)執(zhí)行錯誤的數(shù)據(jù)庫訪問請求的第一比例;以及若所述第一比例小于第一比 例閾值,則判斷出允許將所述數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端。
[0011] 進(jìn)一步地,所述執(zhí)行結(jié)果屬性包括:執(zhí)行時(shí)間和出錯率,根據(jù)所述執(zhí)行結(jié)果屬性判 斷是否允許將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端包括:從已執(zhí)行的所述 數(shù)據(jù)庫訪問請求中獲取執(zhí)行時(shí)間超過第一預(yù)定時(shí)間閾值的數(shù)據(jù)庫訪問請求的第一個(gè)數(shù)、且 從已執(zhí)行的所述數(shù)據(jù)庫訪問請求中獲取出現(xiàn)執(zhí)行錯誤的數(shù)據(jù)庫訪問請求的第一比例;以及 若所述第一個(gè)數(shù)小于第一數(shù)量閾值、且所述第一比例小于第一比例閾值,則判斷出允許將 所述數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端。
[0012] 進(jìn)一步地,在判斷出允許將所述數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客 戶端之后,所述資源分配方法還包括:創(chuàng)建數(shù)據(jù)庫訪問請求白名單;以及將允許將所述數(shù) 據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端的數(shù)據(jù)庫訪問請求存儲至所述數(shù)據(jù)庫 訪問請求白名單中。
[0013] 進(jìn)一步地,所述執(zhí)行結(jié)果屬性包括:執(zhí)行時(shí)間,根據(jù)所述執(zhí)行結(jié)果屬性判斷是否允 許將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端包括:從已執(zhí)行的所述數(shù)據(jù)庫訪 問請求中獲取執(zhí)行時(shí)間超過第二預(yù)定時(shí)間閾值的數(shù)據(jù)庫訪問請求的第二個(gè)數(shù);判斷已執(zhí)行 的所述數(shù)據(jù)庫訪問請求中由所述客戶端發(fā)送的所述數(shù)據(jù)庫訪問請求的執(zhí)行結(jié)果是否滿足 預(yù)定條件;以及若所述第二個(gè)數(shù)小于第二數(shù)量閾值、且所述執(zhí)行結(jié)果滿足所述預(yù)定條件,則 判斷出允許將所述數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端。
[0014] 進(jìn)一步地,判斷已執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述客戶端發(fā)送的所述數(shù)據(jù)庫 訪問請求的執(zhí)行結(jié)果是否滿足預(yù)定條件包括:從已執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述客 戶端發(fā)送的所述數(shù)據(jù)庫訪問請求中獲取執(zhí)行時(shí)間超過第三預(yù)定時(shí)間閾值的數(shù)據(jù)庫訪問請 求的第三個(gè)數(shù);若所述第三個(gè)數(shù)小于第三數(shù)量閾值,則判斷出所述已執(zhí)行的所述數(shù)據(jù)庫訪 問請求中由所述客戶端發(fā)送的所述數(shù)據(jù)庫訪問請求的執(zhí)行結(jié)果滿足所述預(yù)定條件。
[0015] 進(jìn)一步地,所述執(zhí)行結(jié)果屬性包括:出錯率,根據(jù)所述執(zhí)行結(jié)果屬性判斷是否允許 將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端包括:從已執(zhí)行的所述數(shù)據(jù)庫訪問 請求中獲取出現(xiàn)執(zhí)行錯誤的數(shù)據(jù)庫訪問請求的第二比例;判斷已執(zhí)行的所述數(shù)據(jù)庫訪問請 求中由所述客戶端發(fā)送的所述數(shù)據(jù)庫訪問請求的執(zhí)行結(jié)果是否滿足預(yù)定條件;以及若所述 第二比例小于第二比例閾值、且所述執(zhí)行結(jié)果滿足所述預(yù)定條件,則判斷出允許將所述數(shù) 據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端。
[0016] 進(jìn)一步地,判斷已執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述客戶端發(fā)送的所述數(shù)據(jù)庫 訪問請求的執(zhí)行結(jié)果是否滿足預(yù)定條件包括:從已執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述客 戶端發(fā)送的所述數(shù)據(jù)庫訪問請求中獲取出現(xiàn)執(zhí)行錯誤的數(shù)據(jù)庫訪問請求的第三比例;以及 若所述第三比例小于第三比例閾值,則判斷出所述已執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述 客戶端發(fā)送的所述數(shù)據(jù)庫訪問請求的執(zhí)行結(jié)果滿足所述預(yù)定條件。
[0017] 進(jìn)一步地,所述執(zhí)行結(jié)果屬性包括:執(zhí)行時(shí)間和出錯率,根據(jù)所述執(zhí)行結(jié)果屬性判 斷是否允許將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端包括:從已執(zhí)行的所述 數(shù)據(jù)庫訪問請求中獲取執(zhí)行時(shí)間超過第二預(yù)定時(shí)間閾值的數(shù)據(jù)庫訪問請求的第二個(gè)數(shù);從 已執(zhí)行的所述數(shù)據(jù)庫訪問請求中獲取出現(xiàn)執(zhí)行錯誤的數(shù)據(jù)庫訪問請求的第二比例;判斷已 執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述客戶端發(fā)送的所述數(shù)據(jù)庫訪問請求的執(zhí)行結(jié)果是否 滿足預(yù)定條件;以及若所述第二個(gè)數(shù)小于第二數(shù)量閾值、且所述比例小于第二比例閾值以 及所述執(zhí)行結(jié)果滿足所述預(yù)定條件,則判斷出允許將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分 配給所述客戶端。
[0018] 進(jìn)一步地,判斷已執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述客戶端發(fā)送的所述數(shù)據(jù)庫 訪問請求的執(zhí)行結(jié)果是否滿足預(yù)定條件包括:從已執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述客 戶端發(fā)送的所述數(shù)據(jù)庫訪問請求中獲取執(zhí)行時(shí)間超過第三預(yù)定時(shí)間閾值的數(shù)據(jù)庫訪問請 求的第三個(gè)數(shù);從已執(zhí)行的所述數(shù)據(jù)庫訪問請求中由所述客戶端發(fā)送的所述數(shù)據(jù)庫訪問請 求中獲取出現(xiàn)執(zhí)行錯誤的數(shù)據(jù)庫訪問請求的第三比例;以及若所述第三個(gè)數(shù)小于第三數(shù)量 閾值、且所述第三比例小于第三比例閾值,則判斷出所述已執(zhí)行的所述數(shù)據(jù)庫訪問請求中 由所述客戶端發(fā)送的所述數(shù)據(jù)庫訪問請求的執(zhí)行結(jié)果滿足所述預(yù)定條件。
[0019] 進(jìn)一步地,在判斷出允許將所述數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客 戶端之后,所述資源分配方法還包括:創(chuàng)建客戶端白名單;以及將被允許分配所述數(shù)據(jù)庫 連接池中空閑的數(shù)據(jù)庫連接的客戶端存儲至客戶端白名單中。
[0020] 為了實(shí)現(xiàn)上述目的,根據(jù)本申請的另一方面,提供了一種用于數(shù)據(jù)庫連接池的資 源分配裝置,該裝置包括:接收單元,用于接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求;以及判斷單 元,用于根據(jù)所述數(shù)據(jù)庫訪問請求的歷史執(zhí)行結(jié)果判斷是否允許將數(shù)據(jù)庫連接池中空閑的 數(shù)據(jù)庫連接分配給所述客戶端。
[0021] 進(jìn)一步地,所述判斷單元包括:獲取模塊,用于從所述歷史執(zhí)行結(jié)果中獲取已執(zhí)行 的所述數(shù)據(jù)庫訪問請求的執(zhí)行結(jié)果屬性;以及判斷模塊,用于根據(jù)所述執(zhí)行結(jié)果屬性判斷 是否允許將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給所述客戶端。
[0022] 通過本申請,采用接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求;根據(jù)數(shù)據(jù)庫訪問請求的歷 史執(zhí)行結(jié)果判斷是否允許將數(shù)據(jù)庫連接池中空閑的數(shù)據(jù)庫連接分配給客戶端,由于可以通 過歷史執(zhí)行結(jié)果對數(shù)據(jù)庫訪問請求進(jìn)行篩選,僅僅將空閑的數(shù)據(jù)庫連接分配給歷史表現(xiàn)良 好的數(shù)據(jù)庫訪問請求,而不對歷史表現(xiàn)差的數(shù)據(jù)庫訪問請求分配數(shù)據(jù)庫連接,因此可以防 止歷史表現(xiàn)差的數(shù)據(jù)庫訪問請求占用數(shù)據(jù)庫連接,節(jié)約數(shù)據(jù)庫連接資源,達(dá)到了防止數(shù)據(jù) 庫連接池中的資源耗盡的效果。
【附圖說明】
[0023] 構(gòu)成本申請的一部分的附圖用來提供對本申請的進(jìn)一步理解,本申請的示意性實(shí) 施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
[0024] 圖1是根據(jù)本申請實(shí)施例的用于數(shù)據(jù)庫連接池的資源分配方法的流程圖;
[0025] 圖2是根據(jù)本申請實(shí)施例的動態(tài)分配數(shù)據(jù)庫連接池中的資源的系統(tǒng)架構(gòu)圖;以及
[0026] 圖3是根據(jù)本申請實(shí)施例的用于數(shù)據(jù)庫連接池的資源分配裝置的示意圖。
【具體實(shí)施方式】
[0027] 需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相 互組合。下面將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本申請。
[0028] 為了使本領(lǐng)域的技術(shù)人員更好的理解本申請方案,下面將結(jié)合本申請實(shí)施例中的 附圖,對本申請實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是 本申請一部分的實(shí)施例,而不是全部的實(shí)施例。基于本申請中的實(shí)施例,在本領(lǐng)域普通技 術(shù)人員沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請的保護(hù)范 圍。
[0029] 需要說明的是,本申請的說明書和權(quán)利要求書及上述附圖中的術(shù)語"第一"、"第 二"等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用 的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請的實(shí)施例能夠以除了在這里圖示或 描述的那些以外的順序?qū)嵤?。此外,術(shù)語"包括"和"具有"以及他們的任何變形,意圖在于 覆蓋不排他的包含。
[0030] 根據(jù)本申請的實(shí)施例,提供了一種用于數(shù)據(jù)庫連接池的資源分配方法,該用于數(shù) 據(jù)庫連接池的資源分配方法可以運(yùn)行在計(jì)算機(jī)處理設(shè)備上。需要說明的是,在本申請實(shí)施 例中,附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行, 并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行 所示出或描述的步驟。
[0031] 在詳細(xì)闡述本申請之前,先對本申請中引用的以下名詞進(jìn)行解釋:
[0032] 數(shù)據(jù)庫:用來永久或監(jiān)時(shí)存放業(yè)務(wù)數(shù)據(jù)、系統(tǒng)數(shù)據(jù)的軟件系統(tǒng)及其數(shù)據(jù),包括但不 僅限于 Oracle、MySQL、SQL Server、Tair、Ocea