2014-10-09 52 views
1

我調整Oracle DB 12C,並試圖某些表加載到INMEMORY分區。所以,我用CRITICAL PRIORITY修改了2個表格。但是,當我試圖從內存中的表SELECT一些數據,它可從一般patition。我從Autotrace中獲得了它。如何從INMEMORY分區收集數據?

我在做什麼錯了?

回答

1

海事協商組織(Inmemory協調員)進程被喚醒every two minutes和檢查,看看是否有人口的任務需要完成。因此,使它inmemory後立即查詢表不保證從inmemory投放了查詢。

對象被填充到IM列存儲或者在首次打開數據庫或表被掃描之後(查詢)之後立即優先級列表。

例如,如果我們使表TAB1,TAB2,TAB3爲inmemory:

alter table tab1 inmemory priority medium; 
alter table tab3 inmemory priority high; 
alter table tab2 inmemory priority critical; 

這些表進入inmemory時:

  1. IMCO過程拿起這些表,並加載它們進入inmemory區域 (優先higest到最低的順序:TAB2,TAB3和TAB1)
  2. 如果我們在任何表(例如:select * from tab1)的執行選擇查詢在IMCO過程中踢之前(在前夜RY 2分鐘)

要知道,如果一個表/分區被完全加載到inmemory可以查詢v$im_segments觀點類似以下內容:

select owner, segment_name, partition_name, segment_type, bytes, 
bytes_not_populated, populate_status from v$im_segments; 

因此,要回答你的問題:

  1. 確保表是通過查詢v$im_segments
  2. 如果表沒有加載在其上執行SELECT查詢語句,使之裝入inmemory裝入inmemory區域
  3. 獲取查詢計劃在 表的SELECT查詢,它應該顯示INMEMORY作爲該計劃的一部分

檢查這個whitepaper瞭解更多詳情。