本發(fā)明涉及數(shù)據(jù)庫
技術(shù)領(lǐng)域:
:,特別是涉及一種統(tǒng)計信息收集方法和裝置。
背景技術(shù):
::在數(shù)據(jù)庫中,統(tǒng)計信息主要指的是用于描述數(shù)據(jù)庫中表和索引的大小、規(guī)模,以及數(shù)據(jù)分布狀況等的一類信息,例如,表的行數(shù)、表的塊數(shù)、平均每行的大小、索引的根塊數(shù)、索引字段的行數(shù)及索引的最大、最小值等,都屬于統(tǒng)計信息。數(shù)據(jù)庫可根據(jù)收集的統(tǒng)計信息計算出不同訪問路徑及join(連接)方式下各執(zhí)行計劃的成本,從而確定出最小成本的執(zhí)行計劃,用于執(zhí)行SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)語句。傳統(tǒng)的統(tǒng)計信息收集方式,一般都使用數(shù)據(jù)庫自帶的統(tǒng)計信息采集工具進(jìn)行收集,收集的方式較為簡單,導(dǎo)致收集的統(tǒng)計信息可能出現(xiàn)不準(zhǔn)確的情況。技術(shù)實現(xiàn)要素:基于此,有必要提供一種統(tǒng)計信息收集方法,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。此外,還有必要提供一種統(tǒng)計信息收集裝置,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。一種統(tǒng)計信息收集方法,包括:獲取變更操作記錄;分析所述變更操作記錄,得到所述變更操作記錄對應(yīng)的操作類型;獲取與所述操作類型對應(yīng)的預(yù)設(shè)的變更操作;當(dāng)所述變更操作記錄中包含所述預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)所述收集模板收集新統(tǒng)計信息。在其中一個實施例中,所述操作類型包括表操作;所述當(dāng)所述變更操作記錄中包含所述預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)所述收集模板收集新統(tǒng)計信息,包括:當(dāng)所述操作類型為表操作的變更操作記錄中包含新建表操作,則判斷包含所述新建表操作的變更操作記錄中是否進(jìn)行數(shù)據(jù)初始化,若進(jìn)行,則收集與所述新建表操作對應(yīng)的數(shù)據(jù)表的新統(tǒng)計信息;和/或當(dāng)所述操作類型為表操作的變更操作記錄中包含刪除表所有行操作或表結(jié)構(gòu)在線重定義操作,則備份與所述刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的舊統(tǒng)計信息,并收集與所述刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的新統(tǒng)計信息。在其中一個實施例中,所述操作類型包括表操作;所述當(dāng)所述變更操作記錄中包含所述預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)所述收集模板收集新統(tǒng)計信息,包括:若所述操作類型為表操作的變更操作記錄中包含表結(jié)構(gòu)變更操作,則判斷所述表結(jié)構(gòu)變更操作是否為字段變更操作;若所述表結(jié)構(gòu)變更操作是字段變更操作,則備份與所述字段變更操作對應(yīng)的數(shù)據(jù)表的舊統(tǒng)計信息,并收集與所述字段變更操作對應(yīng)的數(shù)據(jù)表的新統(tǒng)計信息;若所述表結(jié)構(gòu)變更操作是表分區(qū)操作,當(dāng)所述表分區(qū)操作為新增分區(qū)操作,則收集與所述新增分區(qū)操作關(guān)聯(lián)的分區(qū)的新統(tǒng)計信息,當(dāng)所述表分區(qū)操作為合并分區(qū)操作或拆分分區(qū)操作,則備份與所述合并分區(qū)操作或拆分分區(qū)操作關(guān)聯(lián)的分區(qū)的舊統(tǒng)計信息,并收集與所述合并分區(qū)操作或拆分分區(qū)操作關(guān)聯(lián)的分區(qū)的新統(tǒng)計信息。在其中一個實施例中,在所述當(dāng)所述變更操作記錄中包含所述預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)所述收集模板收集新統(tǒng)計信息的步驟之后,還包括:根據(jù)所述操作類型為表操作的變更操作記錄中包含的變更操作確定DML對象;根據(jù)記錄DML執(zhí)行情況的文件判斷屬于所述DML對象的DML數(shù)量是否達(dá)到預(yù)設(shè)數(shù)值;若達(dá)到,則根據(jù)預(yù)設(shè)的配置項判斷是否啟用新統(tǒng)計信息,若是,則啟用收集的新統(tǒng)計信息,若否,則恢復(fù)備份的舊統(tǒng)計信息。在其中一個實施例中,所述操作類型包括索引操作;所述當(dāng)所述變更操作記錄中包含所述預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)所述收集模板收集新統(tǒng)計信息,包括:若所述操作類型為索引操作的變更操作記錄中包含新建索引操作,則收集與所述新建索引操作對應(yīng)的索引的新統(tǒng)計信息;和/或若所述操作類型為索引操作的變更操作記錄中包含重建索引操作,則備份與所述重建索引操作對應(yīng)的索引的舊統(tǒng)計信息,并收集與所述重建索引操作對應(yīng)的索引的新統(tǒng)計信息后,恢復(fù)所述舊統(tǒng)計信息。一種統(tǒng)計信息收集裝置,包括:記錄獲取模塊,用于獲取變更操作記錄;分析模塊,用于分析所述變更操作記錄,得到所述變更操作記錄對應(yīng)的操作類型;操作獲取模塊,用于獲取與所述操作類型對應(yīng)的預(yù)設(shè)的變更操作;收集模塊,用于當(dāng)所述變更操作記錄中包含所述預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)所述收集模板收集新統(tǒng)計信息。在其中一個實施例中,所述操作類型包括表操作;所述收集模塊,包括:新建表收集單元,用于當(dāng)所述操作類型為表操作的變更操作記錄中包含新建表操作,則判斷包含所述新建表操作的變更操作記錄中是否進(jìn)行數(shù)據(jù)初始化,若進(jìn)行,則收集與所述新建表操作對應(yīng)的數(shù)據(jù)表的新統(tǒng)計信息;和/或表結(jié)構(gòu)重定義收集單元,用于當(dāng)所述操作類型為表操作的變更操作記錄中包含刪除表所有行操作或表結(jié)構(gòu)在線重定義操作,則備份與所述刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的舊統(tǒng)計信息,并收集與所述刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的新統(tǒng)計信息。在其中一個實施例中,所述操作類型包括表操作;所述收集模塊,包括:表結(jié)構(gòu)變更收集單元,用于若所述操作類型為表操作的變更操作記錄中包含表結(jié)構(gòu)變更操作,則判斷所述表結(jié)構(gòu)變更操作是否為字段變更操作;若所述表結(jié)構(gòu)變更操作是字段變更操作,則備份與所述字段變更操作對應(yīng)的數(shù)據(jù)表的舊統(tǒng)計信息,并收集與所述字段變更操作對應(yīng)的數(shù)據(jù)表的新統(tǒng)計信息;若所述表結(jié)構(gòu)變更操作是表分區(qū)操作,當(dāng)所述表分區(qū)操作為新增分區(qū)操作,則收集與所述新增分區(qū)操作關(guān)聯(lián)的分區(qū)的新統(tǒng)計信息,當(dāng)所述表分區(qū)操作為合并分區(qū)操作或拆分分區(qū)操作,則備份與所述合并分區(qū)操作或拆分分區(qū)操作關(guān)聯(lián)的分區(qū)的舊統(tǒng)計信息,并收集與所述合并分區(qū)操作或拆分分區(qū)操作關(guān)聯(lián)的分區(qū)的新統(tǒng)計信息。在其中一個實施例中,所述裝置還包括:確定模塊,用于根據(jù)所述操作類型為表操作的變更操作記錄中包含的變更操作確定DML對象;判斷模塊,用于根據(jù)記錄DML執(zhí)行情況的文件判斷屬于所述DML對象的DML數(shù)量是否達(dá)到預(yù)設(shè)數(shù)值;啟用模塊,用于若所述數(shù)據(jù)庫變更操作數(shù)據(jù)中屬于所述DML對象的DML數(shù)量達(dá)到所述預(yù)設(shè)數(shù)值,則根據(jù)預(yù)設(shè)的配置項判斷是否啟用新統(tǒng)計信息,若是,則啟用收集的新統(tǒng)計信息,若否,則恢復(fù)備份的舊統(tǒng)計信息。在其中一個實施例中,所述操作類型包括索引操作;所述收集模塊,包括:新建索引收集單元,用于若所述操作類型為索引操作的變更操作記錄中包含新建索引操作,則收集與所述新建索引操作對應(yīng)的索引的新統(tǒng)計信息;和/或重建索引收集單元,用于若所述操作類型為索引操作的變更操作記錄中包含重建索引操作,則備份與所述重建索引操作對應(yīng)的索引的舊統(tǒng)計信息,并收集與所述重建索引操作對應(yīng)的索引的新統(tǒng)計信息后,恢復(fù)所述舊統(tǒng)計信息。上述統(tǒng)計信息收集方法和裝置,通過分析獲取的變更操作記錄,得到變更操作記錄對應(yīng)的操作類型,當(dāng)變更操作記錄中包含預(yù)設(shè)的與操作類型對應(yīng)的變更操作,則根據(jù)與包含的變更操作匹配的收集模板收集新統(tǒng)計信息,針對于與不同的操作類型對應(yīng)的不同的變更操作,能根據(jù)不同的匹配的收集模板收集新統(tǒng)計信息,細(xì)化了統(tǒng)計信息的收集方式,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。此外,數(shù)據(jù)庫管理員可根據(jù)不同的業(yè)務(wù)需求針對于不同的變更操作制定不同的收集模板進(jìn)行收集,提高了制定統(tǒng)計信息收集方式的靈活性。附圖說明圖1為一個實施例中服務(wù)器的內(nèi)部結(jié)構(gòu)示意圖;圖2為一個實施例中統(tǒng)計信息收集方法的流程示意圖;圖3為一個實施例中當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息的流程示意圖;圖4為另一個實施例中當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息的流程示意圖;圖5為一個實施例中判斷是否啟用新統(tǒng)計信息的流程示意圖;圖6為又一個實施例中當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息的流程示意圖;圖7為一個實施例中統(tǒng)計信息收集裝置的結(jié)構(gòu)示意圖;圖8為一個實施例中收集模塊的內(nèi)部結(jié)構(gòu)示意圖;圖9為另一個實施例中統(tǒng)計信息收集裝置的結(jié)構(gòu)示意圖;圖10為另一個實施例中收集模塊的內(nèi)部結(jié)構(gòu)示意圖。具體實施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。圖1為一個實施例中服務(wù)器的內(nèi)部結(jié)構(gòu)示意圖。如圖1所示,該服務(wù)器包括通過系統(tǒng)總線連接的處理器、非易失性存儲介質(zhì)、內(nèi)存儲器和網(wǎng)絡(luò)接口。其中,該服務(wù)器的非易失性存儲介質(zhì)存儲有操作系統(tǒng)、數(shù)據(jù)庫和統(tǒng)計信息收集裝置,數(shù)據(jù)庫中存儲有數(shù)據(jù)庫統(tǒng)計信息,該統(tǒng)計信息收集裝置用于實現(xiàn)適用于服務(wù)器的一種統(tǒng)計信息收集方法。該服務(wù)器的處理器用于提供計算和控制能力,支撐整個服務(wù)器的運行。該服務(wù)器的內(nèi)存儲器為非易失性存儲介質(zhì)中的統(tǒng)計信息收集裝置的運行提供環(huán)境,該內(nèi)存儲器中可儲存有計算機(jī)可讀指令,該計算機(jī)可讀指令被所述處理器執(zhí)行時,可使得所述處理器執(zhí)行統(tǒng)計信息收集方法。該服務(wù)器的網(wǎng)絡(luò)接口用于據(jù)以與外部的終端通過網(wǎng)絡(luò)連接通信,比如接收終端發(fā)送的數(shù)據(jù)查詢請求等。服務(wù)器可以用獨立的服務(wù)器或者是多個服務(wù)器組成的服務(wù)器集群來實現(xiàn)。本領(lǐng)域技術(shù)人員可以理解,圖1中示出的結(jié)構(gòu),僅僅是與本申請方案相關(guān)的部分結(jié)構(gòu)的框圖,并不構(gòu)成對本申請方案所應(yīng)用于其上的服務(wù)器的限定,具體的服務(wù)器可以包括比圖中所示更多或更少的部件,或者組合某些部件,或者具有不同的部件布置。如圖2所示,提供了一種統(tǒng)計信息收集方法,包括以下步驟:步驟S210,獲取變更操作記錄。具體的,變更操作記錄用于記錄數(shù)據(jù)庫中的每一次的變更操作,變更操作指的是能使數(shù)據(jù)庫的統(tǒng)計信息發(fā)生變化的操作,例如,新建表操作、新建索引操作、新增分區(qū)操作等均屬于數(shù)據(jù)庫中的變更操作。變更操作記錄中包含有執(zhí)行的SQL語句、操作時間、操作的數(shù)據(jù)表、用戶等信息。在步驟S210獲取變更操作記錄之前,還包括:根據(jù)預(yù)設(shè)的采集方式采集數(shù)據(jù)庫變更操作數(shù)據(jù)。具體的,服務(wù)器可根據(jù)預(yù)設(shè)的采集方式從數(shù)據(jù)庫的日志文件中采集數(shù)據(jù)庫變更操作數(shù)據(jù),數(shù)據(jù)庫變更操作數(shù)據(jù)中包含有一條或多條變更操作記錄。例如,可每隔預(yù)設(shè)時間從日志文件中采集數(shù)據(jù)庫變更操作數(shù)據(jù),或是按照用戶列表采集日志文件中與該用戶列表中的用戶標(biāo)識關(guān)聯(lián)的數(shù)據(jù)表、索引等的數(shù)據(jù)庫變更操作數(shù)據(jù),但不限于此。步驟S220,分析變更操作記錄,得到變更操作記錄對應(yīng)的操作類型。具體的,可從采集的數(shù)據(jù)庫變更操作數(shù)據(jù)中獲取變更操作記錄,并對變更操作記錄進(jìn)行分析,根據(jù)預(yù)設(shè)的字符串判斷變更操作記錄對應(yīng)的操作類型,操作類型可包括表操作、索引操作等,例如,可檢測變更操作記錄中是否包含“table”字符串,若包含,則可認(rèn)為是表操作,可檢測變更操作記錄中是否包含“index”字符串,若包含,則可認(rèn)為是索引操作等,并不限于此。步驟S230,獲取與操作類型對應(yīng)的預(yù)設(shè)的變更操作。具體的,可預(yù)設(shè)設(shè)置不同的操作類型對應(yīng)的變更操作,例如,操作類型為表操作,與其對應(yīng)的預(yù)設(shè)的變更操作可包括新建表操作、刪除表所有行操作、表結(jié)構(gòu)在線重定義操作、字段變更操作等,操作類型為索引操作,與其對應(yīng)的預(yù)設(shè)的變更操作可包括新建索引操作及重建索引操作等。步驟S240,當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息。具體的,可獲取與變更操作記錄的操作類型對應(yīng)的預(yù)設(shè)的變更操作,并檢測變更操作記錄是否包含與操作類型對應(yīng)的預(yù)設(shè)的變更操作,不同的變更操作可對應(yīng)于不同的收集模板,每套收集模板制定了一套收集統(tǒng)計信息的具體規(guī)則流程,可根據(jù)與變更操作記錄中包含的變更操作匹配的收集模板,收集數(shù)據(jù)庫在執(zhí)行變更操作后的相關(guān)的數(shù)據(jù)表或索引的新統(tǒng)計信息。數(shù)據(jù)庫管理員可預(yù)先制定與不同的變更操作匹配的統(tǒng)計信息收集模板,可靈活制定數(shù)據(jù)庫執(zhí)行每個變更操作后,不同的統(tǒng)計信息收集方式。在其它的實施例中,服務(wù)器還可建立多條收集線程,使各條收集線程分別根據(jù)與變更操作記錄中包含的變更操作匹配的收集模板收集新統(tǒng)計信息,可采用并行處理的方式收集統(tǒng)計信息,提高收集效率。上述統(tǒng)計信息收集方法,通過分析獲取的變更操作記錄,得到變更操作記錄對應(yīng)的操作類型,當(dāng)變更操作記錄中包含預(yù)設(shè)的與操作類型對應(yīng)的變更操作,則根據(jù)與包含的變更操作匹配的收集模板收集新統(tǒng)計信息,針對于與不同的操作類型對應(yīng)的不同的變更操作,能根據(jù)不同的匹配的收集模板收集新統(tǒng)計信息,細(xì)化了統(tǒng)計信息的收集方式,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。此外,數(shù)據(jù)庫管理員可根據(jù)不同的業(yè)務(wù)需求針對于不同的變更操作制定不同的收集模板進(jìn)行收集,提高了制定統(tǒng)計信息收集方式的靈活性。如圖3所示,在一個實施例中,步驟S240當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息,可包括以下步驟:步驟S302,當(dāng)操作類型為表操作的變更操作記錄中包含新建表操作,則判斷包含新建表操作的變更操作記錄中是否進(jìn)行數(shù)據(jù)初始化,若是,則執(zhí)行步驟S304,若否,則執(zhí)行步驟S306。具體的,與操作類型為表操作對應(yīng)的預(yù)設(shè)的變更操作可包括新建表操作。新建表操作,即為在數(shù)據(jù)庫中創(chuàng)建一張新的數(shù)據(jù)表,可根據(jù)操作類型為表操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含新建表操作,若包含,則進(jìn)一步判斷執(zhí)行新建表操作后是否進(jìn)行數(shù)據(jù)初始化,數(shù)據(jù)初始化主要是用于初始化新建表的各項參數(shù),可包括表的大小、所屬用戶、外鍵關(guān)系等。步驟S304,收集與新建表操作對應(yīng)的數(shù)據(jù)表的新統(tǒng)計信息。具體的,若執(zhí)行新建表操作后也進(jìn)行了數(shù)據(jù)初始化,則說明已對新建的數(shù)據(jù)表的各項參數(shù)進(jìn)行了設(shè)置,可使用Cascade(級聯(lián)刪除)收集新建的數(shù)據(jù)表的新統(tǒng)計信息,具體可包括新建的數(shù)據(jù)表的行數(shù)、塊數(shù)、平均每行的大小等,使用Cascade收集新統(tǒng)計信息,即會對數(shù)據(jù)表中的列、行及索引等的統(tǒng)計信息進(jìn)行收集。步驟S306,不作處理。在一個實施例中,步驟S240當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息,可包括:當(dāng)操作類型為表操作的變更操作記錄中包含刪除表所有行操作或表結(jié)構(gòu)在線重定義操作,則備份與刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的舊統(tǒng)計信息,并收集與刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的新統(tǒng)計信息。具體的,與操作類型為表操作對應(yīng)的預(yù)設(shè)的變更操作可包括刪除表所有行操作及表結(jié)構(gòu)在線重定義操作。刪除表所有行操作(truncatetable)操作,即為快速刪除數(shù)據(jù)表中的所有記錄數(shù)據(jù),但保留數(shù)據(jù)表的結(jié)構(gòu)。表結(jié)構(gòu),主要指的是數(shù)據(jù)表中的字段、類型、主鍵、外鍵等基本屬性,表結(jié)構(gòu)在線重定義指的是在重定義表結(jié)構(gòu)的過程中不影響數(shù)據(jù)庫使用者,數(shù)據(jù)庫使用者仍然可以進(jìn)行存取、新增、修改、刪除等操作??筛鶕?jù)操作類型為表操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含刪除表所有行操作或表結(jié)構(gòu)在線重定義操作,若包含,則備份與刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的舊統(tǒng)計信息,即備份存儲執(zhí)行刪除表所有行操作或表結(jié)構(gòu)在線重定義操作之前,數(shù)據(jù)表的統(tǒng)計信息,當(dāng)需要使用舊統(tǒng)計信息時,可直接進(jìn)行調(diào)用。備份完成后,可使用Cascade收集執(zhí)行刪除表所有行操作或表結(jié)構(gòu)在線重定義操作之后,關(guān)聯(lián)的數(shù)據(jù)庫的新統(tǒng)計信息。在本實施例中,針對于與操作類型為表操作對應(yīng)的不同的變更操作,有不同的統(tǒng)計信息收集方式,細(xì)化了統(tǒng)計信息的收集方式,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。如圖4所示,在一個實施例中,步驟S240當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息,可包括以下步驟:步驟S402,若操作類型為表操作的變更操作記錄中包含表結(jié)構(gòu)變更操作,則判斷表結(jié)構(gòu)變更操作是否為字段變更操作,若是,則執(zhí)行步驟S404,若否,則執(zhí)行步驟S406。具體的,與操作類型為表操作對應(yīng)的預(yù)設(shè)的變更操作可包括表結(jié)構(gòu)變更操作。表結(jié)構(gòu)變更操作,指的是對表結(jié)構(gòu)進(jìn)行新增、刪除及修改等操作,可根據(jù)操作類型為表操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含表結(jié)構(gòu)變更操作,若包含,則可進(jìn)一步檢測包含的表結(jié)構(gòu)變更操作是否為字段變更操作,字段變更操作可包括新增字段、刪除字段及修改字段等。步驟S404,備份與字段變更操作對應(yīng)的數(shù)據(jù)表的舊統(tǒng)計信息,并收集與字段變更操作對應(yīng)的數(shù)據(jù)表的新統(tǒng)計信息。具體的,若變更操作記錄中包含的表結(jié)構(gòu)變更操作為字段變更操作,則可備份與字段變更操作對應(yīng)的數(shù)據(jù)表,在執(zhí)行字段變更操作之前的舊統(tǒng)計信息,并使用Cascade收集執(zhí)行字段變更操作之后的新統(tǒng)計信息。步驟S406,若表結(jié)構(gòu)變更操作是表分區(qū)操作,判斷表分區(qū)操作是否為新增分區(qū)操作,若是,則執(zhí)行步驟S408,若否,則執(zhí)行步驟S410。具體的,若變更操作記錄中包含的表結(jié)構(gòu)變更操作不是字段變更操作,可進(jìn)一步檢測該包含的表結(jié)構(gòu)變更操作是否為表分區(qū)操作,表分區(qū)操作可包括新增分區(qū)、合并分區(qū)、刪除分區(qū)、將分區(qū)表轉(zhuǎn)化為普通表,以及將普通表轉(zhuǎn)化為分區(qū)表等操作。步驟S408,收集與新增分區(qū)操作關(guān)聯(lián)的分區(qū)的新統(tǒng)計信息。具體的,數(shù)據(jù)表中可包含有多個分區(qū),每個分區(qū)下又可包含多個數(shù)據(jù)塊,當(dāng)變更操作記錄中包含的表分區(qū)操作為新增分區(qū)操作,則收集新增的分區(qū)的新統(tǒng)計信息,可包括該新增的分塊的行數(shù)、塊數(shù)、平均每行的大小等信息。步驟S410,判斷表分區(qū)操作是否為合并分區(qū)操作或拆分分區(qū)操作,若是,則執(zhí)行步驟S412,若否,則執(zhí)行步驟S414。步驟S412,備份與合并分區(qū)操作或拆分分區(qū)操作關(guān)聯(lián)的分區(qū)的舊統(tǒng)計信息,并收集與合并分區(qū)操作或拆分分區(qū)操作關(guān)聯(lián)的分區(qū)的新統(tǒng)計信息。具體的,若變更操作記錄中包含的表分區(qū)操作為合并分區(qū)操作或拆分分區(qū)操作,可先備份存儲與合并分區(qū)操作或拆分分區(qū)操作的關(guān)聯(lián)的分區(qū),在執(zhí)行合并分區(qū)操作或拆分分區(qū)操作之前的舊統(tǒng)計信息,再收集執(zhí)行合并分區(qū)操作或拆分分區(qū)操作之后的新統(tǒng)計信息。步驟S414,不作處理。在本實施例中,針對于不同的表結(jié)構(gòu)變更操作,有不同的統(tǒng)計信息收集方式,優(yōu)化了分區(qū)表的統(tǒng)計信息收集方式,大大細(xì)化了到了統(tǒng)計信息的收集方式,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。如圖5所示,在一個實施例中,在步驟S240當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息之后,還包括以下步驟:步驟S502,根據(jù)操作類型為表操作的變更操作記錄中包含的變更操作確定DML對象。具體的,DML(DataManipulationLanguage,數(shù)據(jù)操縱語言)是SQL的分類之一,其主要包括select(選擇)、update(更新)、insert(插入)、delete(刪除)四種語法。DML對象指的是執(zhí)行的DML所屬的類別對象,數(shù)據(jù)庫可記錄各個數(shù)據(jù)表的DML的執(zhí)行情況,服務(wù)器可根據(jù)與操作類型為表操作的變更操作記錄中包含的變更操作對應(yīng)的DML對象獲取DML的執(zhí)行量,從而確定DML對象的數(shù)據(jù)變化量。例如,若變更操作為字段變更操作,則對應(yīng)的DML對象為與字段變更操作對應(yīng)的數(shù)據(jù)表中的字段變更DML,若變更操作為收縮表操作,則對應(yīng)的DML對象為數(shù)據(jù)庫系統(tǒng)文件的所有執(zhí)行DML,若變更操作不屬于新建表操作或表結(jié)構(gòu)變更操作,則對應(yīng)的DML對應(yīng)為數(shù)據(jù)庫工作文件的所有執(zhí)行DML。步驟S504,根據(jù)記錄DML執(zhí)行情況的文件判斷屬于DML對象的DML數(shù)量是否達(dá)到預(yù)設(shè)數(shù)值,若是,則執(zhí)行步驟S508,若否,則執(zhí)行步驟S506。具體的,確定與操作類型為表操作的變更操作記錄中包含的變更操作對應(yīng)的DML對象后,可從記錄DML執(zhí)行情況的文件中獲取屬于該DML對象的DML數(shù)量,當(dāng)屬于該DML對象的DML數(shù)量達(dá)到預(yù)設(shè)數(shù)值,則可判斷是否啟用收集的新統(tǒng)計信息。例如,變更操作記錄中包含字段變更操作,其對應(yīng)的DML對象為與字段變更操作對應(yīng)的數(shù)據(jù)表中的字段變更DML,則可從記錄DML執(zhí)行情況的文件中獲取預(yù)設(shè)時間內(nèi)與字段變更操作對應(yīng)的數(shù)據(jù)表中,字段變更DML的數(shù)量,并判斷是否達(dá)到10%,其中,預(yù)設(shè)時間與采集數(shù)據(jù)庫變更操作數(shù)據(jù)的預(yù)設(shè)時間一致。在其它的實施例中,當(dāng)變更操作記錄中不包含與操作類型對應(yīng)的預(yù)設(shè)的變更操作,也可根據(jù)執(zhí)行的DML數(shù)量判斷是否進(jìn)行統(tǒng)計信息收集,根據(jù)記錄的執(zhí)行的DML,可確定數(shù)據(jù)表的數(shù)據(jù)變化情況,為統(tǒng)計信息的收集更新提供有用的數(shù)據(jù)依據(jù)。步驟S506,不作處理。步驟S508,根據(jù)預(yù)設(shè)的配置項判斷是否啟用新統(tǒng)計信息,若是,則執(zhí)行步驟S510,若否,則執(zhí)行步驟S512。具體的,預(yù)設(shè)的配置項可包括數(shù)據(jù)庫版本號、內(nèi)存參數(shù)、CPU(CentralProcessingUnit,中央處理器)參數(shù)、I/O(input/output)負(fù)載情況等,可根據(jù)預(yù)設(shè)的配置項進(jìn)行影響分析,判斷新統(tǒng)計信息是否會對數(shù)據(jù)庫造成性能影響,若進(jìn)行影響分析后得到新統(tǒng)計信息對數(shù)據(jù)庫的性能影響較小,則可啟用新統(tǒng)計信息,若進(jìn)行影響分析后得到新統(tǒng)計信息對數(shù)據(jù)庫的性能影響較大,則不啟用新統(tǒng)計信息,可導(dǎo)入備份的舊統(tǒng)計信息,使數(shù)據(jù)庫依然使用舊統(tǒng)計信息計算確定SQL的執(zhí)行計劃。步驟S510,啟用收集的新統(tǒng)計信息。步驟S512,恢復(fù)備份的舊統(tǒng)計信息。在本實施例中,可根據(jù)預(yù)設(shè)的配置項進(jìn)行影響分析,判斷是否啟用新統(tǒng)計信息,減少新統(tǒng)計信息對整個數(shù)據(jù)庫的性能造成影響,可有效保證數(shù)據(jù)庫的穩(wěn)定性。如圖6所示,在一個實施例中,步驟S240當(dāng)變更操作記錄中包含預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息,包括步驟S602和/或步驟S604。步驟S602,若操作類型為索引操作的變更操作記錄中包含新建索引操作,則收集與新建索引操作對應(yīng)的索引的新統(tǒng)計信息。具體的,索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。與操作類型為索引操作對應(yīng)的預(yù)設(shè)的變更操作可包括新建索引操作。新建索引操作,即在數(shù)據(jù)表中創(chuàng)建一個新的索引,可根據(jù)操作類型為索引操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含新建索引操作,若包含,則可收集新建的索引的新統(tǒng)計信息,具體可包括新建的索引的根塊數(shù)、索引字段的行數(shù)及索引的最大、最小值等。步驟S604,若操作類型為索引操作的變更操作記錄中包含重建索引操作,則備份與重建索引操作對應(yīng)的索引的舊統(tǒng)計信息,并收集與重建索引操作對應(yīng)的索引的新統(tǒng)計信息后,恢復(fù)舊統(tǒng)計信息。具體的,與操作類型為索引操作對應(yīng)的預(yù)設(shè)的變更操作可包括重建索引操作,當(dāng)一個索引的結(jié)構(gòu)發(fā)生了偏差,造成傾斜,從而在進(jìn)行數(shù)據(jù)查詢時導(dǎo)致空間浪費,則可執(zhí)行重建索引操作對索引進(jìn)行重建。重建索引操作與新建索引操作的區(qū)別在于,重建索引操作是在原有的索引的基礎(chǔ)之上進(jìn)行重建(rebuild),而新建索引操作則是直接創(chuàng)建(create)一個新的索引??筛鶕?jù)操作類型為索引操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含重建索引操作,若包含,則可備份需要進(jìn)行重建的索引在執(zhí)行重建索引操作之前的舊統(tǒng)計信息,并收集重建后的索引的新統(tǒng)計信息,對新統(tǒng)計信息進(jìn)行備份后,可導(dǎo)入之前備份的舊統(tǒng)計信息,保證索引重建后的穩(wěn)定性。在本實施例中,針對于與操作類型為索引操作對應(yīng)的不同的變更操作,有不同的統(tǒng)計信息收集方式,細(xì)化了統(tǒng)計信息的收集方式,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。如圖7所示,提供一種統(tǒng)計信息收集裝置,包括記錄獲取模塊710、分析模塊720、操作獲取模塊730及收集模塊740。記錄獲取模塊710,用于獲取變更操作記錄。具體的,變更操作記錄用于記錄數(shù)據(jù)庫中的每一次的變更操作,變更操作指的是能使數(shù)據(jù)庫的統(tǒng)計信息發(fā)生變化的操作,例如,新建表操作、新建索引操作、新增分區(qū)操作等均屬于數(shù)據(jù)庫中的變更操作。變更操作記錄中包含有執(zhí)行的SQL語句、操作時間、操作的數(shù)據(jù)表、用戶等信息。記錄獲取模塊710,還用于根據(jù)預(yù)設(shè)的采集方式采集數(shù)據(jù)庫變更操作數(shù)據(jù)。具體的,服務(wù)器可根據(jù)預(yù)設(shè)的采集方式從數(shù)據(jù)庫的日志文件中采集數(shù)據(jù)庫變更操作數(shù)據(jù),數(shù)據(jù)庫變更操作數(shù)據(jù)中包含有一條或多條變更操作記錄。例如,可每隔預(yù)設(shè)時間從日志文件中采集數(shù)據(jù)庫變更操作數(shù)據(jù),或是按照用戶列表采集日志文件中與該用戶列表中的用戶標(biāo)識關(guān)聯(lián)的數(shù)據(jù)表、索引等的數(shù)據(jù)庫變更操作數(shù)據(jù),但不限于此。分析模塊720,用于分析變更操作記錄,得到變更操作記錄對應(yīng)的操作類型。具體的,可從采集的數(shù)據(jù)庫變更操作數(shù)據(jù)中獲取變更操作記錄,并對變更操作記錄進(jìn)行分析,根據(jù)預(yù)設(shè)的字符串判斷變更操作記錄對應(yīng)的操作類型,操作類型可包括表操作、索引操作等,例如,可檢測變更操作記錄中是否包含“table”字符串,若包含,則可認(rèn)為是表操作,可檢測變更操作記錄中是否包含“index”字符串,若包含,則可認(rèn)為是索引操作等,并不限于此。操作獲取模塊730,用于獲取與操作類型對應(yīng)的預(yù)設(shè)的變更操作。具體的,可預(yù)設(shè)設(shè)置不同的操作類型對應(yīng)的變更操作,例如,操作類型為表操作,與其對應(yīng)的預(yù)設(shè)的變更操作可包括新建表操作、刪除表所有行操作、表結(jié)構(gòu)在線重定義操作、字段變更操作等,操作類型為索引操作,與其對應(yīng)的預(yù)設(shè)的變更操作可包括新建索引操作及重建索引操作等。收集模塊740,用于當(dāng)變更操作記錄中包含所述預(yù)設(shè)的變更操作,則獲取與包含的變更操作匹配的收集模板,并根據(jù)收集模板收集新統(tǒng)計信息。具體的,可獲取與變更操作記錄的操作類型對應(yīng)的預(yù)設(shè)的變更操作,并檢測變更操作記錄是否包含與操作類型對應(yīng)的預(yù)設(shè)的變更操作,不同的變更操作可對應(yīng)于不同的收集模板,每套收集模板制定了一套收集統(tǒng)計信息的具體規(guī)則流程,可根據(jù)與變更操作記錄中包含的變更操作匹配的收集模板,收集數(shù)據(jù)庫在執(zhí)行變更操作后的相關(guān)的數(shù)據(jù)表或索引的新統(tǒng)計信息。數(shù)據(jù)庫管理員可預(yù)先制定與不同的變更操作匹配的統(tǒng)計信息收集模板,可靈活制定數(shù)據(jù)庫執(zhí)行每個變更操作后,不同的統(tǒng)計信息收集方式。在其它的實施例中,服務(wù)器還可建立多條收集線程,使各條收集線程分別根據(jù)與變更操作記錄中包含的變更操作匹配的收集模板收集新統(tǒng)計信息,可采用并行處理的方式收集統(tǒng)計信息,提高收集效率。上述統(tǒng)計信息收集裝置,通過分析獲取的變更操作記錄,得到變更操作記錄對應(yīng)的操作類型,當(dāng)變更操作記錄中包含預(yù)設(shè)的與操作類型對應(yīng)的變更操作,則根據(jù)與包含的變更操作匹配的收集模板收集新統(tǒng)計信息,針對于與不同的操作類型對應(yīng)的不同的變更操作,能根據(jù)不同的匹配的收集模板收集新統(tǒng)計信息,細(xì)化了統(tǒng)計信息的收集方式,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。此外,數(shù)據(jù)庫管理員可根據(jù)不同的業(yè)務(wù)需求針對于不同的變更操作制定不同的收集模板進(jìn)行收集,提高了制定統(tǒng)計信息收集方式的靈活性。如圖8所示,在一個實施例中,收集模塊740包括新建表收集單742和/或同結(jié)構(gòu)重定義收集單元744和/或表結(jié)構(gòu)變更收集單元746。新建表收集單742,用于當(dāng)操作類型為表操作的變更操作記錄中包含新建表操作,則判斷包含新建表操作的變更操作記錄中是否進(jìn)行數(shù)據(jù)初始化,若進(jìn)行,則收集與新建表操作對應(yīng)的數(shù)據(jù)表的新統(tǒng)計信息。具體的,與操作類型為表操作對應(yīng)的預(yù)設(shè)的變更操作可包括新建表操作。新建表操作,即為在數(shù)據(jù)庫中創(chuàng)建一張新的數(shù)據(jù)表,可根據(jù)操作類型為表操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含新建表操作,若包含,則進(jìn)一步判斷執(zhí)行新建表操作后是否進(jìn)行數(shù)據(jù)初始化,數(shù)據(jù)初始化主要是用于初始化新建表的各項參數(shù),可包括表的大小、所屬用戶、外鍵關(guān)系等。若執(zhí)行新建表操作后也進(jìn)行了數(shù)據(jù)初始化,則說明已對新建的數(shù)據(jù)表的各項參數(shù)進(jìn)行了設(shè)置,可使用Cascade收集新建的數(shù)據(jù)表的新統(tǒng)計信息,具體可包括新建的數(shù)據(jù)表的行數(shù)、塊數(shù)、平均每行的大小等,使用Cascade收集新統(tǒng)計信息,即會對數(shù)據(jù)表中的列、行及索引等的統(tǒng)計信息進(jìn)行收集。表結(jié)構(gòu)重定義收集單元744,用于當(dāng)操作類型為表操作的變更操作記錄中包含刪除表所有行操作或表結(jié)構(gòu)在線重定義操作,則備份與刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的舊統(tǒng)計信息,并收集與刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的新統(tǒng)計信息。具體的,與操作類型為表操作對應(yīng)的預(yù)設(shè)的變更操作可包括刪除表所有行操作及表結(jié)構(gòu)在線重定義操作。刪除表所有行操作(truncatetable)操作,即為快速刪除數(shù)據(jù)表中的所有記錄數(shù)據(jù),但保留數(shù)據(jù)表的結(jié)構(gòu)。表結(jié)構(gòu),主要指的是數(shù)據(jù)表中的字段、類型、主鍵、外鍵等基本屬性,表結(jié)構(gòu)在線重定義指的是在重定義表結(jié)構(gòu)的過程中不影響數(shù)據(jù)庫使用者,數(shù)據(jù)庫使用者仍然可以進(jìn)行存取、新增、修改、刪除等操作??筛鶕?jù)操作類型為表操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含刪除表所有行操作或表結(jié)構(gòu)在線重定義操作,若包含,則備份與刪除表所有行操作或表結(jié)構(gòu)在線重定義操作關(guān)聯(lián)的數(shù)據(jù)表的舊統(tǒng)計信息,即備份存儲執(zhí)行刪除表所有行操作或表結(jié)構(gòu)在線重定義操作之前,數(shù)據(jù)表的統(tǒng)計信息,當(dāng)需要使用舊統(tǒng)計信息時,可直接進(jìn)行調(diào)用。備份完成后,可使用Cascade收集執(zhí)行刪除表所有行操作或表結(jié)構(gòu)在線重定義操作之后,關(guān)聯(lián)的數(shù)據(jù)庫的新統(tǒng)計信息。表結(jié)構(gòu)變更收集單元746,用于若操作類型為表操作的變更操作記錄中包含表結(jié)構(gòu)變更操作,則判斷表結(jié)構(gòu)變更操作是否為字段變更操作;若表結(jié)構(gòu)變更操作是字段變更操作,則備份與字段變更操作對應(yīng)的數(shù)據(jù)表的舊統(tǒng)計信息,并收集與字段變更操作對應(yīng)的數(shù)據(jù)表的新統(tǒng)計信息;若表結(jié)構(gòu)變更操作是表分區(qū)操作,當(dāng)表分區(qū)操作為新增分區(qū)操作,則收集與新增分區(qū)操作關(guān)聯(lián)的分區(qū)的新統(tǒng)計信息,當(dāng)表分區(qū)操作為合并分區(qū)操作或拆分分區(qū)操作,則備份與合并分區(qū)操作或拆分分區(qū)操作關(guān)聯(lián)的分區(qū)的舊統(tǒng)計信息,并收集與合并分區(qū)操作或拆分分區(qū)操作關(guān)聯(lián)的分區(qū)的新統(tǒng)計信息。具體的,與操作類型為表操作對應(yīng)的預(yù)設(shè)的變更操作可包括表結(jié)構(gòu)變更操作。表結(jié)構(gòu)變更操作,指的是對表結(jié)構(gòu)進(jìn)行新增、刪除及修改等操作,可根據(jù)操作類型為表操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含表結(jié)構(gòu)變更操作,若包含,則可進(jìn)一步檢測包含的表結(jié)構(gòu)變更操作是否為字段變更操作,字段變更操作可包括新增字段、刪除字段及修改字段等。若變更操作記錄中包含的表結(jié)構(gòu)變更操作為字段變更操作,則可備份與字段變更操作對應(yīng)的數(shù)據(jù)表,在執(zhí)行字段變更操作之前的舊統(tǒng)計信息,并使用Cascade收集執(zhí)行字段變更操作之后的新統(tǒng)計信息。若變更操作記錄中包含的表結(jié)構(gòu)變更操作不是字段變更操作,可進(jìn)一步檢測該包含的表結(jié)構(gòu)變更操作是否為表分區(qū)操作,表分區(qū)操作可包括新增分區(qū)、合并分區(qū)、刪除分區(qū)、將分區(qū)表轉(zhuǎn)化為普通表,以及將普通表轉(zhuǎn)化為分區(qū)表等操作。數(shù)據(jù)表中可包含有多個分區(qū),每個分區(qū)下又可包含多個數(shù)據(jù)塊,當(dāng)變更操作記錄中包含的表分區(qū)操作為新增分區(qū)操作,則收集新增的分區(qū)的新統(tǒng)計信息,可包括該新增的分塊的行數(shù)、塊數(shù)、平均每行的大小等信息。若變更操作記錄中包含的表分區(qū)操作為合并分區(qū)操作或拆分分區(qū)操作,可先備份存儲與合并分區(qū)操作或拆分分區(qū)操作的關(guān)聯(lián)的分區(qū),在執(zhí)行合并分區(qū)操作或拆分分區(qū)操作之前的舊統(tǒng)計信息,再收集執(zhí)行合并分區(qū)操作或拆分分區(qū)操作之后的新統(tǒng)計信息,優(yōu)化了分區(qū)表的統(tǒng)計信息收集方式。在本實施例中,針對于與操作類型為表操作對應(yīng)的不同的變更操作,有不同的統(tǒng)計信息收集方式,細(xì)化了統(tǒng)計信息的收集方式,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。如圖9所示,在一個實施例中,上述統(tǒng)計信息收集裝置,除了包括記錄獲取模塊710、分析模塊720、操作獲取模塊730及收集模塊740,還包括確定模塊750、判斷模塊760及啟用模塊770。確定模塊750,用于根據(jù)操作類型為表操作的變更操作記錄中包含的變更操作確定DML對象。具體的,DML是SQL的分類之一,其主要包括select(選擇)、update(更新)、insert(插入)、delete(刪除)四種語法。DML對象指的是執(zhí)行的DML所屬的類別對象,數(shù)據(jù)庫可記錄各個數(shù)據(jù)表的DML的執(zhí)行情況,服務(wù)器可根據(jù)與操作類型為表操作的變更操作記錄中包含的變更操作對應(yīng)的DML對象獲取DML的執(zhí)行量,從而確定DML對象的數(shù)據(jù)變化量。例如,若變更操作為字段變更操作,則對應(yīng)的DML對象為與字段變更操作對應(yīng)的數(shù)據(jù)表中的字段變更DML,若變更操作為收縮表操作,則對應(yīng)的DML對象為數(shù)據(jù)庫系統(tǒng)文件的所有執(zhí)行DML,若變更操作不屬于新建表操作或表結(jié)構(gòu)變更操作,則對應(yīng)的DML對應(yīng)為數(shù)據(jù)庫工作文件的所有執(zhí)行DML。判斷模塊760,用于根據(jù)記錄DML執(zhí)行情況的文件判斷屬于DML對象的DML數(shù)量是否達(dá)到預(yù)設(shè)數(shù)值。具體的,確定與操作類型為表操作的變更操作記錄中包含的變更操作對應(yīng)的DML對象后,可從記錄DML執(zhí)行情況的文件中獲取屬于該DML對象的DML數(shù)量,當(dāng)屬于該DML對象的DML數(shù)量達(dá)到預(yù)設(shè)數(shù)值,則可判斷是否啟用收集的新統(tǒng)計信息。例如,變更操作記錄中包含字段變更操作,其對應(yīng)的DML對象為與字段變更操作對應(yīng)的數(shù)據(jù)表中的字段變更DML,則可從記錄DML執(zhí)行情況的文件中獲取預(yù)設(shè)時間內(nèi)與字段變更操作對應(yīng)的數(shù)據(jù)表中,字段變更DML的數(shù)量,并判斷是否達(dá)到10%,其中,預(yù)設(shè)時間與采集數(shù)據(jù)庫變更操作數(shù)據(jù)的預(yù)設(shè)時間一致。在其它的實施例中,當(dāng)變更操作記錄中不包含預(yù)設(shè)的與操作類型對應(yīng)的變更操作,也可根據(jù)執(zhí)行的DML數(shù)量判斷是否進(jìn)行統(tǒng)計信息收集,根據(jù)記錄的執(zhí)行的DML,可確定數(shù)據(jù)表的數(shù)據(jù)變化情況,為統(tǒng)計信息的收集更新提供有用的數(shù)據(jù)依據(jù)。啟用模塊770,用于若數(shù)據(jù)庫變更操作數(shù)據(jù)中屬于所述DML對象的DML數(shù)量達(dá)到所述預(yù)設(shè)數(shù)值,則根據(jù)預(yù)設(shè)的配置項判斷是否啟用新統(tǒng)計信息,若是,則啟用收集的新統(tǒng)計信息,若否,則恢復(fù)備份的舊統(tǒng)計信息。具體的,預(yù)設(shè)的配置項可包括數(shù)據(jù)庫版本號、內(nèi)存參數(shù)、CPU參數(shù)、I/O負(fù)載情況等,可根據(jù)預(yù)設(shè)的配置項進(jìn)行影響分析,判斷新統(tǒng)計信息是否會對數(shù)據(jù)庫造成性能影響,若進(jìn)行影響分析后得到新統(tǒng)計信息對數(shù)據(jù)庫的性能影響較小,則可啟用新統(tǒng)計信息,若進(jìn)行影響分析后得到新統(tǒng)計信息對數(shù)據(jù)庫的性能影響較大,則不啟用新統(tǒng)計信息,可導(dǎo)入備份的舊統(tǒng)計信息,使數(shù)據(jù)庫依然使用舊統(tǒng)計信息計算確定SQL的執(zhí)行計劃。在本實施例中,可根據(jù)預(yù)設(shè)的配置項進(jìn)行影響分析,判斷是否啟用新統(tǒng)計信息,減少新統(tǒng)計信息對整個數(shù)據(jù)庫的性能造成影響,可有效保證數(shù)據(jù)庫的穩(wěn)定性。如圖10所示,在一個實施例中,收集模塊740包括新建索引收集單元741和/或重建索引收集單元743。新建索引收集單元741,用于若操作類型為索引操作的變更操作記錄中包含新建索引操作,則收集與新建索引操作對應(yīng)的索引的新統(tǒng)計信息。具體的,索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。與操作類型為索引操作對應(yīng)的預(yù)設(shè)的變更操作可包括新建索引操作。新建索引操作,即在數(shù)據(jù)表中創(chuàng)建一個新的索引,可根據(jù)操作類型為索引操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含新建索引操作,若包含,則可收集新建的索引的新統(tǒng)計信息,具體可包括新建的索引的根塊數(shù)、索引字段的行數(shù)及索引的最大、最小值等。重建索引收集單元743,用于若操作類型為索引操作的變更操作記錄中包含重建索引操作,則備份與重建索引操作對應(yīng)的索引的舊統(tǒng)計信息,并收集與重建索引操作對應(yīng)的索引的新統(tǒng)計信息后,恢復(fù)舊統(tǒng)計信息。具體的,與操作類型為索引操作對應(yīng)的預(yù)設(shè)的變更操作可包括重建索引操作,當(dāng)一個索引的結(jié)構(gòu)發(fā)生了偏差,造成傾斜,從而在進(jìn)行數(shù)據(jù)查詢時導(dǎo)致空間浪費,則可執(zhí)行重建索引操作對索引進(jìn)行重建。重建索引操作與新建索引操作的區(qū)別在于,重建索引操作是在原有的索引的基礎(chǔ)之上進(jìn)行重建(rebuild),而新建索引操作則是直接創(chuàng)建(create)一個新的索引??筛鶕?jù)操作類型為索引操作的變更操作記錄中執(zhí)行的SQL語句,檢測該變更操作記錄中是否包含重建索引操作,若包含,則可備份需要進(jìn)行重建的索引在執(zhí)行重建索引操作之前的舊統(tǒng)計信息,并收集重建后的索引的新統(tǒng)計信息,對新統(tǒng)計信息進(jìn)行備份后,可導(dǎo)入之前備份的舊統(tǒng)計信息,保證索引重建后的穩(wěn)定性。在本實施例中,針對于與操作類型為索引操作對應(yīng)的不同的變更操作,有不同的統(tǒng)計信息收集方式,細(xì)化了統(tǒng)計信息的收集方式,能有效提高收集的統(tǒng)計信息的準(zhǔn)確性。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一非易失性計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-OnlyMemory,ROM)等。以上所述實施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實施例中的各個技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。以上所述實施例僅表達(dá)了本發(fā)明的幾種實施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3