Почему TABLE не НАСЕЛЕН в V $ IM_SEGMENTS даже после сканирования? - PullRequest
0 голосов
/ 08 июля 2019

Итак, я добавил таблицу в память и отсканировал таблицу после этого.Но это все еще не появляется в V $ IM_SEGMENTS.В EXPLAIN PLAN он показывает доступ к ПАМЯТИ ПОЛНЫЙ.Поэтому не уверен, что он использует хранилище столбцов.

Сделал это:

ALTER TABLE INMEMORY;SELECT * FROM;

SELECT * FROM V $ IM_SEGMENTS;

без строк

1 Ответ

0 голосов
/ 09 июля 2019

Для начала inmemory_size должно быть около 100M . Следующая команда должна показать соответствующее значение размера для параметра inmemory_size:

show parameter inmemory_size

Загрузка сегментов таблицы в область памяти запускается, когда выполняется полное сканирование таблицы или условие приоритета памяти отличается от none, поэтому мы должны быть уверены, что запрос на выборку, который вы выполнили, прошел по пути table access full. Итак, еще один способ начать полное сканирование таблицы - это сделать select count(*) from table.

Или вы можете использовать populate процедуру из dbms_inmemory package , чтобы загрузить таблицу вручную в область памяти.

Пример использования (для пользователя inmem_user, таблица t1):

exec dbms_inmemory.populate('INMEM_USER','T1');

Еще одна вещь, которую следует рассмотреть здесь относительно запросов v$im_segments, это; bytes_not_populated и populate_status столбцы также должны быть запрошены для правильности. Когда v$im_segments возвращает строки, bytes_not_populated должно быть 0 и populate_status должно быть COMPLETED.

Более подробную информацию о населенности можно найти здесь здесь

...