1
我試圖測量oracle 12c中針對基於磁盤的數據庫的內存數據庫的查詢執行時間。在客戶端,我使用JDBC來激發查詢。如何知道查詢是在內存數據庫還是磁盤數據庫上運行
如何知道查詢是查找內存還是光盤中的必需數據庫?是否有任何選項告訴oracle數據庫服務器首先查找數據庫內存中然後寫入光盤?
我試圖測量oracle 12c中針對基於磁盤的數據庫的內存數據庫的查詢執行時間。在客戶端,我使用JDBC來激發查詢。如何知道查詢是在內存數據庫還是磁盤數據庫上運行
如何知道查詢是查找內存還是光盤中的必需數據庫?是否有任何選項告訴oracle數據庫服務器首先查找數據庫內存中然後寫入光盤?
如何知道查詢是查找內存還是光盤中的必需數據庫?
您可以看到,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數據庫服務器的任何選項?
甲骨文文件says-
INMEMORY
_query用於啓用或禁用在內存的查詢用於在會話或系統級整個數據庫。當您想要使用和不使用內存列存儲(IM列存儲)來測試工作負載時,此參數很有用。SQL> alter session set inmemory_query = disable;
你給
INMEMORY
暗示優化器尋找到的數據的存儲,如下圖所示:
你作爲禁用內存查詢。
select /*+ INMEMORY */ * from t1;