#oracle #in-memory-database
#Oracle #база данных в памяти
Вопрос:
Я пытаюсь измерить время выполнения запроса в oracle 12c для базы данных в памяти по сравнению с базой данных на диске. На стороне клиента я использую JDBC для запуска запроса.
Как я узнаю, ищет ли запрос требуемую базу данных в памяти или на диске? Есть ли какая-либо опция, которая сообщает серверу oracle db, что сначала база данных ищет в памяти, а затем на диске?
Ответ №1:
Как я узнаю, ищет ли запрос требуемую базу данных в памяти или на диске?
Вы можете увидеть, просматривал ли oracle данные в памяти или на диске в плане выполнения, как показано ниже.
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 говорится-
INMEMORY
_QUERY используется для включения или отключения запросов в памяти для всей базы данных на уровне сеанса или системы. Этот параметр полезен, когда вы хотите протестировать рабочие нагрузки с использованием и без использования хранилища столбцов в памяти (IM column store).
Вы отключаете запрос в памяти как:
SQL> alter session set inmemory_query = disable;
Вы даете INMEMORY
подсказку оптимизатору, чтобы он просматривал данные в памяти, как показано ниже.
select /* INMEMORY */ * from t1;