如何知道查询正在内存数据库或光盘数据库上运行

时间:2016-10-07 08:10:49

标签: oracle in-memory-database

我正在尝试测量oracle 12c中针对基于光盘的数据库的内存数据库中的查询执行时间。在客户端,我使用JDBC来触发查询。

我如何知道查询是在内存中还是在光盘中查找所需的数据库?是否有任何选项告诉oracle数据库服务器首先在内存中然后到光盘中查找数据库?

1 个答案:

答案 0 :(得分:0)

  

我如何知道查询是在内存中还是在光盘中查找所需的数据库?

您可以看到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 Doc说 -

  

INMEMORY _ QUERY用于在会话或系统级别为整个数据库启用或禁用内存中查询。如果要在使用和不使用内存中列存储(IM列存储)的情况下测试工作负载,此参数很有用。

您将内存中查询禁用为:

SQL> alter session set inmemory_query = disable;

您向优化程序提供INMEMORY提示,以查看数据的内存,如下所示。

select /*+ INMEMORY */ * from t1;