天天看點

專家經驗論,答In-Memory是否支援Column之疑

專家簡介

專家經驗論,答In-Memory是否支援Column之疑

盧飛

【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功能。

我們登陸到資料庫,并建立一張表

專家經驗論,答In-Memory是否支援Column之疑

可以根據v$im_column_level視圖查詢是否有column級别的im對象,這裡可以看到其實作在沒有啟用表tab_col_im的in-memory功能。

專家經驗論,答In-Memory是否支援Column之疑

如果直接在column級别指定啟用in-memory功能,是不允許的。

專家經驗論,答In-Memory是否支援Column之疑

要啟用column級别的in-memory功能,首先要在table級别啟用

專家經驗論,答In-Memory是否支援Column之疑

再次查詢v$im_column_level視圖可以看到c1 c2 c3字段都已經啟用in-memory功能

專家經驗論,答In-Memory是否支援Column之疑

是否啟用table/column級别的in-memory可以使用alter table語句進行開啟或關閉。

專家經驗論,答In-Memory是否支援Column之疑

以上示範了column級别的in-memory功能如何開啟及關閉,其實啟用了in-memory功能的column也會影響select語句的效率/執行計劃。

這裡我們對表tab_col_im插入資料

專家經驗論,答In-Memory是否支援Column之疑

查詢全部列的執行計劃

專家經驗論,答In-Memory是否支援Column之疑

查詢c3列的執行計劃(c3列沒有啟用in-memory)

專家經驗論,答In-Memory是否支援Column之疑

而查詢啟用in-memory功能的column的執行計劃中,可以看到使用了table access inmemory full。這裡也可以看到執行計劃中cost也是不一樣的,啟用in-memory功能的column列查詢時會比不啟用的成本低很多。

專家經驗論,答In-Memory是否支援Column之疑

當查詢帶where條件時執行計劃也是不一樣的,且可以看到執行計劃中的謂詞過濾資訊也使用了inmemory。

專家經驗論,答In-Memory是否支援Column之疑

最後可以看到oracle提供的in-memory功能其實還是比較全面的,可以在資料庫不同的對象級别進行設定,最重要的是in-memory的啟用及關閉,是對應用透明的。

<b>本文來自雲栖社群合作夥伴"dbaplus",原文釋出時間:2015-12-18</b>