2014-10-09 5 views
1

Я настраиваю DB 12c DB и пытаюсь загрузить некоторые таблицы в раздел INMEMORY. Итак, я изменил 2 таблицы с CRITICAL PRIORITY. Но, когда я пытаюсь сделать SELECT некоторые данные из таблицы в памяти, он собирает из общего паттерна. Я получил его от Autotrace.Как собрать данные из раздела INMEMORY?

Что я делаю неправильно?

ответ

1

Процесс IMCO (Inmemory Coordinator) просыпается 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. процесс ММКО поднимает эти таблицы и загружает их в InMemory область (в порядке приоритета от наивысшего до самого низкого значения: tab2, tab3 и tab1)
  2. Если мы выполним выбор запроса по любой из таблиц (пример: select * from tab1) до того, как начнется процесс IMCO (в канун чень 2 минуты)

Чтобы знать, если таблица/раздел загружается полностью в InMemory вы можете запросить v$im_segments вид, как следующее:

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

Таким образом, чтобы ответить на ваш вопрос:

  1. Убедитесь, что таблица загружена в inmemory, запросив v$im_segments
  2. Если таблица не загружена, выполните запрос на нее, чтобы сделать ее загружается в InMemory области
  3. план Get запроса для выбора запроса на столе, он должен показать InMemory как часть плана

Проверьте это whitepaper для более подробной информации.

Смежные вопросы