乾貨丨採用 Oracle12c In memory 特性,必定能提升性能嗎?

轉自@twt社區,做者:楊建旭。數據庫

【摘要】Oracle 12c 中的 In memory特性,到底對性能有多大提高?本文描述了在一系列的實驗中,不一樣場景下的性能表現。性能

Oracle 12c 中的 In memory 選件經過在 SGA 中分配獨立的內存區域 (In Memory Area) ,對數據使用列式壓縮存儲來提升查詢性能。測試

那麼,這個 In memory 特性,到底能對性能有多大提高,咱們作了一系列的實驗,來看看不一樣場景下的性能表現。但首先要說的是,採用了 In memory 特性,性能並不必定提升,後面我會舉例子。spa

一、相關參數

In Memory 區的大小由參數 inmemory_size 控制,該參數是一個靜態參數 , 修改後須要重啓數據庫方可生效。內存

修改命令:rem

SQL> alter system set inmemory_size=2G scope=spfile;文檔

System altered.it

重啓以後社區

二、普通場景下,數據庫採用 In-memory 特性後,應用查詢速度都有明顯提高。class

應用查詢測試結果

能夠看出,三種查詢條件,採用了內存特性以後,響應時間分別提高了 23倍、2倍和6倍。**

三、數據庫採用 In-memory 特性後,增刪改的執行速度差別不大。

增刪改測試結果

四、某些場景插入的速度仍然有較大提高

不過在某些場景下(好比,單用戶大批量插入,後面的案例均採用單用戶),插入的速度仍是能夠提高很多的,以下圖。

測試案例中準備了 100 萬筆數據,採用 Insert into Select 方式插入兩張表,測試結果以下:

五、有其餘業務壓力干擾下的查詢性能對比

某複雜的聯合查詢,內存表比普通表的查詢速度提高20倍。那麼,在有其餘業務壓力干擾下,它的查詢性能是怎麼樣的?

帶着這個問題,咱們以每秒 5000 筆的速度向內存表和普通表插入數據。在該壓力下測試這個複雜聯合查詢的性能

複雜 SQL :此處略過,寫出來有好幾行,看不懂

能夠看出,在這個壓力干擾下(每秒 5000筆插入數據的干擾),這個查詢性能的提高,從原來的 20倍,變成了 4.3倍。**

六、DML v.s. QUERY LOW 方式

Oracle 有不一樣的壓縮方式,咱們先看看有哪些,都是怎麼介紹的。

關注一下「 MEMCOMPRESS FOR QUERY LOW 」,我們簡稱 QUERY LOW 吧,這個是缺省方式,號稱查詢性能最優。

上面的實驗中咱們是採用 DML 的方式的內存表,如今採用 QUERY LOW 方式試試:

內存表採用 QUERY LOW方式後,性能提高變成了 3.5倍,彷佛還不如 DML的提高 4.3倍。看來官方文檔也只能參考參考,具體您的環境、您的場景是什麼參數性能好,那還得去調優。

DML v.s. QUERY LOW方式的性能的確有差別,這種差別是固定的嗎?

咱們換一個 SQL 語句,換成一個比較簡單的 SQL 查詢看看

在這個簡單 SQL查詢的場景中, QueryLow方式性能提高效果更明顯。所以,誰快誰慢 it depends。

七、跨分區查詢
在兩實例均開啓 In-Memory 特性的狀況下,跨分區查詢的效率居然不如只在一個實例使用 In-Memory 特性。

八、綜上

整體來講, In-Memory 特性是能夠提高大部分查詢場景的性能,但增刪改場景極可能是混個持平,對於一些特殊場景,居然還不如不使用 In-Memory 。不一樣的壓縮方式下,性能的確不一樣,但有些場景下並非官方介紹的那個性能結果,若是要獲得最佳的性能,還得靠調優。

相關文章
相關標籤/搜索