国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      數(shù)據(jù)庫(kù)游標(biāo)的控制方法與數(shù)據(jù)庫(kù)系統(tǒng)與流程

      文檔序號(hào):11230653閱讀:523來(lái)源:國(guó)知局
      數(shù)據(jù)庫(kù)游標(biāo)的控制方法與數(shù)據(jù)庫(kù)系統(tǒng)與流程

      本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫(kù)游標(biāo)的控制方法與數(shù)據(jù)庫(kù)系統(tǒng)。



      背景技術(shù):

      在數(shù)據(jù)庫(kù)系統(tǒng)中,經(jīng)常存在無(wú)法回收的內(nèi)存資源或正在使用的內(nèi)存資源過多,造成系統(tǒng)中的可用內(nèi)存越來(lái)越少,導(dǎo)致系統(tǒng)運(yùn)行不流暢。

      在數(shù)據(jù)庫(kù)系統(tǒng)中通常會(huì)應(yīng)用到游標(biāo),當(dāng)游標(biāo)被引用后沒有及時(shí)關(guān)閉,容易增大內(nèi)存溢出機(jī)率,這樣會(huì)導(dǎo)致系統(tǒng)運(yùn)行越來(lái)越慢,直到宕機(jī)。目前內(nèi)存泄露工具一般采用內(nèi)存檢查工具分析出系統(tǒng)的靜態(tài)內(nèi)存錯(cuò)誤,但無(wú)法實(shí)時(shí)監(jiān)測(cè)并關(guān)閉游標(biāo),這將導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)在出現(xiàn)內(nèi)存資源不足的情況時(shí),系統(tǒng)會(huì)因缺少內(nèi)存運(yùn)行資源而出現(xiàn)卡頓、宕機(jī)甚至系統(tǒng)崩潰等問題。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明的主要目的在于提供一種數(shù)據(jù)庫(kù)游標(biāo)的控制方法與數(shù)據(jù)庫(kù)系統(tǒng),旨在解決數(shù)據(jù)庫(kù)系統(tǒng)因游標(biāo)未關(guān)閉造成系統(tǒng)內(nèi)存資源不足,導(dǎo)致系統(tǒng)無(wú)法正常運(yùn)行的技術(shù)問題。

      為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供一種數(shù)據(jù)庫(kù)游標(biāo)的控制方法,所述游標(biāo)設(shè)置有游標(biāo)級(jí)別,其中包括低級(jí)別游標(biāo),所述數(shù)據(jù)庫(kù)游標(biāo)的控制方法包括:

      當(dāng)檢測(cè)到數(shù)據(jù)庫(kù)激活游標(biāo)時(shí),記錄激活的游標(biāo)及其游標(biāo)級(jí)別,以獲得所有已激活游標(biāo)的排序列表;

      當(dāng)檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源。

      可選地,所述當(dāng)檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源的步驟之后還包括:

      統(tǒng)計(jì)當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的閑置內(nèi)存資源,以獲得對(duì)應(yīng)的統(tǒng)計(jì)參數(shù);

      當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放排序列表中所有已激活游標(biāo)占用的內(nèi)存資源。

      可選地,所述當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放排序列表中所有已激活游標(biāo)占用的內(nèi)存資源的步驟之后還包括:

      存儲(chǔ)本次釋放內(nèi)存資源的所有事件信息,以作為內(nèi)存資源優(yōu)化的依據(jù)。

      可選地,所述當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放所述排序列表中所有已激活游標(biāo)占用的內(nèi)存資源的步驟包括:

      當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),顯示當(dāng)前排序列表中所有的已激活游標(biāo),以供用戶選擇;

      基于用戶選擇的預(yù)選游標(biāo),釋放預(yù)選游標(biāo)占用的內(nèi)存資源。

      可選地,所述當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放所述排序列表中所有已激活游標(biāo)占用的內(nèi)存資源的步驟包括:

      當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),獲取排序列表中所有已激活游標(biāo)的內(nèi)存資源的釋放權(quán)限;

      當(dāng)檢測(cè)到釋放權(quán)限未能成功釋放所有已激活游標(biāo)占用的內(nèi)存資源時(shí),強(qiáng)制獲取數(shù)據(jù)庫(kù)系統(tǒng)的最高權(quán)限;

      基于最高權(quán)限釋放所有已激活游標(biāo)占用的內(nèi)存資源。

      此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種數(shù)據(jù)庫(kù)系統(tǒng),所述數(shù)據(jù)庫(kù)系統(tǒng)中設(shè)置有游標(biāo),且所述游標(biāo)設(shè)置有游標(biāo)級(jí)別,其中包括低級(jí)別游標(biāo),所述數(shù)據(jù)庫(kù)系統(tǒng)包括:

      記錄模塊,用于當(dāng)檢測(cè)到數(shù)據(jù)庫(kù)激活游標(biāo)時(shí),記錄激活的游標(biāo)及其游標(biāo)級(jí)別,以獲得所有已激活游標(biāo)的排序列表;

      第一釋放模塊,用于當(dāng)檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源。

      可選地,所述數(shù)據(jù)庫(kù)系統(tǒng)還包括:

      統(tǒng)計(jì)模塊,用于統(tǒng)計(jì)當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的閑置內(nèi)存資源,以獲得對(duì)應(yīng)的統(tǒng)計(jì)參數(shù);

      第二釋放模塊,用于當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放排序列表中所有已激活游標(biāo)占用的內(nèi)存資源。

      可選地,所述數(shù)據(jù)庫(kù)系統(tǒng)還包括:

      存儲(chǔ)模塊,用于存儲(chǔ)本次釋放內(nèi)存資源的所有事件信息,以作為內(nèi)存資源優(yōu)化的依據(jù)。

      可選地,所述第二釋放模塊包括:

      顯示單元,用于當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),顯示當(dāng)前排序列表中所有的已激活游標(biāo),以供用戶選擇;

      第一釋放單元,用于基于用戶選擇的預(yù)選游標(biāo),釋放預(yù)選游標(biāo)占用的內(nèi)存資源。

      可選地,所述第二釋放模塊包括:

      獲取單元,用于當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),獲取排序列表中所有已激活游標(biāo)的內(nèi)存資源的釋放權(quán)限;

      權(quán)限單元,用于當(dāng)檢測(cè)到釋放權(quán)限未能成功釋放所有已激活游標(biāo)占用的內(nèi)存資源時(shí),強(qiáng)制獲取數(shù)據(jù)庫(kù)系統(tǒng)的最高權(quán)限;

      第二釋放單元,用于基于最高權(quán)限釋放所有已激活游標(biāo)占用的內(nèi)存資源。

      本發(fā)明的技術(shù)方案中,當(dāng)檢測(cè)到數(shù)據(jù)庫(kù)激活游標(biāo)時(shí),記錄激活的游標(biāo)及其游標(biāo)級(jí)別,以獲得所有已激活游標(biāo)的排序列表;當(dāng)檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源。本發(fā)明采用實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)庫(kù)游標(biāo)使用狀態(tài)的方式,在內(nèi)存資源不足時(shí),根據(jù)游標(biāo)級(jí)別關(guān)閉游標(biāo)進(jìn)行資源釋放,避免游標(biāo)本身占用過多的內(nèi)存資源而導(dǎo)致系統(tǒng)由于沒有足夠的內(nèi)存癱瘓、卡頓、死機(jī)等問題,有效解決數(shù)據(jù)庫(kù)游標(biāo)導(dǎo)致的內(nèi)存泄露。

      附圖說(shuō)明

      圖1為本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第一實(shí)施例的流程示意圖;

      圖2為本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第二實(shí)施例的流程示意圖;

      圖3為本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第三實(shí)施例的流程示意圖;

      圖4為本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第四實(shí)施例中所述當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放所述排序列表中所有已激活游標(biāo)占用的內(nèi)存資源的步驟的步驟的細(xì)化流程示意圖;

      圖5為本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第五實(shí)施例中所述當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放所述排序列表中所有已激活游標(biāo)占用的內(nèi)存資源的步驟的步驟的細(xì)化流程示意圖;

      圖6是本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第一實(shí)施例的模塊示意圖;

      圖7為本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第二實(shí)施例的模塊示意圖;

      圖8為本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第三實(shí)施例的模塊示意圖;

      圖9為本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第四實(shí)施例中第二釋放模塊的細(xì)化模塊示意圖;

      圖10為本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第五實(shí)施例中第二釋放模塊的細(xì)化模塊示意圖。

      本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參考附圖做進(jìn)一步說(shuō)明。

      具體實(shí)施方式

      應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

      現(xiàn)在將參考附圖描述實(shí)現(xiàn)本發(fā)明各個(gè)實(shí)施例的數(shù)據(jù)庫(kù)系統(tǒng)。在后續(xù)的描述中,使用用于表示元件的諸如“模塊”、“部件”或“單元”的后綴僅為了有利于本發(fā)明的說(shuō)明,其本身并沒有特定的意義。因此,“模塊”與“部件”可以混合地使用。

      所述游標(biāo)是數(shù)據(jù)庫(kù)系統(tǒng)為用戶開設(shè)的一個(gè)數(shù)據(jù)緩沖區(qū),存放數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句的執(zhí)行結(jié)果。在數(shù)據(jù)庫(kù)系統(tǒng)中,游標(biāo)可以通過打開或關(guān)閉實(shí)現(xiàn)對(duì)象引用。通過游標(biāo)的使用,數(shù)據(jù)庫(kù)系統(tǒng)可以方便得獲取到游標(biāo)所映射到的具體的數(shù)據(jù)記錄。而數(shù)據(jù)庫(kù)系統(tǒng)在實(shí)際使用中,結(jié)束對(duì)游標(biāo)的使用之后,即使該游標(biāo)不再被調(diào)用,在系統(tǒng)異步處理的過程中,往往會(huì)錯(cuò)漏過某些游標(biāo),使其不被調(diào)用,卻保持激活狀態(tài),占用一定的系統(tǒng)內(nèi)存資源,影響到數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行。

      參考圖1,本發(fā)明提供一種數(shù)據(jù)庫(kù)游標(biāo)的控制方法,該數(shù)據(jù)庫(kù)游標(biāo)的控制方法主要應(yīng)用于數(shù)據(jù)庫(kù)系統(tǒng)上,在數(shù)據(jù)庫(kù)游標(biāo)的控制方法第一實(shí)施例中,所述游標(biāo)設(shè)置有游標(biāo)級(jí)別,其中包括低級(jí)別游標(biāo),所述數(shù)據(jù)庫(kù)游標(biāo)的控制方法包括:

      步驟s10,當(dāng)檢測(cè)到數(shù)據(jù)庫(kù)激活游標(biāo)時(shí),記錄激活的游標(biāo)及其游標(biāo)級(jí)別,以獲得所有已激活游標(biāo)的排序列表;

      數(shù)據(jù)庫(kù)系統(tǒng)在正常運(yùn)行當(dāng)中,會(huì)動(dòng)態(tài)調(diào)用所需的游標(biāo),每當(dāng)數(shù)據(jù)庫(kù)系統(tǒng)激活游標(biāo)時(shí),記錄被激活的數(shù)據(jù)庫(kù)游標(biāo),記錄其游標(biāo)級(jí)別,獲得所有已激活游標(biāo)的排序列表。

      所述游標(biāo)級(jí)別,指的是游標(biāo)本身的存在級(jí)別,級(jí)別的高低意味著游標(biāo)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的功能應(yīng)用的影響程度。例如,a游標(biāo)屬于系統(tǒng)級(jí)游標(biāo),其功能效用的執(zhí)行對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行起到關(guān)鍵性的作用,那么a游標(biāo)即為高級(jí)別游標(biāo);而b游標(biāo)屬于普通游標(biāo),其功能效用的執(zhí)行對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行幾乎毫無(wú)影響,僅作為緩沖數(shù)據(jù)或臨時(shí)數(shù)據(jù)的媒介,可輕易再現(xiàn)且執(zhí)行成本低微,那么b游標(biāo)即為低級(jí)別游標(biāo)。

      一般而言,該列表用于保存所有激活的數(shù)據(jù)庫(kù)游標(biāo)對(duì)象集合。假設(shè)游標(biāo)的狀態(tài)發(fā)生改變,例如被釋放掉或發(fā)生異常等現(xiàn)象時(shí),數(shù)據(jù)庫(kù)系統(tǒng)會(huì)實(shí)時(shí)追蹤到該游標(biāo),并根據(jù)游標(biāo)本身的狀態(tài)實(shí)時(shí)更新或編輯排序列表,例如對(duì)排序列表中相應(yīng)的游標(biāo)進(jìn)行查詢、插入、刪除等操作,以此維護(hù)排序列表。

      步驟s20,當(dāng)檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源。

      為防止游標(biāo)占用數(shù)據(jù)庫(kù)系統(tǒng)中過多的內(nèi)存資源,需要實(shí)時(shí)監(jiān)測(cè)排序列表,例如在每隔一段預(yù)設(shè)時(shí)間間隔時(shí),檢測(cè)排序列表中所有游標(biāo)的活動(dòng)狀態(tài)。其中,預(yù)設(shè)時(shí)間間隔可以是默認(rèn)的預(yù)設(shè)數(shù)值,也可以是人為自定義生成的具體數(shù)據(jù),如5秒,10秒等等。游標(biāo)的不同狀態(tài)存在不同的使用意義,游標(biāo)被關(guān)閉時(shí)則不存在,如被激活,則可能處于被調(diào)用狀態(tài),也可能處于空載閑置狀態(tài)。

      在數(shù)據(jù)庫(kù)系統(tǒng)中,游標(biāo)可以被數(shù)據(jù)庫(kù)系統(tǒng)中的可用進(jìn)程或線程激活,并在激活之后為調(diào)用主體(可以是進(jìn)程或線程)所調(diào)取應(yīng)用。而當(dāng)游標(biāo)被激活后,處于激活狀態(tài)的游標(biāo)會(huì)被其調(diào)取并進(jìn)入應(yīng)用狀態(tài),此時(shí),該游標(biāo)會(huì)占據(jù)相當(dāng)程度的系統(tǒng)內(nèi)存資源,以作為游標(biāo)執(zhí)行其功能的運(yùn)行空間。而當(dāng)所述進(jìn)程或線程調(diào)用完畢時(shí),該游標(biāo)將不再作為功能調(diào)用的需求對(duì)象,此時(shí)的游標(biāo)處于閑置狀態(tài),若未將其關(guān)閉,該處于激活狀態(tài)的游標(biāo)依舊會(huì)占據(jù)部分內(nèi)存資源。

      以上所述的游標(biāo)狀態(tài)中,處于激活狀態(tài)的游標(biāo)會(huì)占據(jù)系統(tǒng)資源,但其中,處于激活且被調(diào)用狀態(tài)的游標(biāo)正在被使用,若強(qiáng)行中止,可能會(huì)影響到當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的正常執(zhí)行。而處于激活且閑置狀態(tài)的游標(biāo)當(dāng)前狀況下并未發(fā)揮其功能效用,卻消耗著系統(tǒng)本身的內(nèi)存資源,容易影響到數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行。因此需要對(duì)處于激活且閑置狀態(tài)的游標(biāo)進(jìn)行排查。在本實(shí)施例中,檢測(cè)排序列表中處于激活狀態(tài)且同時(shí)處于閑置狀態(tài)的游標(biāo),并且根據(jù)其游標(biāo)級(jí)別,只篩選出低級(jí)別游標(biāo)。因?yàn)榈图?jí)別游標(biāo)不會(huì)影響到數(shù)據(jù)庫(kù)系統(tǒng)本身的正常運(yùn)行。只有同時(shí)滿足已激活、閑置、低級(jí)別三種條件的游標(biāo),才是本實(shí)施例執(zhí)行定時(shí)檢測(cè)的篩選對(duì)象。

      在排序列表中若檢測(cè)到同時(shí)滿足已激活、閑置、低級(jí)別三大條件的游標(biāo),即為本實(shí)施例所要進(jìn)行資源釋放的檢測(cè)對(duì)象。由于此時(shí)該游標(biāo)處于閑置狀態(tài),故無(wú)需解除進(jìn)程或線程占用該游標(biāo)的操作,可直接釋放掉其在激活且閑置狀態(tài)下所占用的內(nèi)存資源。

      需要說(shuō)明的是,處于激活且閑置狀態(tài)下的低級(jí)別游標(biāo)雖然并未被調(diào)用以執(zhí)行其功能效用,但其本身依舊處于待調(diào)用狀態(tài),可隨時(shí)被調(diào)用主體(可以是進(jìn)程或線程)重新調(diào)用,因此該游標(biāo)對(duì)象依舊保持著與調(diào)用主體的數(shù)據(jù)接口以及實(shí)現(xiàn)其功能的其他對(duì)象的數(shù)據(jù)接口,而數(shù)據(jù)接口的實(shí)現(xiàn)本身就需要消耗占據(jù)系統(tǒng)內(nèi)存資源。這部分內(nèi)存資源在游標(biāo)閑置的情況下依舊被占用而未被釋放掉,將其釋放出來(lái)能夠最大化地利用系統(tǒng)內(nèi)存資源,提高內(nèi)存資源的應(yīng)用效率,防止內(nèi)存資源不足進(jìn)而出現(xiàn)系統(tǒng)運(yùn)行不流暢、卡頓等問題。

      優(yōu)選地,排序列表中保存了大量處于激活狀態(tài)的游標(biāo),當(dāng)?shù)图?jí)別游標(biāo)被釋放掉后,需要將該低級(jí)別游標(biāo)從列表中刪除。假設(shè)不將其進(jìn)行刪除,列表中既保存了激活狀態(tài)的游標(biāo)也保存了已被釋放掉的游標(biāo),而已被釋放掉的游標(biāo)在排序列表中并無(wú)用處。本實(shí)施例所要實(shí)現(xiàn)的是對(duì)激活狀態(tài)的游標(biāo)的清理釋放,對(duì)于已釋放掉的游標(biāo)并無(wú)處理機(jī)制。因此已釋放掉的游標(biāo)需要進(jìn)行清理刪除,以提高游標(biāo)檢測(cè)和查詢的工作效率。同時(shí),假設(shè)不刪除已釋放掉的游標(biāo),那么隨著數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行時(shí)間的增長(zhǎng),被釋放掉游標(biāo)的記錄會(huì)越來(lái)越多,即排序列表本身占用的內(nèi)存資源也會(huì)增加,從另一個(gè)方面后影響到數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行。

      本發(fā)明的技術(shù)方案中,當(dāng)檢測(cè)到數(shù)據(jù)庫(kù)激活游標(biāo)時(shí),記錄激活的游標(biāo)及其游標(biāo)級(jí)別,以獲得所有已激活游標(biāo)的排序列表;當(dāng)檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源。本發(fā)明采用實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)庫(kù)游標(biāo)使用狀態(tài)的方式,在內(nèi)存資源不足時(shí),根據(jù)游標(biāo)級(jí)別關(guān)閉游標(biāo)進(jìn)行資源釋放,避免游標(biāo)本身占用過多的內(nèi)存資源而導(dǎo)致系統(tǒng)由于沒有足夠的內(nèi)存癱瘓、卡頓、死機(jī)等問題,有效解決數(shù)據(jù)庫(kù)游標(biāo)導(dǎo)致的內(nèi)存泄露。本發(fā)明采用實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)庫(kù)游標(biāo)使用狀態(tài)的方式,在內(nèi)存資源不足時(shí),根據(jù)游標(biāo)級(jí)別關(guān)閉游標(biāo)進(jìn)行資源釋放,避免游標(biāo)本身占用過多的內(nèi)存資源而導(dǎo)致系統(tǒng)由于沒有足夠的內(nèi)存癱瘓、卡頓、死機(jī)等問題,有效解決數(shù)據(jù)庫(kù)游標(biāo)導(dǎo)致的內(nèi)存泄露。

      進(jìn)一步地,在本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第一實(shí)施例的基礎(chǔ)上,提出數(shù)據(jù)庫(kù)游標(biāo)的控制方法第二實(shí)施例,參考圖2,所述第二實(shí)施例與第一實(shí)施例之間的區(qū)別在于,所述當(dāng)檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源的步驟之后還包括:

      步驟s30,統(tǒng)計(jì)當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的閑置內(nèi)存資源,以獲得對(duì)應(yīng)的統(tǒng)計(jì)參數(shù);

      所述閑置內(nèi)存資源,指的是數(shù)據(jù)庫(kù)系統(tǒng)中,當(dāng)前處于閑置狀態(tài)的,并未被調(diào)用的內(nèi)存資源。一般而言,系統(tǒng)資源除了被調(diào)用的內(nèi)存資源,需要部分閑置的內(nèi)存資源作為后續(xù)功能執(zhí)行時(shí)被調(diào)用的預(yù)設(shè)資源。查詢獲取處于閑置狀態(tài)的內(nèi)存資源后,由于內(nèi)存資源的存儲(chǔ)方式不一定是連接的,可以存在分段分區(qū)形式的內(nèi)存資源,因此需要對(duì)所有處于閑置狀態(tài)的內(nèi)存資源進(jìn)行統(tǒng)計(jì),以獲得對(duì)應(yīng)的統(tǒng)計(jì)參數(shù)。所述統(tǒng)計(jì)參數(shù)指的是該處于閑置狀態(tài)的內(nèi)存資源的剩余容量。

      步驟s40,當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放排序列表中所有已激活游標(biāo)占用的內(nèi)存資源。

      在本實(shí)施例中,數(shù)據(jù)庫(kù)系統(tǒng)設(shè)置了一個(gè)預(yù)設(shè)閾值,該預(yù)設(shè)閾值作為統(tǒng)計(jì)參數(shù)的一個(gè)邊界參考數(shù)值,該數(shù)值指代的是數(shù)據(jù)庫(kù)系統(tǒng)中處于閑置狀態(tài)的內(nèi)存資源的剩余容量的最低門限值。當(dāng)統(tǒng)計(jì)所獲得的統(tǒng)計(jì)參數(shù)小于該預(yù)設(shè)閾值時(shí),則證明數(shù)據(jù)庫(kù)系統(tǒng)中作為緩沖的閑置狀態(tài)的內(nèi)存資源達(dá)到了最低門限值,若沒有新的閑置狀態(tài)的內(nèi)存資源作為補(bǔ)充,數(shù)據(jù)庫(kù)系統(tǒng)將處于時(shí)刻發(fā)生運(yùn)行不流暢甚至系統(tǒng)崩潰的邊緣。故,此時(shí)需要將排序列表中所有處于激活狀態(tài)的游標(biāo)所占用的內(nèi)存資源全部釋放掉,以擴(kuò)充當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的閑置內(nèi)存資源。當(dāng)然,所有的已激活游標(biāo)中可能存在高級(jí)別游標(biāo),為防止出現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)出現(xiàn)運(yùn)行卡頓甚至崩潰的極端情況,高級(jí)別游標(biāo)也需要一齊釋放。

      進(jìn)一步地,在本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第二實(shí)施例的基礎(chǔ)上,提出數(shù)據(jù)庫(kù)游標(biāo)的控制方法第三實(shí)施例,參考圖3,所述第三實(shí)施例與第二實(shí)施例之間的區(qū)別在于,所述當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放排序列表中所有已激活游標(biāo)占用的內(nèi)存資源的步驟之后還包括:

      步驟s50,存儲(chǔ)本次釋放內(nèi)存資源的所有事件信息,以作為內(nèi)存資源優(yōu)化的依據(jù)。

      本實(shí)施例中,系統(tǒng)資源釋放完成之后,閑置內(nèi)存資源的剩余容量會(huì)增加,由于其是已激活游標(biāo)釋放后獲得的。因此可以存儲(chǔ)本次作業(yè)中所有參與釋放內(nèi)存資源的事件信息(包含了被釋放掉的游標(biāo)對(duì)象,以及每個(gè)游標(biāo)對(duì)象是在哪個(gè)步驟被釋放掉,以及該游標(biāo)被釋放掉所釋放出來(lái)的內(nèi)存資源等信息)。這些信息反映了數(shù)據(jù)庫(kù)系統(tǒng)中游標(biāo)被激活但卻未及時(shí)關(guān)閉的技術(shù)問題,從側(cè)面暴露出數(shù)據(jù)庫(kù)系統(tǒng)的系統(tǒng)設(shè)計(jì)問題,如邏輯設(shè)計(jì)上的不合理,或工作原理實(shí)現(xiàn)上的不合理等。依據(jù)這些技術(shù)問題,系統(tǒng)操作人員或設(shè)計(jì)人員可以有針對(duì)性地分析處理,以消除系統(tǒng)游標(biāo)的不合理應(yīng)用,實(shí)現(xiàn)內(nèi)存資源的有效優(yōu)化。

      進(jìn)一步地,在本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第三實(shí)施例的基礎(chǔ)上,提出數(shù)據(jù)庫(kù)游標(biāo)的控制方法第四實(shí)施例,參考圖4,所述第四實(shí)施例與第三實(shí)施例之間的區(qū)別在于,所述當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放所述排序列表中所有已激活游標(biāo)占用的內(nèi)存資源的步驟包括:

      步驟s41,當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),顯示當(dāng)前排序列表中所有的已激活游標(biāo),以供用戶選擇;

      步驟s42,基于用戶選擇的預(yù)選游標(biāo),釋放預(yù)選游標(biāo)占用的內(nèi)存資源。

      當(dāng)統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),則需要釋放掉所有已激活游標(biāo)。但是,若用戶想針對(duì)性地釋放部分已激活游標(biāo),而將部分游標(biāo)保留執(zhí)行。例如,所有已激活游標(biāo)包括a,b,c三個(gè)游標(biāo),此時(shí)統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值,正常流程下需要釋放a,b,c三個(gè)游標(biāo),但用戶只想釋放掉b,c游標(biāo)而保留a游標(biāo)。此時(shí),數(shù)據(jù)庫(kù)系統(tǒng)可以提供一個(gè)顯示界面,顯示當(dāng)前排序列表中所有的已激活游標(biāo),并提供選擇已激活游標(biāo)的編輯方式,以供用戶選擇。用戶通過編輯,選擇出預(yù)選游標(biāo),作為真正執(zhí)行釋放功能的游標(biāo)對(duì)象。根據(jù)預(yù)選游標(biāo),數(shù)據(jù)庫(kù)系統(tǒng)將所述預(yù)選游標(biāo)占用的內(nèi)存資源釋放掉。

      進(jìn)一步地,在本發(fā)明數(shù)據(jù)庫(kù)游標(biāo)的控制方法第二實(shí)施例的基礎(chǔ)上,提出數(shù)據(jù)庫(kù)游標(biāo)的控制方法第五實(shí)施例,參考圖5,所述第五實(shí)施例與第二實(shí)施例之間的區(qū)別在于,所述當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放所述排序列表中所有已激活游標(biāo)占用的內(nèi)存資源的步驟包括:

      步驟s43,當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),獲取排序列表中所有已激活游標(biāo)的內(nèi)存資源的釋放權(quán)限;

      步驟s44,當(dāng)檢測(cè)到釋放權(quán)限未能成功釋放所有已激活游標(biāo)占用的內(nèi)存資源時(shí),強(qiáng)制獲取數(shù)據(jù)庫(kù)系統(tǒng)的最高權(quán)限;

      步驟s45,基于最高權(quán)限釋放所有已激活游標(biāo)占用的內(nèi)存資源。

      在數(shù)據(jù)庫(kù)系統(tǒng)中,要釋放游標(biāo)需要有一定的操作權(quán)限,釋放權(quán)限的獲取可能基于當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)賬戶。在現(xiàn)實(shí)場(chǎng)景中,可能會(huì)出現(xiàn)無(wú)法釋放某些游標(biāo)的現(xiàn)象。其中,可能存在游標(biāo)處理異常,或游標(biāo)處于保護(hù)狀態(tài)中等原因。此時(shí)需要獲取到具體的游標(biāo)釋放權(quán)限,并基于釋放權(quán)限進(jìn)行釋放操作。但是,當(dāng)權(quán)限獲取請(qǐng)求無(wú)法獲取到已激活游標(biāo)的釋放權(quán)限時(shí),則證明以當(dāng)前的操作權(quán)限,無(wú)法完成已激活游標(biāo)的釋放操作。此時(shí)可強(qiáng)制獲取到數(shù)據(jù)庫(kù)系統(tǒng)的最高權(quán)限。而最高權(quán)限則意味著當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的一切操作步驟皆可以無(wú)礙執(zhí)行。同樣的道理,擁有最高權(quán)限意味著能夠無(wú)礙釋放所有已激活有歐標(biāo)的內(nèi)存資源?;谠撟罡邫?quán)限,數(shù)據(jù)庫(kù)系統(tǒng)能夠正常執(zhí)行所有已激活游標(biāo)所占用的內(nèi)存資源。

      當(dāng)然,本實(shí)施例與第四實(shí)施例可相輔相成,獲取系統(tǒng)最高權(quán)限以釋放游標(biāo)占用的內(nèi)存資源的實(shí)施例與用戶自定義選擇所要釋放的游標(biāo)的實(shí)施例互不矛盾,二者可相互結(jié)合,以形成本發(fā)明不同實(shí)施例解決系統(tǒng)內(nèi)存資源不足的問題的優(yōu)選技術(shù)方案。

      參考圖6,本發(fā)明還提供一種數(shù)據(jù)庫(kù)系統(tǒng),在數(shù)據(jù)庫(kù)系統(tǒng)第一實(shí)施例中,所述數(shù)據(jù)庫(kù)系統(tǒng)中設(shè)置有游標(biāo),且所述游標(biāo)設(shè)置有游標(biāo)級(jí)別,其中包括低級(jí)別游標(biāo),所述數(shù)據(jù)庫(kù)系統(tǒng)包括:

      記錄模塊10,用于當(dāng)檢測(cè)到數(shù)據(jù)庫(kù)激活游標(biāo)時(shí),記錄激活的游標(biāo)及其游標(biāo)級(jí)別,以獲得所有已激活游標(biāo)的排序列表;

      數(shù)據(jù)庫(kù)系統(tǒng)在正常運(yùn)行當(dāng)中,會(huì)動(dòng)態(tài)調(diào)用所需的游標(biāo),每當(dāng)數(shù)據(jù)庫(kù)系統(tǒng)激活游標(biāo)時(shí),記錄模塊10記錄被激活的數(shù)據(jù)庫(kù)游標(biāo),記錄其游標(biāo)級(jí)別,獲得所有已激活游標(biāo)的排序列表。

      所述游標(biāo)級(jí)別,指的是游標(biāo)本身的存在級(jí)別,級(jí)別的高低意味著游標(biāo)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的功能應(yīng)用的影響程度。例如,a游標(biāo)屬于系統(tǒng)級(jí)游標(biāo),其功能效用的執(zhí)行對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行起到關(guān)鍵性的作用,那么a游標(biāo)即為高級(jí)別游標(biāo);而b游標(biāo)屬于普通游標(biāo),其功能效用的執(zhí)行對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行幾乎毫無(wú)影響,僅作為緩沖數(shù)據(jù)或臨時(shí)數(shù)據(jù)的媒介,可輕易再現(xiàn)且執(zhí)行成本低微,那么b游標(biāo)即為低級(jí)別游標(biāo)。

      一般而言,該列表用于保存所有激活的數(shù)據(jù)庫(kù)游標(biāo)對(duì)象集合。假設(shè)游標(biāo)的狀態(tài)發(fā)生改變,例如被釋放掉或發(fā)生異常等現(xiàn)象時(shí),數(shù)據(jù)庫(kù)系統(tǒng)會(huì)實(shí)時(shí)追蹤到該游標(biāo),并根據(jù)游標(biāo)本身的狀態(tài)實(shí)時(shí)更新或編輯排序列表,例如對(duì)排序列表中相應(yīng)的游標(biāo)進(jìn)行查詢、插入、刪除等操作,以此維護(hù)排序列表。

      第一釋放模塊20,用于當(dāng)檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源。

      為防止游標(biāo)占用數(shù)據(jù)庫(kù)系統(tǒng)中過多的內(nèi)存資源,第一釋放模塊20實(shí)時(shí)監(jiān)測(cè)排序列表,例如在每隔一段預(yù)設(shè)時(shí)間間隔時(shí),檢測(cè)排序列表中所有游標(biāo)的活動(dòng)狀態(tài)。其中,預(yù)設(shè)時(shí)間間隔可以是默認(rèn)的預(yù)設(shè)數(shù)值,也可以是人為自定義生成的具體數(shù)據(jù),如5秒,10秒等等。游標(biāo)的不同狀態(tài)存在不同的使用意義,游標(biāo)被關(guān)閉時(shí)則不存在,如被激活,則可能處于被調(diào)用狀態(tài),也可能處于空載閑置狀態(tài)。

      在數(shù)據(jù)庫(kù)系統(tǒng)中,游標(biāo)可以被數(shù)據(jù)庫(kù)系統(tǒng)中的可用進(jìn)程或線程激活,并在激活之后為調(diào)用主體(可以是進(jìn)程或線程)所調(diào)取應(yīng)用。而當(dāng)游標(biāo)被激活后,處于激活狀態(tài)的游標(biāo)會(huì)被其調(diào)取并進(jìn)入應(yīng)用狀態(tài),此時(shí),該游標(biāo)會(huì)占據(jù)相當(dāng)程度的系統(tǒng)內(nèi)存資源,以作為游標(biāo)執(zhí)行其功能的運(yùn)行空間。而當(dāng)所述進(jìn)程或線程調(diào)用完畢時(shí),該游標(biāo)將不再作為功能調(diào)用的需求對(duì)象,此時(shí)的游標(biāo)處于閑置狀態(tài),若未將其關(guān)閉,該處于激活狀態(tài)的游標(biāo)依舊會(huì)占據(jù)部分內(nèi)存資源。

      以上所述的游標(biāo)狀態(tài)中,處于激活狀態(tài)的游標(biāo)會(huì)占據(jù)系統(tǒng)資源,但其中,處于激活且被調(diào)用狀態(tài)的游標(biāo)正在被使用,若強(qiáng)行中止,可能會(huì)影響到當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的正常執(zhí)行。而處于激活且閑置狀態(tài)的游標(biāo)當(dāng)前狀況下并未發(fā)揮其功能效用,卻消耗著系統(tǒng)本身的內(nèi)存資源,容易影響到數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行。因此需要對(duì)處于激活且閑置狀態(tài)的游標(biāo)進(jìn)行排查。在本實(shí)施例中,第一釋放模塊20檢測(cè)排序列表中處于激活狀態(tài)且同時(shí)處于閑置狀態(tài)的游標(biāo),并且根據(jù)其游標(biāo)級(jí)別,只篩選出低級(jí)別游標(biāo)。因?yàn)榈图?jí)別游標(biāo)不會(huì)影響到數(shù)據(jù)庫(kù)系統(tǒng)本身的正常運(yùn)行。只有同時(shí)滿足已激活、閑置、低級(jí)別三種條件的游標(biāo),才是本實(shí)施例執(zhí)行定時(shí)檢測(cè)的篩選對(duì)象。

      在排序列表中若檢測(cè)到同時(shí)滿足已激活、閑置、低級(jí)別三大條件的游標(biāo),即為本實(shí)施例所要進(jìn)行資源釋放的檢測(cè)對(duì)象。由于此時(shí)該游標(biāo)處于閑置狀態(tài),故無(wú)需解除進(jìn)程或線程占用該游標(biāo)的操作,可直接釋放掉其在激活且閑置狀態(tài)下所占用的內(nèi)存資源。

      需要說(shuō)明的是,處于激活且閑置狀態(tài)下的低級(jí)別游標(biāo)雖然并未被調(diào)用以執(zhí)行其功能效用,但其本身依舊處于待調(diào)用狀態(tài),可隨時(shí)被調(diào)用主體(可以是進(jìn)程或線程)重新調(diào)用,因此該游標(biāo)對(duì)象依舊保持著與調(diào)用主體的數(shù)據(jù)接口以及實(shí)現(xiàn)其功能的其他對(duì)象的數(shù)據(jù)接口,而數(shù)據(jù)接口的實(shí)現(xiàn)本身就需要消耗占據(jù)系統(tǒng)內(nèi)存資源。這部分內(nèi)存資源在游標(biāo)閑置的情況下依舊被占用而未被釋放掉,將其釋放出來(lái)能夠最大化地利用系統(tǒng)內(nèi)存資源,提高內(nèi)存資源的應(yīng)用效率,防止內(nèi)存資源不足進(jìn)而出現(xiàn)系統(tǒng)運(yùn)行不流暢、卡頓等問題。

      優(yōu)選地,排序列表中保存了大量處于激活狀態(tài)的游標(biāo),當(dāng)?shù)图?jí)別游標(biāo)被釋放掉后,需要將該低級(jí)別游標(biāo)從列表中刪除。假設(shè)不將其進(jìn)行刪除,列表中既保存了激活狀態(tài)的游標(biāo)也保存了已被釋放掉的游標(biāo),而已被釋放掉的游標(biāo)在排序列表中并無(wú)用處。本實(shí)施例所要實(shí)現(xiàn)的是對(duì)激活狀態(tài)的游標(biāo)的清理釋放,對(duì)于已釋放掉的游標(biāo)并無(wú)處理機(jī)制。因此已釋放掉的游標(biāo)需要進(jìn)行清理刪除,以提高游標(biāo)檢測(cè)和查詢的工作效率。同時(shí),假設(shè)不刪除已釋放掉的游標(biāo),那么隨著數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行時(shí)間的增長(zhǎng),被釋放掉游標(biāo)的記錄會(huì)越來(lái)越多,即排序列表本身占用的內(nèi)存資源也會(huì)增加,從另一個(gè)方面后影響到數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行。

      本發(fā)明的技術(shù)方案中,當(dāng)記錄模塊10檢測(cè)到數(shù)據(jù)庫(kù)激活游標(biāo)時(shí),記錄激活的游標(biāo)及其游標(biāo)級(jí)別,以獲得所有已激活游標(biāo)的排序列表;當(dāng)?shù)谝会尫拍K20檢測(cè)到排序列表中存在已激活且閑置的低級(jí)別游標(biāo)時(shí),釋放低級(jí)別游標(biāo)占用的內(nèi)存資源。本發(fā)明采用實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)庫(kù)游標(biāo)使用狀態(tài)的方式,在內(nèi)存資源不足時(shí),根據(jù)游標(biāo)級(jí)別關(guān)閉游標(biāo)進(jìn)行資源釋放,避免游標(biāo)本身占用過多的內(nèi)存資源而導(dǎo)致系統(tǒng)由于沒有足夠的內(nèi)存癱瘓、卡頓、死機(jī)等問題,有效解決數(shù)據(jù)庫(kù)游標(biāo)導(dǎo)致的內(nèi)存泄露。本發(fā)明采用實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)庫(kù)游標(biāo)使用狀態(tài)的方式,在內(nèi)存資源不足時(shí),根據(jù)游標(biāo)級(jí)別關(guān)閉游標(biāo)進(jìn)行資源釋放,避免游標(biāo)本身占用過多的內(nèi)存資源而導(dǎo)致系統(tǒng)由于沒有足夠的內(nèi)存癱瘓、卡頓、死機(jī)等問題,有效解決數(shù)據(jù)庫(kù)游標(biāo)導(dǎo)致的內(nèi)存泄露。

      進(jìn)一步地,在本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第一實(shí)施例的基礎(chǔ)上,提出數(shù)據(jù)庫(kù)系統(tǒng)第二實(shí)施例,參考圖7,所述第二實(shí)施例與第一實(shí)施例之間的區(qū)別在于,所述數(shù)據(jù)庫(kù)系統(tǒng)還包括:

      統(tǒng)計(jì)模塊30,用于統(tǒng)計(jì)當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的閑置內(nèi)存資源,以獲得對(duì)應(yīng)的統(tǒng)計(jì)參數(shù);

      所述閑置內(nèi)存資源,指的是數(shù)據(jù)庫(kù)系統(tǒng)中,當(dāng)前處于閑置狀態(tài)的,并未被調(diào)用的內(nèi)存資源。一般而言,系統(tǒng)資源除了被調(diào)用的內(nèi)存資源,需要部分閑置的內(nèi)存資源作為后續(xù)功能執(zhí)行時(shí)被調(diào)用的預(yù)設(shè)資源。統(tǒng)計(jì)模塊50可查詢獲取到處于閑置狀態(tài)的內(nèi)存資源,由于內(nèi)存資源的存儲(chǔ)方式不一定是連接的,可以存在分段分區(qū)形式的內(nèi)存資源,因此需要對(duì)所有處于閑置狀態(tài)的內(nèi)存資源進(jìn)行統(tǒng)計(jì),以獲得對(duì)應(yīng)的統(tǒng)計(jì)參數(shù)。所述統(tǒng)計(jì)參數(shù)指的是該處于閑置狀態(tài)的內(nèi)存資源的剩余容量。

      第二釋放模塊40,用于當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),釋放排序列表中所有已激活游標(biāo)占用的內(nèi)存資源。

      在本實(shí)施例中,數(shù)據(jù)庫(kù)系統(tǒng)設(shè)置了一個(gè)預(yù)設(shè)閾值,該預(yù)設(shè)閾值作為統(tǒng)計(jì)參數(shù)的一個(gè)邊界參考數(shù)值,該數(shù)值指代的是數(shù)據(jù)庫(kù)系統(tǒng)中處于閑置狀態(tài)的內(nèi)存資源的剩余容量的最低門限值。當(dāng)統(tǒng)計(jì)所獲得的統(tǒng)計(jì)參數(shù)小于該預(yù)設(shè)閾值時(shí),則證明數(shù)據(jù)庫(kù)系統(tǒng)中作為緩沖的閑置狀態(tài)的內(nèi)存資源達(dá)到了最低門限值,若沒有新的閑置狀態(tài)的內(nèi)存資源作為補(bǔ)充,數(shù)據(jù)庫(kù)系統(tǒng)將處于時(shí)刻發(fā)生運(yùn)行不流暢甚至系統(tǒng)崩潰的邊緣。故,此時(shí)需要將排序列表中所有處于激活狀態(tài)的游標(biāo)所占用的內(nèi)存資源全部釋放掉,以擴(kuò)充當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的閑置內(nèi)存資源。當(dāng)然,所有的已激活游標(biāo)中可能存在高級(jí)別游標(biāo),為防止出現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)出現(xiàn)運(yùn)行卡頓甚至崩潰的極端情況,高級(jí)別游標(biāo)也需要一齊釋放。

      進(jìn)一步地,在本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第二實(shí)施例的基礎(chǔ)上,提出數(shù)據(jù)庫(kù)系統(tǒng)第三實(shí)施例,參考圖8,所述第三實(shí)施例與第二實(shí)施例之間的區(qū)別在于,所述數(shù)據(jù)庫(kù)系統(tǒng)還包括:

      存儲(chǔ)模塊50,用于存儲(chǔ)本次釋放內(nèi)存資源的所有事件信息,以作為內(nèi)存資源優(yōu)化的依據(jù)。

      本實(shí)施例中,系統(tǒng)資源釋放完成之后,閑置內(nèi)存資源的剩余容量會(huì)增加,由于其是已激活游標(biāo)釋放后獲得的。因此可以存儲(chǔ)本次作業(yè)中所有參與釋放內(nèi)存資源的事件信息(包含了被釋放掉的游標(biāo)對(duì)象,以及每個(gè)游標(biāo)對(duì)象是在哪個(gè)步驟被釋放掉,以及該游標(biāo)被釋放掉所釋放出來(lái)的內(nèi)存資源等信息)。這些信息反映了數(shù)據(jù)庫(kù)系統(tǒng)中游標(biāo)被激活但卻未及時(shí)關(guān)閉的技術(shù)問題,從側(cè)面暴露出數(shù)據(jù)庫(kù)系統(tǒng)的系統(tǒng)設(shè)計(jì)問題,如邏輯設(shè)計(jì)上的不合理,或工作原理實(shí)現(xiàn)上的不合理等。依據(jù)這些技術(shù)問題,系統(tǒng)操作人員或設(shè)計(jì)人員可以有針對(duì)性地分析處理,以消除系統(tǒng)游標(biāo)的不合理應(yīng)用,實(shí)現(xiàn)內(nèi)存資源的有效優(yōu)化。

      進(jìn)一步地,在本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第三實(shí)施例的基礎(chǔ)上,提出數(shù)據(jù)庫(kù)系統(tǒng)第四實(shí)施例,參考圖9,所述第四實(shí)施例與第三實(shí)施例之間的區(qū)別在于,所述第二釋放模塊40包括:

      顯示單元41,用于當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),顯示當(dāng)前排序列表中所有的已激活游標(biāo),以供用戶選擇;

      第一釋放單元42,用于基于用戶選擇的預(yù)選游標(biāo),釋放預(yù)選游標(biāo)占用的內(nèi)存資源。

      當(dāng)統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),則需要釋放掉所有已激活游標(biāo)。但是,若用戶想針對(duì)性地釋放部分已激活游標(biāo),而將部分游標(biāo)保留執(zhí)行。例如,所有已激活游標(biāo)包括a,b,c三個(gè)游標(biāo),此時(shí)統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值,正常流程下需要釋放a,b,c三個(gè)游標(biāo),但用戶只想釋放掉b,c游標(biāo)而保留a游標(biāo)。此時(shí),數(shù)據(jù)庫(kù)系統(tǒng)可以提供一個(gè)顯示界面,顯示當(dāng)前排序列表中所有的已激活游標(biāo),并提供選擇已激活游標(biāo)的編輯方式,以供用戶選擇。用戶通過編輯,選擇出預(yù)選游標(biāo),作為真正執(zhí)行釋放功能的游標(biāo)對(duì)象。根據(jù)預(yù)選游標(biāo),數(shù)據(jù)庫(kù)系統(tǒng)將所述預(yù)選游標(biāo)占用的內(nèi)存資源釋放掉。

      進(jìn)一步地,在本發(fā)明數(shù)據(jù)庫(kù)系統(tǒng)第一實(shí)施例的基礎(chǔ)上,提出數(shù)據(jù)庫(kù)系統(tǒng)第五實(shí)施例,參考圖10,所述第五實(shí)施例與第一實(shí)施例之間的區(qū)別在于,所述第二釋放模塊40包括:

      獲取單元43,用于當(dāng)檢測(cè)到統(tǒng)計(jì)參數(shù)小于預(yù)設(shè)閾值時(shí),獲取排序列表中所有已激活游標(biāo)的內(nèi)存資源的釋放權(quán)限;

      權(quán)限單元44,用于當(dāng)檢測(cè)到釋放權(quán)限未能成功釋放所有已激活游標(biāo)占用的內(nèi)存資源時(shí),強(qiáng)制獲取數(shù)據(jù)庫(kù)系統(tǒng)的最高權(quán)限;

      第二釋放單元45,用于基于最高權(quán)限釋放所有已激活游標(biāo)占用的內(nèi)存資源。

      在數(shù)據(jù)庫(kù)系統(tǒng)中,要釋放游標(biāo)需要有一定的操作權(quán)限,釋放權(quán)限的獲取可能基于當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)賬戶。在現(xiàn)實(shí)場(chǎng)景中,可能會(huì)出現(xiàn)無(wú)法釋放某些游標(biāo)的現(xiàn)象。其中,可能存在游標(biāo)處理異常,或游標(biāo)處于保護(hù)狀態(tài)中等原因。此時(shí)需要獲取到具體的游標(biāo)釋放權(quán)限,并基于釋放權(quán)限進(jìn)行釋放操作。但是,當(dāng)權(quán)限獲取請(qǐng)求無(wú)法獲取到已激活游標(biāo)的釋放權(quán)限時(shí),則證明以當(dāng)前的操作權(quán)限,無(wú)法完成已激活游標(biāo)的釋放操作。此時(shí)可強(qiáng)制獲取到數(shù)據(jù)庫(kù)系統(tǒng)的最高權(quán)限。而最高權(quán)限則意味著當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的一切操作步驟皆可以無(wú)礙執(zhí)行。同樣的道理,擁有最高權(quán)限意味著能夠無(wú)礙釋放所有已激活有歐標(biāo)的內(nèi)存資源。基于該最高權(quán)限,數(shù)據(jù)庫(kù)系統(tǒng)能夠正常執(zhí)行所有已激活游標(biāo)所占用的內(nèi)存資源。

      當(dāng)然,本實(shí)施例與第四實(shí)施例可相輔相成,獲取系統(tǒng)最高權(quán)限以釋放游標(biāo)占用的內(nèi)存資源的實(shí)施例與用戶自定義選擇所要釋放的游標(biāo)的實(shí)施例互不矛盾,二者可相互結(jié)合,以形成本發(fā)明不同實(shí)施例解決系統(tǒng)內(nèi)存資源不足的問題的優(yōu)選技術(shù)方案。

      需要說(shuō)明的是,在本文中,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。

      上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。

      通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。

      以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說(shuō)明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1