Как узнать, что запрос работает с базой данных в памяти или с базой данных на диске

Я пытаюсь измерить время выполнения запроса в oracle 12c для базы данных в памяти по сравнению с базой данных на диске. На стороне клиента я использую JDBC для запуска запроса.

Как узнать, ищет ли запрос требуемую базу данных в памяти или на диске? Есть ли какой-либо вариант, который сообщает серверу oracle db, что сначала нужно искать базу данных в в памяти, а затем в диске?


person kadsank    schedule 07.10.2016    source источник


Ответы (1)


Как узнать, ищет ли запрос требуемую базу данных в памяти или на диске?

Вы можете видеть, просматривал ли оракул данные в памяти или на диске в плане выполнения, как показано ниже.

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 db, что база данных сначала ищет в памяти, а затем на диске?

Oracle Doc говорит:

INMEMORY_QUERY используется для включения или отключения запросов в памяти для всей базы данных на уровне сеанса или системы. Этот параметр полезен, если вы хотите протестировать рабочие нагрузки с использованием и без использования хранилища столбцов в памяти (хранилище столбцов IM).

Вы отключаете запрос в памяти как:

SQL> alter session set inmemory_query = disable;

Вы даете INMEMORY подсказку оптимизатору просмотреть данные в памяти, как показано ниже.

select /*+ INMEMORY */ * from t1;
person atokpas    schedule 07.10.2016