本發(fā)明涉及數(shù)據(jù)庫(kù)管理領(lǐng)域,尤指一種數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理方法和裝置。
背景技術(shù):
數(shù)據(jù)庫(kù)最重要的組成部分是數(shù)據(jù)表。根據(jù)數(shù)據(jù)庫(kù)管理內(nèi)容,數(shù)據(jù)表可以有多個(gè),不同之間的數(shù)據(jù)表之間可以關(guān)聯(lián)使用。數(shù)據(jù)庫(kù)中可以有關(guān)鍵字、主鍵、索引等來(lái)維護(hù)管理的內(nèi)容。
當(dāng)針對(duì)一個(gè)表的刪除操作次數(shù)很多時(shí),表以及表相關(guān)的索引占用的空間就會(huì)產(chǎn)生不連續(xù)性,會(huì)產(chǎn)生大量碎片化的空間。那么在產(chǎn)生大量碎片化的空間后,再針對(duì)此表的增刪改查操作效率都會(huì)變低。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理方法和裝置,通過(guò)對(duì)存儲(chǔ)空間的管理,提高數(shù)據(jù)表的響應(yīng)速度。
為了達(dá)到本發(fā)明目的,本發(fā)明提供一種數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理方法,包括:
在對(duì)數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)表中的表項(xiàng)進(jìn)行刪除操作后,記錄碎片數(shù)據(jù)在存儲(chǔ)空間對(duì)應(yīng)的數(shù)據(jù)塊信息,其中所述碎片數(shù)據(jù)是在每次刪除操作后所述數(shù)據(jù)表所產(chǎn)生的;計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和;根據(jù)所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放;如果執(zhí)行存儲(chǔ)空間的釋放的操作,則釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊。
其中,所述計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和,包括:
在預(yù)先設(shè)置的時(shí)間內(nèi),當(dāng)對(duì)所述數(shù)據(jù)表的刪除操作次數(shù)達(dá)到預(yù)先設(shè)置的次數(shù)閾值時(shí),計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和。
其中,所述根據(jù)所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放,包括:
獲取所述數(shù)據(jù)表在存儲(chǔ)空間占用的數(shù)據(jù)塊總和;根據(jù)所述碎片占用的數(shù)據(jù)塊總和以及所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放。
其中,所述釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊,包括:
獲取所述碎片占用的數(shù)據(jù)塊中未被占用的數(shù)據(jù)塊;對(duì)所述未被占用的數(shù)據(jù)塊執(zhí)行存儲(chǔ)空間釋放的操作。
其中,,所述釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊之后,還包括:
根據(jù)釋放的數(shù)據(jù)塊的數(shù)量,對(duì)所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和進(jìn)行更新。
一種數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理裝置,包括:
記錄模塊,用于在對(duì)數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)表中的表項(xiàng)進(jìn)行刪除操作后,記錄碎片數(shù)據(jù)在存儲(chǔ)空間對(duì)應(yīng)的數(shù)據(jù)塊信息,其中所述碎片數(shù)據(jù)是在每次刪除操作后所述數(shù)據(jù)表所產(chǎn)生的;計(jì)算模塊,用于計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和;判斷模塊,用于根據(jù)所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放;釋放模塊,用于如果執(zhí)行存儲(chǔ)空間的釋放的操作,則釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊。
其中,所述計(jì)算模塊具體用于:
在預(yù)先設(shè)置的時(shí)間內(nèi),當(dāng)對(duì)所述數(shù)據(jù)表的刪除操作次數(shù)達(dá)到預(yù)先設(shè)置的次數(shù)閾值時(shí),計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和。
其中,所述判斷模塊包括:
第一獲取單元,用于獲取所述數(shù)據(jù)表在存儲(chǔ)空間占用的數(shù)據(jù)塊總和;
判斷單元,用于根據(jù)所述碎片占用的數(shù)據(jù)塊總和以及所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放。
其中,所述釋放模塊包括:
第二獲取單元,用于獲取所述碎片占用的數(shù)據(jù)塊中未被占用的數(shù)據(jù)塊;
釋放單元,用于對(duì)所述未被占用的數(shù)據(jù)塊執(zhí)行存儲(chǔ)空間釋放的操作。
其中,,所述裝置還包括:
在釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊后,根據(jù)釋放的數(shù)據(jù)塊的數(shù)量,對(duì)所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和進(jìn)行更新。
與現(xiàn)有技術(shù)相比,本發(fā)明提供的實(shí)施例,通過(guò)對(duì)數(shù)據(jù)表刪除操作產(chǎn)生的碎片占用的數(shù)據(jù)塊進(jìn)行統(tǒng)計(jì),得到碎片占用的數(shù)據(jù)塊總和,再利用碎片占用的數(shù)據(jù)塊總和,來(lái)計(jì)算是否對(duì)該數(shù)據(jù)表的碎片進(jìn)行整理,從而優(yōu)化數(shù)據(jù)表的存儲(chǔ)空間,減少碎片化數(shù)據(jù)的占有比例,提高數(shù)據(jù)表的響應(yīng)速度。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說(shuō)明書中闡述,并且,部分地從說(shuō)明書中變得顯而易見,或者通過(guò)實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過(guò)在說(shuō)明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來(lái)實(shí)現(xiàn)和獲得。
附圖說(shuō)明
附圖用來(lái)提供對(duì)本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說(shuō)明書的一部分,與本申請(qǐng)的實(shí)施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。
圖1為本發(fā)明提供的數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理方法的流程圖;
圖2為本發(fā)明提供的數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理方法應(yīng)用實(shí)例的流程圖;
圖3為本發(fā)明提供的數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說(shuō)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。
在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖1為本發(fā)明提供的數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理方法的流程圖。圖1所示方法包括:
步驟101、在對(duì)數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)表中的表項(xiàng)進(jìn)行刪除操作后,記錄碎片數(shù)據(jù)在存儲(chǔ)空間對(duì)應(yīng)的數(shù)據(jù)塊信息,其中所述碎片數(shù)據(jù)是在每次刪除操作后所述數(shù)據(jù)表所產(chǎn)生的;
步驟102、計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和;
步驟103、根據(jù)所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放;
步驟104、如果執(zhí)行存儲(chǔ)空間的釋放的操作,則釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊。
本發(fā)明提供的方法實(shí)施例,通過(guò)對(duì)數(shù)據(jù)表刪除操作產(chǎn)生的碎片占用的數(shù)據(jù)塊進(jìn)行統(tǒng)計(jì),得到碎片占用的數(shù)據(jù)塊總和,再利用碎片占用的數(shù)據(jù)塊總和,來(lái)計(jì)算是否對(duì)該數(shù)據(jù)表的碎片進(jìn)行整理,從而優(yōu)化數(shù)據(jù)表的存儲(chǔ)空間,減少碎片化數(shù)據(jù)的占有比例,提高數(shù)據(jù)表的響應(yīng)速度。
下面對(duì)本發(fā)明提供的方法實(shí)施例作進(jìn)一步說(shuō)明:
當(dāng)針對(duì)一個(gè)數(shù)據(jù)表的刪除操作很多時(shí),表以及表相關(guān)的索引占用的空間就會(huì)產(chǎn)生不連續(xù)性,會(huì)產(chǎn)生大量碎片化的空間,從而造成對(duì)此表的增刪改查操作效率都會(huì)變低,因此,當(dāng)檢測(cè)到一段時(shí)間內(nèi)刪除操作次數(shù)過(guò)多時(shí),就需要觸發(fā)碎片整理的操作。
在本發(fā)明實(shí)施例中,在預(yù)先設(shè)置的時(shí)間內(nèi),當(dāng)對(duì)所述數(shù)據(jù)表的刪除操作次數(shù)達(dá)到預(yù)先設(shè)置的次數(shù)閾值時(shí),計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和。
由于數(shù)據(jù)表的響應(yīng)速度取決于該數(shù)據(jù)表所占用的空間是否連續(xù),因此,在進(jìn)行比對(duì)時(shí),因此是將數(shù)據(jù)表的碎片占用的空間與該數(shù)據(jù)表占用的所有數(shù)據(jù)塊進(jìn)行比對(duì),而不是跟整個(gè)數(shù)據(jù)庫(kù)進(jìn)行比對(duì),以保證判斷的準(zhǔn)確性。
因此,本發(fā)明實(shí)施例中判斷是否執(zhí)行存儲(chǔ)空間的釋放采用的方式為:
獲取所述數(shù)據(jù)表在存儲(chǔ)空間占用的數(shù)據(jù)塊總和;
根據(jù)所述碎片占用的數(shù)據(jù)塊總和以及所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放操作。
其中,可以二者的比例達(dá)到某個(gè)數(shù)值時(shí),認(rèn)為可以執(zhí)行存儲(chǔ)空間的釋放操作;如果二者的比例未達(dá)到該數(shù)值,則認(rèn)為不執(zhí)行存儲(chǔ)空間的釋放操作。
在數(shù)據(jù)庫(kù)中,存儲(chǔ)某一數(shù)據(jù)表的碎片的數(shù)據(jù)塊可能還存儲(chǔ)有其他有用的數(shù)據(jù),如響應(yīng)外部請(qǐng)求的數(shù)據(jù),因此,對(duì)于這部分存儲(chǔ)碎片和有用數(shù)據(jù)的數(shù)據(jù)塊不能執(zhí)行存儲(chǔ)空間釋放的操作,否則會(huì)影響正常的數(shù)據(jù)訪問(wèn),因此,本發(fā)明在釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊采用如下方式:
獲取所述碎片占用的數(shù)據(jù)塊中未被占用的數(shù)據(jù)塊;
對(duì)所述未被占用的數(shù)據(jù)塊執(zhí)行存儲(chǔ)空間釋放的操作。
在本發(fā)明實(shí)施例中,只對(duì)未被占用的數(shù)據(jù)塊執(zhí)行存儲(chǔ)空間釋放的操作,將只存儲(chǔ)有碎片的數(shù)據(jù)塊進(jìn)行釋放,在保證數(shù)據(jù)正常響應(yīng)的前提下,釋放了數(shù)據(jù)表對(duì)應(yīng)的存儲(chǔ)空間。
當(dāng)然,在釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊之后,該數(shù)據(jù)表中碎片占用的數(shù)據(jù)塊發(fā)生了變化,因此需要根據(jù)釋放的數(shù)據(jù)塊的數(shù)量,對(duì)所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和進(jìn)行更新,以保證下一次進(jìn)行碎片整理時(shí)碎片占用的數(shù)據(jù)塊的起始計(jì)數(shù)單位的正確性。
下面對(duì)本發(fā)明提供的方法實(shí)施例作進(jìn)一步說(shuō)明:
圖2為本發(fā)明提供的數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理方法應(yīng)用實(shí)例的流程圖,圖2所示方法包括
步驟001:根據(jù)給定的表名稱,去查詢?cè)摫淼慕y(tǒng)計(jì)信息是否為最新的統(tǒng)計(jì)信息;
如果統(tǒng)計(jì)信息為最新的,可跳過(guò)步驟002,直接執(zhí)行步驟003;如果統(tǒng)計(jì)信息不是最新的,則執(zhí)行步驟002來(lái)收集統(tǒng)計(jì)信息;
步驟003:計(jì)算表碎片是否超過(guò)閥值;
其中,碎片率=碎片占用數(shù)據(jù)塊/表占用總數(shù)據(jù)塊*100/100,可設(shè)置此閥值20-25%,具體可根據(jù)業(yè)務(wù)表的具體情況設(shè)置;
如果超過(guò)閥值則執(zhí)行步驟004,如果沒有超過(guò)閥值則跳過(guò)步驟004;
步驟004:整理碎片。
此種方式可以在線整理,即在對(duì)表做碎片整理時(shí)該表仍然可以進(jìn)行增刪改查等操作,不影響業(yè)務(wù)。
其中,還可以通過(guò)shell腳本去自動(dòng)執(zhí)行,并把shell腳本做成定時(shí)任務(wù),可以按需執(zhí)行,比如根據(jù)該數(shù)據(jù)表的訪問(wèn)頻率,為每個(gè)數(shù)據(jù)表設(shè)置執(zhí)行頻率,如每天,每周,每月等。
本發(fā)明提供的應(yīng)用實(shí)例,設(shè)置碎片閥值,自動(dòng)的去發(fā)現(xiàn)數(shù)據(jù)庫(kù)表的碎片,并能在達(dá)到閥值后自動(dòng)的去整理碎片,以達(dá)到表優(yōu)化的目的。
圖3為本發(fā)明提供的數(shù)據(jù)庫(kù)中存儲(chǔ)空間的管理裝置的結(jié)構(gòu)圖。圖3所示裝置包括:
記錄模塊301,用于在對(duì)數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)表中的表項(xiàng)進(jìn)行刪除操作后,記錄碎片數(shù)據(jù)在存儲(chǔ)空間對(duì)應(yīng)的數(shù)據(jù)塊信息,其中所述碎片數(shù)據(jù)是在每次刪除操作后所述數(shù)據(jù)表所產(chǎn)生的;
計(jì)算模塊302,用于計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和;
判斷模塊303,用于根據(jù)所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放;
釋放模塊304,用于如果執(zhí)行存儲(chǔ)空間的釋放的操作,則釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊。
其中,所述計(jì)算模塊302具體用于:
在預(yù)先設(shè)置的時(shí)間內(nèi),當(dāng)對(duì)所述數(shù)據(jù)表的刪除操作次數(shù)達(dá)到預(yù)先設(shè)置的次數(shù)閾值時(shí),計(jì)算所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和。
其中,所述判斷模塊303包括:
第一獲取單元,用于獲取所述數(shù)據(jù)表在存儲(chǔ)空間占用的數(shù)據(jù)塊總和;
判斷單元,用于根據(jù)所述碎片占用的數(shù)據(jù)塊總和以及所述碎片占用的數(shù)據(jù)塊總和,判斷是否執(zhí)行存儲(chǔ)空間的釋放。
其中,所述釋放模塊304包括:
第二獲取單元,用于獲取所述碎片占用的數(shù)據(jù)塊中未被占用的數(shù)據(jù)塊;
釋放單元,用于對(duì)所述未被占用的數(shù)據(jù)塊執(zhí)行存儲(chǔ)空間釋放的操作。
可選的,所述裝置還包括:
在釋放所述數(shù)據(jù)表的碎片在存儲(chǔ)空間中占用的數(shù)據(jù)塊后,根據(jù)釋放的數(shù)據(jù)塊的數(shù)量,對(duì)所述數(shù)據(jù)表在存儲(chǔ)空間中碎片占用的數(shù)據(jù)塊總和進(jìn)行更新。
本發(fā)明提供的裝置實(shí)施例,通過(guò)對(duì)數(shù)據(jù)表刪除操作產(chǎn)生的碎片占用的數(shù)據(jù)塊進(jìn)行統(tǒng)計(jì),得到碎片占用的數(shù)據(jù)塊總和,再利用碎片占用的數(shù)據(jù)塊總和,來(lái)計(jì)算是否對(duì)該數(shù)據(jù)表的碎片進(jìn)行整理,從而優(yōu)化數(shù)據(jù)表的存儲(chǔ)空間,減少碎片化數(shù)據(jù)的占有比例,提高數(shù)據(jù)表的響應(yīng)速度。
雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容僅為便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式及細(xì)節(jié)上進(jìn)行任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。