我正在尝试测量oracle 12c中针对基于光盘的数据库的内存数据库中的查询执行时间。在客户端,我使用JDBC来触发查询。
我如何知道查询是在内存中还是在光盘中查找所需的数据库?是否有任何选项告诉oracle数据库服务器首先在内存中然后到光盘中查找数据库?
答案 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;