摘要:介紹了Oracle 11g中一種提高查詢速度的新技術——Server Result Cache。一系列的實驗測試表明,ServerResult Cache技術通過直接共享SQL執行后的結果,使相同的SQL語句只需執行計算一次,再次執行時可直接得到結果,無須重新計算,從而提高了查詢速度。
關鍵詞:查詢速度;Server Result Cache;Oracle 11g
0 引言
隨著計算機技術,特別是數據庫技術的發展,越來越多行業開始建設數據倉庫系統。由于數據倉庫數據量非常大,查詢速度慢是數據倉庫系統普遍存在的問題,制約著其進一步發展。為此,很多專家學者對如何提高數據查詢速度進行研究,提出了許多解決方法,但實際應用證明這些方法只能在一定條件下提高查詢速度。
1 提高查詢速度的常見方法
數據庫結構在很大程度上影響著數據庫系統的性能。在數據庫結構設計合理的情況下,提高數據庫查詢速度的方法主要可以分為兩大類。一類是提高硬件的運行速度,如增大數據庫服務器的內存,提高CPU的運算速度以及I/O速度等。第二類是通過軟件技術來提高查詢速度,這也是專家學者研究的重點。其中最具代表性的有:
索引技術索引是對數據庫表中一個或多個列的值進行排序的結構,可以利用索引快速訪問數據庫表中的特定信息。索引技術優點是可以加快訪問數據的速度,但也有占用磁盤空間,并且降低添加、刪除和更新行的速度的缺點。

SQL語句優化技術對于海量數據,劣質SQL語句和優質SQL語句之間的速度差別可以達到上百倍。SQL語句優化技術研究的就是如何寫出高質量的SQL語句,提高系統的可用性以及查詢的速度。
物化視圖技術研究表明數據倉庫中大量的查詢是針對部分數據進行,因此,可以針對這部分數據進行預先計算并保存表連接或聚集等耗時較多的操作的結果,這樣,在執行查詢時,就可以避免進行這些耗時的操作,而從快速的得到結果。Oracle的物化視圖技術就是提供了這種功能。
2 Server Result Cache
數據庫中對于同樣的查詢操作,如果能在多個process或者session間共享結果,對于性能優化自然是非常有幫助的。從Oracle 7開始提供的share pool技術,使得同樣的SQL語句只需解析一次,就能多次執行,有效地減少了多個session執行相同SQL語句所消耗的時間,提高了查詢速度。到了Oraclellg,采用一種全新的技術——Server Result Cache,該技術能直接共享SQL執行后的結果,使得相同SQL語句只需執行計算一次,以后再次執行時就直接得到結果,無須重新計算。這一技術是革命性的,在Oracle白皮書上宣布,對于讀頻繁的系統,利用該技術,甚至有可能提升系統性能200%。

Server Result Cache不僅僅能緩存整個查詢的結果,也能緩存查詢中某部分操作的結果,比如緩存一次排序的結果,就可以避免再次執行時的排序操作。對于一些比較耗資源的查詢操作,緩存結果能很好地提升性能。
3 Server Result Cache測試
為了測試oracle llg啟用Server Result Cache后查詢的性能,進行了兩組不同的實驗。這兩組實驗硬件環境相同,測試數據也相同,不同的只是Oracle的版本(見表1)。
每組實驗執行兩次SQL語句,每次執行相同SQL語句select count(*)from p_routesheet。在第2組實驗中啟用了Oracle 11g的Server Result Cache新技術。第1組實驗和第2組實驗的結果分別如表2、表3所示。
consistent gets和physical reads是兩個反映Oracle數據庫查詢性能的重要指標。從表2中可以看出第一次執行該SQL可以看到consistent gets和physical reads大致相同,第2次執行同樣查詢時,由于數據Cache在內存中,physical reads會減少到0,但是consistent gets變化不大。
在表3中可以看出第1次執行SQL語句,所得到的結果和第1組實驗中第一次執行SQL語句的結果相差無幾,但在第2次執行的SQL語句,由于啟用了Oracle llg的Server ResultCache新技術,結果不僅physical reads減少到0,而且consistentgets也減少到0。這也就是說在第2次執行SQL語句時Oracle不再需要重新執行SQL查詢,而是直接訪問第1次執行后得到的結果。
4 結束語
隨著數據倉庫系統應用越來越廣泛,如何更快地提高海量數據的查詢速度一直都是該領域的一個研究重點。本文對Oracle llg的一種能快速提高查詢速度的新技術——ServerResult Cache進行了實驗測試,實驗結果表明采用ServerResult Cache新技術后,再次執行同樣的SQL語句,physicalreads和consistent gets都減少到0。這也就是說Server ResultCache技術能直接共享SQL執行后的結果,使相同SQL語句只需執行計算一次。以后再次執行時就直接得到結果,無須重新計算,從而提高了查詢速度。