涂利明
摘要:介紹了Oracle 11g中一種提高查詢速度的新技術——Server Result Cache。一系列的實驗測試表明,ServerResult Cache技術通過直接共享SQL執(zhí)行后的結(jié)果,使相同的SQL語句只需執(zhí)行計算一次,再次執(zhí)行時可直接得到結(jié)果,無須重新計算,從而提高了查詢速度。
關鍵詞:查詢速度;Server Result Cache;Oracle 11g
0引言
隨著計算機技術,特別是數(shù)據(jù)庫技術的發(fā)展,越來越多行業(yè)開始建設數(shù)據(jù)倉庫系統(tǒng)。由于數(shù)據(jù)倉庫數(shù)據(jù)量非常大,查詢速度慢是數(shù)據(jù)倉庫系統(tǒng)普遍存在的問題,制約著其進一步發(fā)展。為此,很多專家學者對如何提高數(shù)據(jù)查詢速度進行研究,提出了許多解決方法,但實際應用證明這些方法只能在一定條件下提高查詢速度。
1提高查詢速度的常見方法
數(shù)據(jù)庫結(jié)構(gòu)在很大程度上影響著數(shù)據(jù)庫系統(tǒng)的性能。在數(shù)據(jù)庫結(jié)構(gòu)設計合理的情況下,提高數(shù)據(jù)庫查詢速度的方法主要可以分為兩大類。一類是提高硬件的運行速度,如增大數(shù)據(jù)庫服務器的內(nèi)存,提高CPU的運算速度以及I/O速度等。第二類是通過軟件技術來提高查詢速度,這也是專家學者研究的重點。其中最具代表性的有:
索引技術索引是對數(shù)據(jù)庫表中一個或多個列的值進行排序的結(jié)構(gòu),可以利用索引快速訪問數(shù)據(jù)庫表中的特定信息。索引技術優(yōu)點是可以加快訪問數(shù)據(jù)的速度,但也有占用磁盤空間,并且降低添加、刪除和更新行的速度的缺點。
SQL語句優(yōu)化技術對于海量數(shù)據(jù),劣質(zhì)SQL語句和優(yōu)質(zhì)SQL語句之間的速度差別可以達到上百倍。SQL語句優(yōu)化技術研究的就是如何寫出高質(zhì)量的SQL語句,提高系統(tǒng)的可用性以及查詢的速度。
物化視圖技術研究表明數(shù)據(jù)倉庫中大量的查詢是針對部分數(shù)據(jù)進行,因此,可以針對這部分數(shù)據(jù)進行預先計算并保存表連接或聚集等耗時較多的操作的結(jié)果,這樣,在執(zhí)行查詢時,就可以避免進行這些耗時的操作,而從快速的得到結(jié)果。Oracle的物化視圖技術就是提供了這種功能。
2Server Result Cache
數(shù)據(jù)庫中對于同樣的查詢操作,如果能在多個process或者session間共享結(jié)果,對于性能優(yōu)化自然是非常有幫助的。從Oracle 7開始提供的share pool技術,使得同樣的SQL語句只需解析一次,就能多次執(zhí)行,有效地減少了多個session執(zhí)行相同SQL語句所消耗的時間,提高了查詢速度。到了Oraclellg,采用一種全新的技術——Server Result Cache,該技術能直接共享SQL執(zhí)行后的結(jié)果,使得相同SQL語句只需執(zhí)行計算一次,以后再次執(zhí)行時就直接得到結(jié)果,無須重新計算。這一技術是革命性的,在Oracle白皮書上宣布,對于讀頻繁的系統(tǒng),利用該技術,甚至有可能提升系統(tǒng)性能200%。
Server Result Cache不僅僅能緩存整個查詢的結(jié)果,也能緩存查詢中某部分操作的結(jié)果,比如緩存一次排序的結(jié)果,就可以避免再次執(zhí)行時的排序操作。對于一些比較耗資源的查詢操作,緩存結(jié)果能很好地提升性能。
3Server Result Cache測試
為了測試oracle llg啟用Server Result Cache后查詢的性能,進行了兩組不同的實驗。這兩組實驗硬件環(huán)境相同,測試數(shù)據(jù)也相同,不同的只是Oracle的版本(見表1)。
每組實驗執(zhí)行兩次SQL語句,每次執(zhí)行相同SQL語句select count(*)from p_routesheet。在第2組實驗中啟用了Oracle 11g的Server Result Cache新技術。第1組實驗和第2組實驗的結(jié)果分別如表2、表3所示。
consistent gets和physical reads是兩個反映Oracle數(shù)據(jù)庫查詢性能的重要指標。從表2中可以看出第一次執(zhí)行該SQL可以看到consistent gets和physical reads大致相同,第2次執(zhí)行同樣查詢時,由于數(shù)據(jù)Cache在內(nèi)存中,physical reads會減少到0,但是consistent gets變化不大。
在表3中可以看出第1次執(zhí)行SQL語句,所得到的結(jié)果和第1組實驗中第一次執(zhí)行SQL語句的結(jié)果相差無幾,但在第2次執(zhí)行的SQL語句,由于啟用了Oracle llg的Server ResultCache新技術,結(jié)果不僅physical reads減少到0,而且consistentgets也減少到0。這也就是說在第2次執(zhí)行SQL語句時Oracle不再需要重新執(zhí)行SQL查詢,而是直接訪問第1次執(zhí)行后得到的結(jié)果。
4結(jié)束語
隨著數(shù)據(jù)倉庫系統(tǒng)應用越來越廣泛,如何更快地提高海量數(shù)據(jù)的查詢速度一直都是該領域的一個研究重點。本文對Oracle llg的一種能快速提高查詢速度的新技術——ServerResult Cache進行了實驗測試,實驗結(jié)果表明采用ServerResult Cache新技術后,再次執(zhí)行同樣的SQL語句,physicalreads和consistent gets都減少到0。這也就是說Server ResultCache技術能直接共享SQL執(zhí)行后的結(jié)果,使相同SQL語句只需執(zhí)行計算一次。以后再次執(zhí)行時就直接得到結(jié)果,無須重新計算,從而提高了查詢速度。