本發(fā)明涉及計算機(jī)
技術(shù)領(lǐng)域:
:,具體涉及一種提高數(shù)據(jù)庫的有效存儲空間的方法和裝置。
背景技術(shù):
::數(shù)據(jù)庫是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫。業(yè)務(wù)端將數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)庫,以便進(jìn)行有效的存儲和管理,如果某數(shù)據(jù)已經(jīng)不再被需要,就會從數(shù)據(jù)庫中將相應(yīng)的數(shù)據(jù)刪除。但是,在實際操作中,刪除數(shù)據(jù)庫中的數(shù)據(jù)只是在數(shù)據(jù)庫中進(jìn)行相應(yīng)數(shù)據(jù)的標(biāo)記位層面上的刪除,并不是真正的將數(shù)據(jù)本身刪除,例如,有效數(shù)據(jù)的標(biāo)記位為“0”,該數(shù)據(jù)仍然可以被查詢或獲取到;被刪除后的無效數(shù)據(jù)的標(biāo)記位為“1”,該數(shù)據(jù)就無法被查詢或獲取到,但是該數(shù)據(jù)仍然存在數(shù)據(jù)庫中,除非有新的數(shù)據(jù)將其覆蓋掉。這樣,被刪除的數(shù)據(jù)仍會占用數(shù)據(jù)庫的磁盤空間,造成磁盤空間的浪費。技術(shù)實現(xiàn)要素:鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種提高數(shù)據(jù)庫的有效存儲空間的方法和相應(yīng)的裝置。依據(jù)本發(fā)明的一個方面,提供了一種提高數(shù)據(jù)庫的有效存儲空間的方法,包括:選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表;對于所述一個或多個數(shù)據(jù)表中的每個數(shù)據(jù)表:獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量,以及獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量;根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理;如果確定需要對該數(shù)據(jù)表進(jìn)行處理,則對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收??蛇x地,所述選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表包括:選定數(shù)據(jù)庫中的整體文件數(shù)據(jù)量大于第一預(yù)設(shè)值的數(shù)據(jù)表??蛇x地,所述獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量包括:獲取該數(shù)據(jù)表中的索引文件大小和數(shù)據(jù)文件大小,以及獲取該數(shù)據(jù)表中的分區(qū)數(shù)據(jù)的數(shù)據(jù)量大小;取三者之和作為該數(shù)據(jù)表的整體文件數(shù)據(jù)量??蛇x地,所述獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量包括:從該數(shù)據(jù)庫的信息計劃表中獲取該數(shù)據(jù)庫中的有效數(shù)據(jù)長度值和有效索引長度值,以兩者之和作為該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。可選地,所述根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理包括:計算該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量的差值;計算所述差值占該數(shù)據(jù)表的整體文件數(shù)據(jù)量的比例值;當(dāng)所述比例值大于第二預(yù)設(shè)值時,確定需要對該數(shù)據(jù)表進(jìn)行處理??蛇x地,所述對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收包括:采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排,以回收該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間;或者,利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收??蛇x地,在對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收之前,該方法進(jìn)一步包括:對該數(shù)據(jù)庫的訪問量分布進(jìn)行統(tǒng)計;如果該數(shù)據(jù)庫存在訪問量低于第三預(yù)設(shè)值的時間段,則在該時間段登錄數(shù)據(jù)庫,利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收;如果該數(shù)據(jù)庫不存在訪問量低于第三預(yù)設(shè)值的時間段,則采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排。。根據(jù)本發(fā)明的另一方面,提供了一種提高數(shù)據(jù)庫的有效存儲空間的裝置,其中,該裝置包括:選定單元,適于選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表;對于所述一個或多個數(shù)據(jù)表中的每個數(shù)據(jù)表:數(shù)據(jù)量獲取單元,適于獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量,以及獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量;處理確定單元,適于根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理;處理執(zhí)行單元,適于如果確定需要對該數(shù)據(jù)表進(jìn)行處理,則對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收??蛇x地,所述選定單元,適于選定數(shù)據(jù)庫中的整體文件數(shù)據(jù)量大于第一預(yù)設(shè)值的數(shù)據(jù)表??蛇x地,所述數(shù)據(jù)量獲取單元,適于獲取該數(shù)據(jù)表中的索引文件大小和數(shù)據(jù)文件大小,以及獲取該數(shù)據(jù)表中的分區(qū)數(shù)據(jù)的數(shù)據(jù)量大?。蝗∪咧妥鳛樵摂?shù)據(jù)表的整體文件數(shù)據(jù)量??蛇x地,所述數(shù)據(jù)量獲取單元,適于從該數(shù)據(jù)庫的信息計劃表中獲取該數(shù)據(jù)庫中的有效數(shù)據(jù)長度值和有效索引長度值,以兩者之和作為該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。可選地,所述處理確定單元,適于計算該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量的差值;計算所述差值占該數(shù)據(jù)表的整體文件數(shù)據(jù)量的比例值;當(dāng)所述比例值大于第二預(yù)設(shè)值時,確定需要對該數(shù)據(jù)表進(jìn)行處理。可選地,所述處理執(zhí)行單元,適于采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排,以回收該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間;或者,適于利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收??蛇x地,所述處理執(zhí)行單元,進(jìn)一步適于對該數(shù)據(jù)庫的訪問量分布進(jìn)行統(tǒng)計;如果該數(shù)據(jù)庫存在訪問量低于第三預(yù)設(shè)值的時間段,則在該時間段登錄數(shù)據(jù)庫,利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收;如果該數(shù)據(jù)庫不存在訪問量低于第三預(yù)設(shè)值的時間段,則采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排。根據(jù)本發(fā)明的技術(shù)方案,首先判斷數(shù)據(jù)表是否需要清理無效數(shù)據(jù),選定數(shù)據(jù)庫中的一個或者多個數(shù)據(jù)表,并獲取該數(shù)據(jù)表的整體文件的數(shù)據(jù)量,以及該數(shù)據(jù)表的實際有效數(shù)據(jù)量,通過該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理,如果數(shù)據(jù)表中的無效數(shù)據(jù)量過大,就確定需要對該數(shù)據(jù)表進(jìn)行處理,為了清理無效數(shù)據(jù)占用的磁盤空間,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收。綜上所述,本發(fā)明通過清理無效數(shù)據(jù)的存儲空間的方式,釋放磁盤空間的浪費空間,有效防止因無效數(shù)據(jù)的占用而造成的磁盤空間的浪費。上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。附圖說明通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:圖1示出了根據(jù)本發(fā)明一個實施例的一種提高數(shù)據(jù)庫的有效存儲空間的方法的流程示意圖;圖2示出了根據(jù)本發(fā)明一個實施例的一種提高數(shù)據(jù)庫的有效存儲空間的裝置的結(jié)構(gòu)示意圖。具體實施方式下面將參照附圖更詳細(xì)地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。圖1示出了根據(jù)本發(fā)明一個實施例的一種提高數(shù)據(jù)庫的有效存儲空間的方法的流程示意圖。如圖1所示,該方法包括:步驟S110,選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表。對于一個或多個數(shù)據(jù)表中的每個數(shù)據(jù)表,執(zhí)行如下的步驟S120-S140。步驟S120,獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量,以及獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。因為數(shù)據(jù)庫刪除屬于標(biāo)記位刪除,并沒有真正刪除數(shù)據(jù)、釋放空間,且被刪除的數(shù)據(jù)屬于無效數(shù)據(jù),數(shù)據(jù)表中的整體文件的數(shù)據(jù)量就包括有效數(shù)據(jù)和無效數(shù)據(jù)。為了確定該數(shù)據(jù)表是否需要進(jìn)行無效數(shù)據(jù)的清理,提高數(shù)據(jù)表的有效存儲空間,需要獲取該數(shù)據(jù)表的整體穩(wěn)健數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量,以獲得該數(shù)據(jù)表中的無效數(shù)據(jù)的數(shù)據(jù)量。在本發(fā)明的一個實施例中,可以通過“information_schema.tables”獲取數(shù)據(jù)表,通過讀的方式獲取該數(shù)據(jù)表的文件數(shù)據(jù)量以及通過“(truncate(DATA_LENGTH/1024+INDEX_LENGTH/1024,0))”、“TABLE_ROWS”獲取數(shù)據(jù)表的實際數(shù)據(jù)量。步驟S130,根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理。根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量可以獲得無效數(shù)據(jù)的數(shù)據(jù)量,根據(jù)無效數(shù)據(jù)量的大小或者占用的比例進(jìn)行判斷該數(shù)據(jù)表是否需要處理。步驟S140,如果確定需要對該數(shù)據(jù)表進(jìn)行處理,則對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收。如果無效數(shù)據(jù)量的大小或者占用的比例已經(jīng)超過閾值,就確定該數(shù)據(jù)表需要處理,進(jìn)而對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收??梢姡痉椒ㄍㄟ^清理無效數(shù)據(jù)的存儲空間的方式,釋放磁盤空間的浪費空間,有效防止因無效數(shù)據(jù)的占用而造成的磁盤空間的浪費。數(shù)據(jù)表的存儲空間一定,但是已經(jīng)存儲的數(shù)據(jù)量不一定都很大,對于存儲量較小的數(shù)據(jù)表來說,可以不需要進(jìn)行無效數(shù)據(jù)的存儲空間的回收,就能滿足新數(shù)據(jù)的存儲需求。但是對于數(shù)據(jù)表中本身的數(shù)據(jù)量就很大的情況下,如果不及時處理,就可能引起數(shù)據(jù)寫不進(jìn)去的后果。所以,在本發(fā)明的一個實施例中,選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表包括:選定數(shù)據(jù)庫中的整體文件數(shù)據(jù)量大于第一預(yù)設(shè)值的數(shù)據(jù)表。這里的第一預(yù)設(shè)值可以根據(jù)數(shù)據(jù)表自身的屬性進(jìn)行設(shè)定,例如,數(shù)據(jù)表總共可以容納1千萬條數(shù)據(jù),那么就可以設(shè)定第一預(yù)設(shè)值為7百萬條,當(dāng)超過7百萬條數(shù)據(jù)的時候,為了提高數(shù)據(jù)表的有效存儲空間,就對該數(shù)據(jù)表進(jìn)行處理。在本發(fā)明的一個實施例中,步驟S120中的獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量包括:獲取該數(shù)據(jù)表中的索引文件大小和數(shù)據(jù)文件大小,以及獲取該數(shù)據(jù)表中的分區(qū)數(shù)據(jù)的數(shù)據(jù)量大??;取三者之和作為該數(shù)據(jù)表的整體文件數(shù)據(jù)量。數(shù)據(jù)表中的整體文件應(yīng)該包含所有占用數(shù)據(jù)表磁盤空間的所有文件,包括:數(shù)據(jù)表中的數(shù)據(jù)文件,索引文件。還需要指出的是,還包括數(shù)據(jù)表中的分區(qū)表數(shù)據(jù)。為了滿足大數(shù)據(jù)庫的管理,需要創(chuàng)建和使用分區(qū)表和分區(qū)索引,分區(qū)表允許將數(shù)據(jù)分成為分區(qū)甚至子分區(qū),即將數(shù)據(jù)分成塊,以便對大量數(shù)據(jù)的進(jìn)行更好的管理,這里的每個分區(qū)可以單獨管理,可以不依賴其他分區(qū)而單獨發(fā)揮作用,因此可以提供更具有可用性的結(jié)構(gòu)??梢姡謪^(qū)表也占用數(shù)據(jù)表的磁盤空間,也會包含無效數(shù)據(jù),在進(jìn)行數(shù)據(jù)表的整體文件數(shù)據(jù)量的獲取時,也需要獲取數(shù)據(jù)表中的分區(qū)表的數(shù)據(jù)量。將上述的數(shù)據(jù)文件、索引文件和分區(qū)文件的總和作為該數(shù)據(jù)表的整體文件數(shù)據(jù)量。在本發(fā)明的一個實施例中,步驟S130中的獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量包括:從該數(shù)據(jù)庫的信息計劃表中獲取該數(shù)據(jù)庫中的有效數(shù)據(jù)長度值和有效索引長度值,以兩者之和作為該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。數(shù)據(jù)表中的有效數(shù)據(jù)信息會保存在信息計劃表中,在獲取實際數(shù)據(jù)的數(shù)據(jù)量時,通過信息計劃表分別獲取數(shù)據(jù)庫中有效數(shù)據(jù)長度值和有效索引長度值,其總和作為該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。在本發(fā)明的一個實施例中,步驟S130中根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理包括:計算該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量的差值,獲得無效數(shù)據(jù)量的大?。挥嬎悴钪嫡荚摂?shù)據(jù)表的整體文件數(shù)據(jù)量的比例值,獲得無效數(shù)據(jù)量所占的比例;當(dāng)比例值大于第二預(yù)設(shè)值時,確定需要對該數(shù)據(jù)表進(jìn)行處理,否則不進(jìn)行處理。這里的第二預(yù)設(shè)值可根據(jù)數(shù)據(jù)庫自身的屬性進(jìn)行設(shè)定,例如,數(shù)據(jù)表的數(shù)據(jù)量大小為100G,當(dāng)無效數(shù)據(jù)所占的比例大于10%時,對數(shù)據(jù)表進(jìn)行處理。在本發(fā)明的一個實施例中,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收包括兩種方式:(1)采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排,以回收該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間。因為已經(jīng)刪除的無效數(shù)據(jù)分布在數(shù)據(jù)表中的不同位置,而且它會一直存在,除非有新的數(shù)據(jù)寫入將該無效數(shù)據(jù)覆蓋,但是對于順序?qū)懭氲男聰?shù)據(jù),需要一定量的空間,某個無效數(shù)據(jù)無法提供這個大的空間,那么該無效數(shù)據(jù)就不會被覆蓋,順序?qū)懭氲男聰?shù)據(jù)會繼續(xù)寫道數(shù)據(jù)表下面未被占用的新的空間。這樣就會使無效數(shù)據(jù)無法被覆蓋,一直占用數(shù)據(jù)表的磁盤空間,造成資源浪費。所以,本實施例中,可以對數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排,即改表處理,將有效數(shù)據(jù)按順序排列,置于數(shù)據(jù)表前面的位置,無效數(shù)據(jù)就會置于數(shù)據(jù)表下面的位置,易于被新寫入的數(shù)據(jù)覆蓋。例如,數(shù)據(jù)表未進(jìn)行處理前的數(shù)據(jù)排列是date1、date2、date3、date4、date5,這里date3是無效數(shù)據(jù),那么改表后,變成date1、date2、date4、date5、date3。需要說明的是,在進(jìn)行改表操作的時候可以直接調(diào)用PT工具,且改表進(jìn)行過程中不會進(jìn)行鎖表,依然可以對數(shù)據(jù)表進(jìn)行寫入、查詢等正常操作。(2)利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收?;厥彰顚儆跀?shù)據(jù)庫自己的處理方式,只需要調(diào)用回收的腳本即可。雖然這種方式的速度較快,但是這種方式會進(jìn)行鎖表,數(shù)據(jù)庫無法進(jìn)行正常的寫入、查詢等操作。所以,在數(shù)據(jù)庫量小、訪問量較小的請情況下可以進(jìn)行該方法的處理。在本發(fā)明的一個實施例中,步驟S140中的在對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收之前,圖1所示的方法進(jìn)一步包括:對該數(shù)據(jù)庫的訪問量分布進(jìn)行統(tǒng)計;如果該數(shù)據(jù)庫存在訪問量低于第三預(yù)設(shè)值的時間段,則在該時間段登錄數(shù)據(jù)庫,利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收;如果該數(shù)據(jù)庫不存在訪問量低于第三預(yù)設(shè)值的時間段,則采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排。雖然已經(jīng)知道某一個數(shù)據(jù)表需要進(jìn)行回收處理了,但是為了不影響數(shù)據(jù)庫的正常業(yè)務(wù),可以對數(shù)據(jù)庫的訪問時間分布進(jìn)行統(tǒng)計,在訪問量低于第三預(yù)設(shè)值的時候進(jìn)行數(shù)據(jù)庫自己的回收處理,這個時候需要鎖表;如果該數(shù)據(jù)表的訪問量一直很大,那么就不能采用鎖表回收的方式,則通過對數(shù)據(jù)庫進(jìn)行改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排。該第三預(yù)設(shè)值可以根據(jù)實際情況設(shè)定。圖2示出了根據(jù)本發(fā)明一個實施例的一種提高數(shù)據(jù)庫的有效存儲空間的裝置的結(jié)構(gòu)示意圖。如圖2所示,該提高數(shù)據(jù)庫的有效存儲空間的裝置包括:選定單元210,適于選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表.對于一個或多個數(shù)據(jù)表中的每個數(shù)據(jù)表:數(shù)據(jù)量獲取單元220,適于獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量,以及獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。因為數(shù)據(jù)表中被刪除的數(shù)據(jù)仍存在,且被刪除的數(shù)據(jù)屬于無效數(shù)據(jù),數(shù)據(jù)表中的整體文件的數(shù)據(jù)量就包括有效數(shù)據(jù)和無效數(shù)據(jù)。為了確定該數(shù)據(jù)表是否需要進(jìn)行無效數(shù)據(jù)的清理,提高數(shù)據(jù)表的有效存儲空間,需要獲取該數(shù)據(jù)表的整體穩(wěn)健數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量,以獲得該數(shù)據(jù)表中的無效數(shù)據(jù)的數(shù)據(jù)量。在本發(fā)明的一個實施例中,可以通過“information_schema.tables”獲取數(shù)據(jù)表,通過讀的方式獲取該數(shù)據(jù)表的文件數(shù)據(jù)量以及通過“(truncate(DATA_LENGTH/1024+INDEX_LENGTH/1024,0))”、“TABLE_ROWS”獲取數(shù)據(jù)表的實際數(shù)據(jù)量。處理確定單元230,適于根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理。根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量可以獲得無效數(shù)據(jù)的數(shù)據(jù)量,根據(jù)無效數(shù)據(jù)量的大小或者占用的比例進(jìn)行判斷該數(shù)據(jù)表是否需要處理。處理執(zhí)行單元240,適于如果確定需要對該數(shù)據(jù)表進(jìn)行處理,則對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收。如果無效數(shù)據(jù)量的大小或者占用的比例已經(jīng)超過閾值,就確定該數(shù)據(jù)表需要處理,進(jìn)而對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收??梢?,本裝置通過清理無效數(shù)據(jù)的存儲空間的方式,釋放磁盤空間的浪費空間,有效防止因無效數(shù)據(jù)的占用而造成的磁盤空間的浪費。數(shù)據(jù)表的存儲空間一定,但是已經(jīng)存儲的數(shù)據(jù)量不一定都很大,對于存儲量較小的數(shù)據(jù)表來說,可以不需要進(jìn)行無效數(shù)據(jù)的存儲空間的回收,就能滿足新數(shù)據(jù)的存儲需求。但是對于數(shù)據(jù)表中本身的數(shù)據(jù)量就很大的情況下,如果不及時處理,就可能引起數(shù)據(jù)寫不進(jìn)去的后果。所以,在本發(fā)明的一個實施例中,選定單元210,適于選定數(shù)據(jù)庫中的整體文件數(shù)據(jù)量大于第一預(yù)設(shè)值的數(shù)據(jù)表。這里的第一預(yù)設(shè)值可以根據(jù)數(shù)據(jù)表自身的屬性進(jìn)行設(shè)定,例如,數(shù)據(jù)表總共可以容納1千萬條數(shù)據(jù),那么就可以設(shè)定第一預(yù)設(shè)值為7百萬條,當(dāng)超過7百萬條數(shù)據(jù)的時候,為了提高數(shù)據(jù)表的有效存儲空間,就對該數(shù)據(jù)表進(jìn)行處理。在本發(fā)明的一個實施例中,數(shù)據(jù)量獲取單元220,適于獲取該數(shù)據(jù)表中的索引文件大小和數(shù)據(jù)文件大小,以及獲取該數(shù)據(jù)表中的分區(qū)數(shù)據(jù)的數(shù)據(jù)量大??;取三者之和作為該數(shù)據(jù)表的整體文件數(shù)據(jù)量。數(shù)據(jù)表中的整體文件應(yīng)該包含所有占用數(shù)據(jù)表磁盤空間的所有文件,包括:數(shù)據(jù)表中的數(shù)據(jù)文件,索引文件。還需要指出的是,還包括數(shù)據(jù)表中的分區(qū)表數(shù)據(jù)。為了滿足大數(shù)據(jù)庫的管理,需要創(chuàng)建和使用分區(qū)表和分區(qū)索引,分區(qū)表允許將數(shù)據(jù)分成為分區(qū)甚至子分區(qū),即將數(shù)據(jù)分成塊,以便對大量數(shù)據(jù)的進(jìn)行更好的管理,這里的每個分區(qū)可以單獨管理,可以不依賴其他分區(qū)而單獨發(fā)揮作用,因此可以提供更具有可用性的結(jié)構(gòu)??梢?,分區(qū)表也占用數(shù)據(jù)表的磁盤空間,也會包含無效數(shù)據(jù),在進(jìn)行數(shù)據(jù)表的整體文件數(shù)據(jù)量的獲取時,也需要獲取數(shù)據(jù)表中的分區(qū)表的數(shù)據(jù)量。將上述的數(shù)據(jù)文件、索引文件和分區(qū)文件的總和作為該數(shù)據(jù)表的整體文件數(shù)據(jù)量。在本發(fā)明的一個實施例中,數(shù)據(jù)量獲取單元220,適于從該數(shù)據(jù)庫的信息計劃表中獲取該數(shù)據(jù)庫中的有效數(shù)據(jù)長度值和有效索引長度值,以兩者之和作為該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。數(shù)據(jù)表中的有效數(shù)據(jù)信息會保存在信息計劃表中,在獲取實際數(shù)據(jù)的數(shù)據(jù)量時,通過信息計劃表分別獲取數(shù)據(jù)庫中有效數(shù)據(jù)長度值和有效索引長度值,其總和作為該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。在本發(fā)明的一個實施例中,處理確定單元230,適于計算該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量的差值,獲得無效數(shù)據(jù)量的大?。挥嬎悴钪嫡荚摂?shù)據(jù)表的整體文件數(shù)據(jù)量的比例值,獲得無效數(shù)據(jù)量所占的比例;當(dāng)比例值大于第二預(yù)設(shè)值時,確定需要對該數(shù)據(jù)表進(jìn)行處理,否則不進(jìn)行處理。這里的第二預(yù)設(shè)值可根據(jù)數(shù)據(jù)庫自身的屬性進(jìn)行設(shè)定,例如,數(shù)據(jù)表的數(shù)據(jù)量大小為100G,當(dāng)無效數(shù)據(jù)所占的比例大于10%時,對數(shù)據(jù)表進(jìn)行處理。在本發(fā)明的一個實施例中,處理執(zhí)行單元240適于:(1)采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排,以回收該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間。因為已經(jīng)刪除的無效數(shù)據(jù)分布在數(shù)據(jù)表中的不同位置,而且它會一直存在,除非有新的數(shù)據(jù)寫入將該無效數(shù)據(jù)覆蓋,但是對于順序?qū)懭氲男聰?shù)據(jù),需要一定量的空間,某個無效數(shù)據(jù)無法提供這個大的空間,那么該無效數(shù)據(jù)就不會被覆蓋,順序?qū)懭氲男聰?shù)據(jù)會繼續(xù)寫道數(shù)據(jù)表下面未被占用的新的空間。這樣就會使無效數(shù)據(jù)無法被覆蓋,一直占用數(shù)據(jù)表的磁盤空間,造成資源浪費。所以,本實施例中,可以對數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排,即改表處理,將有效數(shù)據(jù)按順序排列,置于數(shù)據(jù)表前面的位置,無效數(shù)據(jù)就會置于數(shù)據(jù)表下面的位置,易于被新寫入的數(shù)據(jù)覆蓋。例如,數(shù)據(jù)表未進(jìn)行處理前的數(shù)據(jù)排列是date1、date2、date3、date4、date5,這里date3是無效數(shù)據(jù),那么改表后,變成date1、date2、date4、date5、date3。需要說明的是,在進(jìn)行改表操作的時候可以直接調(diào)用PT工具,且改表進(jìn)行過程中不會進(jìn)行鎖表,依然可以對數(shù)據(jù)表進(jìn)行寫入、查詢等正常操作。(2)適于利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收?;厥彰顚儆跀?shù)據(jù)庫自己的處理方式,只需要調(diào)用回收的腳本即可。雖然這種方式的速度較快,但是這種方式會進(jìn)行鎖表,數(shù)據(jù)庫無法進(jìn)行正常的寫入、查詢等操作。所以,在數(shù)據(jù)庫量小、訪問量較小的請情況下可以進(jìn)行該方法的處理。在本發(fā)明的一個實施例中,處理執(zhí)行單元240,進(jìn)一步適于對該數(shù)據(jù)庫的訪問量分布進(jìn)行統(tǒng)計;如果該數(shù)據(jù)庫存在訪問量低于第三預(yù)設(shè)值的時間段,則在該時間段登錄數(shù)據(jù)庫,利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收;如果該數(shù)據(jù)庫不存在訪問量低于第三預(yù)設(shè)值的時間段,則采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排。雖然已經(jīng)知道某一個數(shù)據(jù)表需要進(jìn)行回收處理了,但是為了不影響數(shù)據(jù)庫的正常業(yè)務(wù),可以對數(shù)據(jù)庫的訪問時間分布進(jìn)行統(tǒng)計,在訪問量低于第三預(yù)設(shè)值的時候進(jìn)行數(shù)據(jù)庫自己的回收處理,這個時候需要鎖表;如果該數(shù)據(jù)表的訪問量一直很大,那么就不能采用鎖表回收的方式,則通過對數(shù)據(jù)庫進(jìn)行改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排。該第三預(yù)設(shè)值可以根據(jù)實際情況設(shè)定。根據(jù)本發(fā)明的技術(shù)方案,首先判斷數(shù)據(jù)表是否需要清理無效數(shù)據(jù),選定數(shù)據(jù)庫中的一個或者多個數(shù)據(jù)表,并獲取該數(shù)據(jù)表的整體文件的數(shù)據(jù)量,以及該數(shù)據(jù)表的實際有效數(shù)據(jù)量,通過該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理,如果數(shù)據(jù)表中的無效數(shù)據(jù)量過大,就確定需要對該數(shù)據(jù)表進(jìn)行處理,為了清理無效數(shù)據(jù)占用的磁盤空間,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收。綜上所述,本發(fā)明通過清理無效數(shù)據(jù)的存儲空間的方式,釋放磁盤空間的浪費空間,有效防止因無效數(shù)據(jù)的占用而造成的磁盤空間的浪費。需要說明的是:在此提供的算法和顯示不與任何特定計算機(jī)、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細(xì)節(jié)的情況下實踐。在一些實例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實施例的任意之一都可以以任意的組合方式來使用。本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的提高數(shù)據(jù)庫的有效存儲空間的裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機(jī)程序和計算機(jī)程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機(jī)可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。應(yīng)該注意的是上述實施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機(jī)來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。本發(fā)明公開了A1、一種提高數(shù)據(jù)庫的有效存儲空間的方法,包括:選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表;對于所述一個或多個數(shù)據(jù)表中的每個數(shù)據(jù)表:獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量,以及獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量;根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理;如果確定需要對該數(shù)據(jù)表進(jìn)行處理,則對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收。A2、如A1所述的方法,其中,所述選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表包括:選定數(shù)據(jù)庫中的整體文件數(shù)據(jù)量大于第一預(yù)設(shè)值的數(shù)據(jù)表。A3、如A1所述的方法,其中,所述獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量包括:獲取該數(shù)據(jù)表中的索引文件大小和數(shù)據(jù)文件大小,以及獲取該數(shù)據(jù)表中的分區(qū)數(shù)據(jù)的數(shù)據(jù)量大??;取三者之和作為該數(shù)據(jù)表的整體文件數(shù)據(jù)量。A4、如A1所述的方法,其中,所述獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量包括:從該數(shù)據(jù)庫的信息計劃表中獲取該數(shù)據(jù)庫中的有效數(shù)據(jù)長度值和有效索引長度值,以兩者之和作為該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。A5、如A1所述的方法,其中,所述根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理包括:計算該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量的差值;計算所述差值占該數(shù)據(jù)表的整體文件數(shù)據(jù)量的比例值;當(dāng)所述比例值大于第二預(yù)設(shè)值時,確定需要對該數(shù)據(jù)表進(jìn)行處理。A6、如A1-A5中任一項所述的方法,其中,所述對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收包括:采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排,以回收該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間;或者,利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收。A7、如A6所述的方法,其中,在對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收之前,該方法進(jìn)一步包括:對該數(shù)據(jù)庫的訪問量分布進(jìn)行統(tǒng)計;如果該數(shù)據(jù)庫存在訪問量低于第三預(yù)設(shè)值的時間段,則在該時間段登錄數(shù)據(jù)庫,利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收;如果該數(shù)據(jù)庫不存在訪問量低于第三預(yù)設(shè)值的時間段,則采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排。本發(fā)明還公開了B8、一種提高數(shù)據(jù)庫的有效存儲空間的裝置,其中,該裝置包括:選定單元,適于選定數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表;對于所述一個或多個數(shù)據(jù)表中的每個數(shù)據(jù)表:數(shù)據(jù)量獲取單元,適于獲取該數(shù)據(jù)表的整體文件數(shù)據(jù)量,以及獲取該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量;處理確定單元,適于根據(jù)該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量確定是否需要對該數(shù)據(jù)表進(jìn)行處理;處理執(zhí)行單元,適于如果確定需要對該數(shù)據(jù)表進(jìn)行處理,則對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收。B9、如B8所述的裝置,其中,所述選定單元,適于選定數(shù)據(jù)庫中的整體文件數(shù)據(jù)量大于第一預(yù)設(shè)值的數(shù)據(jù)表。B10、如B8所述的裝置,其中,所述數(shù)據(jù)量獲取單元,適于獲取該數(shù)據(jù)表中的索引文件大小和數(shù)據(jù)文件大小,以及獲取該數(shù)據(jù)表中的分區(qū)數(shù)據(jù)的數(shù)據(jù)量大??;取三者之和作為該數(shù)據(jù)表的整體文件數(shù)據(jù)量。B11、如B8所述的裝置,其中,所述數(shù)據(jù)量獲取單元,適于從該數(shù)據(jù)庫的信息計劃表中獲取該數(shù)據(jù)庫中的有效數(shù)據(jù)長度值和有效索引長度值,以兩者之和作為該數(shù)據(jù)表中的實際有效數(shù)據(jù)的數(shù)據(jù)量。B12、如B8所述的裝置,其中,所述處理確定單元,適于計算該數(shù)據(jù)表的整體文件數(shù)據(jù)量和實際有效數(shù)據(jù)的數(shù)據(jù)量的差值;計算所述差值占該數(shù)據(jù)表的整體文件數(shù)據(jù)量的比例值;當(dāng)所述比例值大于第二預(yù)設(shè)值時,確定需要對該數(shù)據(jù)表進(jìn)行處理。B13、如B8-B12中任一項所述的裝置,其中,所述處理執(zhí)行單元,適于采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排,以回收該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間;或者,適于利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收。B14、如B13所述的裝置,其中,所述處理執(zhí)行單元,進(jìn)一步適于對該數(shù)據(jù)庫的訪問量分布進(jìn)行統(tǒng)計;如果該數(shù)據(jù)庫存在訪問量低于第三預(yù)設(shè)值的時間段,則在該時間段登錄數(shù)據(jù)庫,利用數(shù)據(jù)庫自身的回收命令,對該數(shù)據(jù)表中的無效數(shù)據(jù)的存儲空間進(jìn)行回收;如果該數(shù)據(jù)庫不存在訪問量低于第三預(yù)設(shè)值的時間段,則采用改表的方式將該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行重排。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3