專家簡介

盧飛
【dba+社群】北京發起人
oracle 10g ocp,6年oracle資料庫維護經驗,對oracle資料庫管理、資料遷移,性能優化有着豐富的實戰經驗。目前專注于資料庫技術及自動化運維方面的研究。
oracle 在資料庫12c (12.1.0.2)版本中提供了in-memory功能選件,在oracle資料庫中所有啟用了in-memory的對象都存儲在以inmemory_size為大小的 database cache中。
你可以在以下對象級别開啟/關閉in-memory功能:
column
table
materialized view
tablespace
partition
這裡我們針對column來測試一下,看看如何根據表字段使用in-memory功能。
我們登陸到資料庫,并建立一張表
可以根據v$im_column_level視圖查詢是否有column級别的im對象,這裡可以看到其實作在沒有啟用表tab_col_im的in-memory功能。
如果直接在column級别指定啟用in-memory功能,是不允許的。
要啟用column級别的in-memory功能,首先要在table級别啟用
再次查詢v$im_column_level視圖可以看到c1 c2 c3字段都已經啟用in-memory功能
是否啟用table/column級别的in-memory可以使用alter table語句進行開啟或關閉。
以上示範了column級别的in-memory功能如何開啟及關閉,其實啟用了in-memory功能的column也會影響select語句的效率/執行計劃。
這裡我們對表tab_col_im插入資料
查詢全部列的執行計劃
查詢c3列的執行計劃(c3列沒有啟用in-memory)
而查詢啟用in-memory功能的column的執行計劃中,可以看到使用了table access inmemory full。這裡也可以看到執行計劃中cost也是不一樣的,啟用in-memory功能的column列查詢時會比不啟用的成本低很多。
當查詢帶where條件時執行計劃也是不一樣的,且可以看到執行計劃中的謂詞過濾資訊也使用了inmemory。
最後可以看到oracle提供的in-memory功能其實還是比較全面的,可以在資料庫不同的對象級别進行設定,最重要的是in-memory的啟用及關閉,是對應用透明的。
<b>本文來自雲栖社群合作夥伴"dbaplus",原文釋出時間:2015-12-18</b>