Как узнать, ищет ли запрос требуемую базу данных в памяти или на диске?
Вы можете видеть, что оракул изучил память или диск для данных в Плане выполнения, как показано ниже.
SQL> desc t1
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 VARCHAR2(20)
COL2 VARCHAR2(20)
SQL> alter table t1 inmemory;
Table altered.
SQL> explain plan for select * from t1;
Explained.
SQL> select * from table(dbms_xplan.display());
Plan hash value: 3617692013
------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 24 | 0 (0)|
| 1 | TABLE ACCESS INMEMORY FULL| T1 | 1 | 24 | |
------------------------------------------------------------------------
8 rows selected.
SQL> alter table t1 no inmemory;
Table altered.
SQL> explain plan for select * from t1;
Explained.
SQL> select * from table(dbms_xplan.display());
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 24 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T1 | 1 | 24 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
8 rows selected.
Есть ли какой-либо параметр, который указывает серверу БД Oracle, что искать в базе данных первого в в памяти, а затем в диск?
Oracle Doc says-
INMEMORY
_QUERY используется для включения или отключения в памяти запросов для всей базы данных на сессии или системном уровнях. Этот параметр полезен, если вы хотите протестировать рабочие нагрузки с использованием и без использования хранилища столбцов в памяти (хранилище столбцов IM).
отключить запрос в памяти, как:
SQL> alter session set inmemory_query = disable;
Вы даете INMEMORY
подсказку оптимизатору искать в памяти для данных, как показано ниже.
select /*+ INMEMORY */ * from t1;