數據庫的高性能查詢方法和裝置制造方法【專利摘要】本發明實施例公開了一種數據庫的高性能查詢方法和裝置。所述數據庫的高性能查詢方法包括:通過執行數據定義語言DDL,將待存儲數據存儲在系統內存的緩沖區中;通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢。本發明實施例提供的數據庫的高性能查詢方法和裝置能夠顯著提高數據庫系統的數據查詢效率。【專利說明】數據庫的高性能查詢方法和裝置【
技術領域:
】[0001]本發明實施例涉及數據庫【
技術領域:
】,尤其涉及一種數據庫的高性能查詢方法和裝置。【
背景技術:
】[0002]數據庫是按照數據結構來組織、存儲和管理數據的倉庫。數據庫的概念產生于20世紀60年代。隨著信息技術和時長的發展,特別是近年來互聯網的蓬勃發展,數據庫技術也得到了廣泛的應用。如今,大部分的應用程序的后臺都會部署數據庫系統。[0003]現有的數據庫系統在存儲數據時通常將數據存儲在系統硬盤上,而用戶需要對數據庫系統中的數據進行查詢時,則需要從系統硬盤上讀取數據。而從系統硬盤上讀取數據會引起硬盤的物理輸入輸出(Inputoutput,10)。由于對系統硬盤的物理10需要耗費一定的時間,造成現有的數據庫系統對數據查詢請求的處理效率偏低。【
發明內容】[0004]有鑒于此,本發明實施例提出一種數據庫的高性能查詢方法和裝置,以顯著提高數據庫系統的數據查詢效率。[0005]第一方面,本發明實施例提供了一種數據庫的高性能查詢方法,所述方法包括:[0006]通過執行數據定義語言DDL,將待存儲數據存儲在系統內存的緩沖區中;[0007]通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢。[0008]第二方面,本發明實施例提供了一種數據庫的高性能查詢裝置,所述裝置包括:[0009]數據存儲模塊,用于通過執行數據定義語言DDL,將待存儲數據存儲在系統內存的緩沖區中;[0010]數據查詢模塊,用于通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢。[0011]本發明實施例提供的數據庫的高性能查詢方法和裝置通過執行數據定義語言,將待存儲數據存儲在系統內存的緩沖區中,并通過執行數據查詢語言,對存儲在所述緩沖區中的數據進行查詢,由于被查詢的數據存儲在系統內存的緩沖區中,而不是存儲在系統硬盤上,因此查詢數據時不需要發起磁盤的物理輸入輸出,顯著的提高了數據庫系統的數據查詢效率。【專利附圖】【附圖說明】[0012]通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本發明的其它特征、目的和優點將會變得更明顯:[0013]圖1是本發明第一實施例提供的數據庫的高性能查詢方法的流程圖;[0014]圖2是本發明第一實施例提供的Oracle數據庫系統的系統全局共享區(Systemglobalarea,SGA)的結構圖;[0015]圖3是本發明第一實施例提供的最近最少使用(Leastrecentlyused,LRU)隊列管理的示意圖;[0016]圖4是本發明第二實施例提供的數據庫的高性能查詢方法的流程圖;[0017]圖5是本發明第二實施例提供的數據庫的高性能查詢方法中緩沖區分配的流程圖;[0018]圖6是本發明第三實施例提供的數據庫的高性能查詢方法的流程圖;[0019]圖7是本發明第四實施例提供的數據庫的高性能查詢裝置的結構圖。【具體實施方式】[0020]下面結合附圖和實施例對本發明作進一步的詳細說明。可以理解的是,此處所描述的具體實施例僅用于解釋本發明,而非對本發明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發明相關的部分而非全部內容。[0021]圖1至圖3示出了本發明的第一實施例。[0022]圖1是本發明第一實施例提供的數據庫的高性能查詢方法的流程圖。所述數據庫的高性能查詢方法由數據庫的高性能查詢裝置執行。所述數據庫的高性能查詢裝置集成在一臺用于對數據庫中的數據進行查詢的客戶終端中。參見圖1,所述數據庫的高性能查詢方法包括:[0023]S110,通過執行數據定義語言(Datadefinitionlanguage,DDL),將待存儲數據存儲在系統內存的緩沖區中。[0024]所述DDL是數據庫的結構化查詢語言(Structuredquerylanguage,SQL)中負責對數據庫中的數據結構以及數據庫對象進行定義的語言。在本實施例中,通過運行所述DDL,指定存儲所述待存儲數據的位置為系統內存的緩沖區。[0025]所述數據庫系統具有自身的系統內存。所述系統內存可以用于存儲數據庫系統的常用變量。所述系統內存包括緩沖區。所述緩沖區是在向數據庫系統中存儲數據之前,在所述系統內存中預先開辟的用于緩存數據的區域。[0026]優選的,實施本實施例提供的數據庫的高性能查詢方法的數據庫系統是Oracle數據庫系統。而且,所述緩沖區可以是Oracle數據庫系統中SGA的保留緩沖區池(Ke印bufferpool)〇[0027]進一步的,當所述待存儲數據在所述數據庫系統中還沒有被創建時,用于指定存儲所述待存儲數據的位置的指令可以是:[0028]createtabletable_namestorage(buffer_poolkeep)asselect*fromdba_objects。[0029]其中,參數table_name是要創建的表的表名。[0030]而當所述待存儲數據在所述數據庫中已經被創建,只不過其沒有被存儲在所述數據庫系統的系統內存的緩沖區上時,用于指定存儲所述待存儲數據的位置的指令可以是:[0031]altertabletable_namestorage(buffer_poolkeep)。[0032]同樣,參數table_name是要更改的表的表名。[0033]圖2是本發明第一實施例提供的Oracle數據庫系統的SGA的結構圖。參見圖2,在一個SGA的實例中包括有數據庫高速緩存(Databasebuffercache)210。在所述數據庫高速緩存中包括三個緩沖區:保留池(Keepbufferpool)211、默認池(Defaultbufferpool)212以及回收池(Recyclebufferpool)213。其中,所述保留池211用于臨時存放需要經常訪問的數據的共享緩沖區。[0034]所述保留池采用最近最少使用(Leastrecentlyused,LRU)鏈表進行隊列管理。LRU是Oracle數據庫系統中內存管理的一種頁面置換算法。對于在內存中但又不用的數據叫做LRU。根據所述LRU算法,Oracle數據庫系統會獲知哪些數據屬于最近最少使用的數據而將其移出內存而騰出空間來加載另外的數據。通過所述LRU算法,所述保留池實現了利用容量不大的內存為最多的進程提供內存資源。[0035]圖3是本發明第一實施例提供的LRU隊列管理的示意圖。參見圖3,所述保留池中310存放有數據表311。所述保留池中的數據使用LRU鏈表進行隊列管理。所述LRU鏈表具有兩個端點,一個是LRU冷端,用于存放最近最為不經常使用的數據,另一個是LRU熱端,用于存放最近最為經常使用的數據。當有新的數據被緩存在所述保留池中時,新的數據被緩存在所述LRU熱端,而被置換的數據由應用程序301存放在所述LRU冷端,除非所述保留池的空間不足以再緩存被置換出的數據。[0036]在有數據需要被存儲在所述數據庫中時,所述數據庫的高性能查詢裝置將待存儲數據存儲在系統內存的緩沖區內。優選的所述數據庫的高性能查詢裝置將待存儲數據存儲在Oracle數據庫系統的保留池。[0037]S120,通過執行數據查詢語言(Dataquerylanguage,DQL),對存儲在所述緩沖區中的數據進行查詢。[0038]所述數據查詢語言是專門用于對數據庫中存儲的數據進行查詢的語句。在SQL中,所述數據查詢語言包括select指令。在執行數據定義語言,將待存儲數據存儲在系統內存的緩沖區中以后,所述數據庫的高性能查詢裝置通過執行數據查詢語言,對存儲在所述緩沖區中的數據進行查詢。由于所述數據庫的高性能查詢裝置是對存儲在系統內存中的緩沖區中的數據進行查詢,而不是對系統硬盤上的數據進行查詢,所以該數據查詢不會引起物理磁盤10,能夠顯著的提高數據庫系統的數據查詢效率。[0039]優選的,可以將數據庫系統中的db_file_multiblock_read_count參數增大。由于該參數控制著數據讀取時讀取的數據塊的數量,所以增大數據庫的db_file_multibl〇ck_reacLcount參數能夠增大每次數據讀取操作中讀取的數據塊的數量,從而進一步的提高數據庫系統的數據查詢效率。[0040]采用所述數據庫的高性能查詢方法能夠提高系統中有限的頻繁查詢且要求有極大查詢性能的數據,能夠提高復雜查詢功能對數據的查詢性能,比如模糊的查詢方式、排序的查詢方式,還能夠解決系統特定數據短期需要高并發查詢的數據,在線緩存數據系統不受影響。[0041]本實施例通過執行DDL,將待存儲數據存儲在系統內存的緩沖區中,以及通過執行DQL,對存儲在所述緩沖區中的數據進行查詢,由于是對系統內存緩沖區中的數據進行查詢,不會引起物理磁盤10,所以能夠顯著的提高數據庫系統的數據查詢效率。[0042]圖4及圖5示出了本發明的第二實施例。[0043]圖4是本發明第二實施例提供的數據庫的高性能查詢方法的流程圖。所述數據庫的高性能查詢方法以本發明第一實施例為基礎,進一步的,在通過執行DDL,將待存儲數據存儲在系統內容的緩沖區中之前,還包括:計算所需要的系統內存中的緩沖區的大小,并根據計算結果在所述系統內存中分配所述緩沖區。[0044]參見圖4,所述數據庫的高性能查詢方法包括:[0045]S410,計算所需要的系統內存中的緩沖區的大小,并根據計算結果在所述系統內存中分配所述緩沖區。[0046]如果所述緩沖區設置的容量太小,則在向所述緩沖區中存儲數據的過程中可能會使所述緩沖區中的原有數據溢出。為了防止所述緩沖區中的數據溢出,需要為所述緩沖區分配合適的容量。[0047]在本實施例中,在向所述緩沖區中存儲數據之前,所述數據庫的高性能存儲裝置需要先行計算所需要的系統內存中的緩沖區的大小,并根據所述計算結果在所述系統內存中分配所述緩沖區。[0048]S420,通過執行DDL,將待存儲數據存儲在系統內存的緩沖區中。[0049]S430,通過執行DQL,對存儲在所述緩沖區中的數據進行查詢。[0050]圖5是本發明第二實施例提供的數據庫的高性能查詢方法中緩沖區分配的流程圖。參見圖5,優選的,計算所需要的系統內存中的緩沖區的大小,并根據計算結果在所述系統內存中分配所述緩沖區包括:[0051]S411,計算所需要的系統內存中的緩沖區的大小。[0052]為了能夠為所述緩沖區分配足夠大的空間,以避免在所述緩沖區中添加數據時原有數據溢出,在向所述數據庫系統存儲數據之前先行計算所需要的系統內存中的緩沖區的大小。優選的,可以通過對所述緩沖區中需要存放的表級數據的總量進行預估對所需要的系統內存中的緩沖區的大小進行計算。[0053]S412,在操作系統中將設定大小的系統內存分配給數據庫系統,其中,所述設定大小等于數據庫系統所需內存大小與所述緩沖區大小的和。[0054]完成對所需要的系統內存中的緩沖區的大小的計算后,在操作系統中將設定大小的系統內存分配給數據庫系統。所述設定大小等于數據庫系統所需要的內存大小與計算的緩沖區大小的和。[0055]示例的,在Linux64位系統中,Oracle數據庫系統所需要的內存大小為4GB。[0056]S413,在所述數據庫系統中將獲得的內存空間中所述緩沖區大小的內存作為緩沖區。[0057]在操作系統中為所述數據庫系統分配系統內存以后,從已經分配的系統內存中分配緩沖區。因為分配給數據庫系統的系統內存是嚴格按照數據庫系統所述內存大小與所述緩沖區的大小的和計算得到的,所以按照上述方法分配的緩沖區的大小就是預先計算的緩沖區的大小。[0058]本實施例通過在向所述緩沖區中存儲數據之前,計算所需要的系統內存中的緩沖區的大小,并根據計算結果在所述系統內存中分配所述緩沖區,使得在數據存儲之前能夠為所述緩沖區分配合適的容量,有效的避免了將數據存入緩沖區時緩沖區中的原有數據溢出。[0059]圖6示出了本發明的第三實施例。[0060]圖6是本發明第三實施例提供的數據庫的高性能查詢方法的流程圖。所述數據庫的高性能查詢方法以本發明的第一實施例為基礎,進一步的,在通過執行DQL,對存儲在所述緩沖區中的數據進行查詢之后,還包括:通過開啟數據庫系統的自動跟蹤功能,檢查緩存對象在所述緩沖區中的緩存情況。[0061]參見圖6,所述數據庫的高性能查詢方法包括:[0062]S610,通過執行DDL,將待存儲數據存儲在系統內存的緩沖區中。[0063]S620,通過執行DQL,對存儲在所述緩沖區中的數據進行查詢。[0064]S630,通過開啟數據庫系統的自動跟蹤功能,檢查緩存對象在所述緩沖區中的緩存情況。[0065]所述Oracle數據庫系統具有自動跟蹤功能。所述自動跟蹤功能在Oracle數據庫系統中用于對數據查詢語句的執行結果進行統計收集。在對存儲在所述緩沖區中的數據進行查詢之后,開啟所述自動跟蹤功能,并且檢查所述緩存對象在所述緩沖區中的緩存情況。[0066]所述緩沖對象就是被緩存在所述緩沖區中的數據。而且,所述緩沖對象通常以數據表的表項的形式緩存在所述緩沖區中。[0067]通過將對所述緩沖區中緩存對象的緩存情況的檢查,能夠保證所述數據庫系統的緩沖區的正常使用,提高了所述數據庫系統運行的安全性。[0068]本實施例通過開啟數據庫系統的自動跟蹤功能檢查緩存對象在所述緩沖區中的緩存情況,從而在進行數據查詢之后及時檢查緩存對象在所述緩沖區中的緩存情況,提高了所述數據庫系統運行的安全性。[0069]圖7示出了本發明的第四實施例。[0070]圖7是本發明第四實施例提供的數據庫的高性能查詢裝置的結構圖。參見圖7,所述數據庫的高性能查詢裝置包括:數據存儲模塊720以及數據查詢模塊730。[0071]所述數據存儲模塊720用于通過執行數據定義語言DDL,將待存儲數據存儲在系統內存的緩沖區中。[0072]所述數據查詢模塊730用于通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢。[0073]優選的,所述數據庫的高性能查詢裝置還包括:緩沖區分配模塊710。[0074]所述緩沖區分配模塊710用于在通過執行數據定義語言DDL,將待存儲數據存儲在系統內容的緩沖區中之前,計算所需要的系統內存中的緩沖區的大小,并根據計算結果在所述系統內存中分配所述緩沖區。[0075]優選的,所述緩沖區分配模塊710包括:緩沖區大小計算單元711、系統內存分配單元712以及緩沖區分配單元713。[0076]所述緩沖區大小計算單元711用于計算所需要的系統內存中的緩沖區的大小。[0077]所述系統內存分配單元712用于在操作系統中將設定大小的系統內存分配給數據庫系統,其中,所述設定大小等于數據庫系統所需內存大小與所述緩沖區大小的和。[0078]所述緩沖區分配單元713用于在所述數據庫系統中將獲得的內存空間中所述緩沖區大小的內存作為緩沖區。[0079]優選的,所述數據庫的高性能查詢裝置還包括:緩存檢查模塊740。[0080]所述緩存檢查模塊740用于在通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢的同時,通過開啟數據庫系統的自動跟蹤功能,檢查緩存對象在所述緩沖區中的緩存情況。[0081]優選的,所述數據庫系統包括Oracle數據庫系統,所述緩沖區包括保留池Keepbufferpoolo[0082]上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。[0083]本領域普通技術人員應該明白,上述的本發明的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,他們可以用計算機裝置可執行的程序代碼來實現,從而可以將它們存儲在存儲裝置中由計算裝置來執行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現。這樣,本發明不限制于任何特定的硬件和軟件的結合。[0084]本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間的相同或相似的部分互相參見即可。[〇〇85]以上所述僅為本發明的優選實施例,并不用于限制本發明,對于本領域技術人員而言,本發明可以有各種改動和變化。凡在本發明的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。【權利要求】1.一種數據庫的高性能查詢方法,其特征在于,包括:通過執行數據定義語言DDL,將待存儲數據存儲在系統內存的緩沖區中;通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢。2.根據權利要求1所述的方法,其特征在于,在通過執行數據定義語言DDL,將待存儲數據存儲在系統內容的緩沖區中之前,還包括:計算所需要的系統內存中的緩沖區的大小,并根據計算結果在所述系統內存中分配所述緩沖區。3.根據權利要求2所述的方法,其特征在于,計算所需要的系統內存中的緩沖區的大小,并根據計算結果在所述系統內存中分配所述緩沖區包括:計算所需要的系統內存中的緩沖區的大小;在操作系統中將設定大小的系統內存分配給數據庫系統,其中,所述設定大小等于數據庫系統所需內存大小與所述緩沖區大小的和;在所述數據庫系統中將獲得的內存空間中所述緩沖區大小的內存作為緩沖區。4.根據權利要求1所述的方法,其特征在于,在通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢之后,還包括:通過開啟數據庫系統的自動跟蹤功能,檢查緩存對象在所述緩沖區中的緩存情況。5.根據權利要求1至4任一所述的方法,其特征在于,所述數據庫系統包括Oracle數據庫系統,所述緩沖區包括保留池Keepbufferpool。6.-種數據庫的高性能查詢裝置,其特征在于,包括:數據存儲模塊,用于通過執行數據定義語言DDL,將待存儲數據存儲在系統內存的緩沖區中;數據查詢模塊,用于通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢。7.根據權利要求6所述的裝置,其特征在于,還包括:緩沖區分配模塊,用于在通過執行數據定義語言DDL,將待存儲數據存儲在系統內容的緩沖區中之前,計算所需要的系統內存中的緩沖區的大小,并根據計算結果在所述系統內存中分配所述緩沖區。8.根據權利要求7所述的裝置,其特征在于,所述緩沖區分配模塊包括:緩沖區大小計算單元,用于計算所需要的系統內存中的緩沖區的大小;系統內存分配單元,用于在操作系統中將設定大小的系統內存分配給數據庫系統,其中,所述設定大小等于數據庫系統所需內存大小與所述緩沖區大小的和;緩沖區分配單元,用于在所述數據庫系統中將獲得的內存空間中所述緩沖區大小的內存作為緩沖區。9.根據權利要求6所述的裝置,其特征在于,還包括:緩存檢查模塊,用于在通過執行數據查詢語言DQL,對存儲在所述緩沖區中的數據進行查詢之后,通過開啟數據庫系統的自動跟蹤功能,檢查緩存對象在所述緩沖區中的緩存情況。10.根據權利要求6至9任一所述的裝置,其特征在于,所述數據庫系統包括Oracle數據庫系統,所述緩沖區包括保留池Keepbufferpool。【文檔編號】G06F17/30GK104112024SQ201410371252【公開日】2014年10月22日申請日期:2014年7月30日優先權日:2014年7月30日【發明者】楊宇申請人:北京銳安科技有限公司