Oracle Exadata的TABLE ACCESS STORAGE FULL執行計劃
這個TABLE ACCESS STORAGE FULL的執行計劃只有在ORACLE EXADATA上才回出現。
Oracle在Exadata上增加了一個硬體Exadata Programmable Storage Server,使得在儲存系統可以變得更加智慧。以往在進行全表掃描時,即使存在過濾條件,也需要將全部資料讀到資料庫伺服器端,才能過濾掉無用的資料。但是透過這個硬體和儲存軟體的配合,使得這種過濾直接在儲存層進行,而返回給資料庫伺服器的則是查詢需要的結果。一方面在儲存直接過濾提高訪問效能,另一方面使得返回個伺服器的資料量大大下降,這也是Exadata進行全表掃描效能優異的重要原因之一。
在昨天練手的時候,記錄了一下這個執行計劃,而這個執行計劃在自己的測試環境中是不可能出現的:
SQL> select count(*) from t;
COUNT(*)
----------
49527761
Elapsed: 00:00:02.28
Execution Plan
----------------------------------------------------------
Plan hash value: 2966233522
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
1 | 114K (1)| 00:22:59 |
| 1 |
SORT AGGREGATE | |
1 | | |
| 2 |
TABLE ACCESS STORAGE FULL| T
| 228M| 114K
(1)| 00:22:59 |
---------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this
statement (level=2)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
418736 consistent gets
0 physical reads
0 redo size
529 bytes sent via SQL*Net to
client
524 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select count(*) from t where wner = 'TEST';
COUNT(*)
----------
611
Elapsed: 00:00:02.83
Execution Plan
----------------------------------------------------------
Plan hash value: 2966233522
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
1 | 17 | 115K
(2)| 00:23:07 |
| 1 |
SORT AGGREGATE | |
1 | 17 | | |
|* 2 |
TABLE ACCESS STORAGE FULL| T
| 6670 | 110K|
115K (2)| 00:23:07 |
-----------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 -
storage("OWNER"='TEST')
filter("OWNER"='TEST')
Note
-----
- dynamic sampling used for this
statement (level=2)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
418736 consistent gets
0 physical reads
0 redo size
527 bytes sent via SQL*Net to client
524 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
可以看到Predicate Information中,訪問和過濾條件分別是storage("OWNER"='TEST')和filter("OWNER"='TEST'),這說明限制條件被推到了儲存層執行,也正是這個原因,使得Oracle估算的訪問行數沒有太大的偏差。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-707128/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 執行計劃中access 和 filter的區別OracleFilter
- 【TUNE_ORACLE】列出走了TABLE ACCESS FULL的SQL參考OracleSQL
- 探析Oracle的Exadata Storage ServerOracleServer
- 【執行計劃】Oracle 11gR2使用Full outer Joins執行計劃完成全外連線查詢Oracle
- ORACLE執行計劃Oracle
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 看懂Oracle中的執行計劃Oracle
- ORACLE執行計劃的介紹Oracle
- ORACLE執行計劃的檢視Oracle
- oracle執行計劃的使用(EXPLAIN)OracleAI
- [20130909]12C執行計劃的TABLE ACCESS BY INDEX ROWID BATCHED.txtIndexBAT
- Oracle中檢視已執行sql的執行計劃OracleSQL
- 【sql調優之執行計劃】temp table transformationSQLORM
- Oracle執行計劃詳解Oracle
- oracle固定執行計劃--sqlprofileOracleSQL
- Oracle 索引和執行計劃Oracle索引
- Oracle閱讀執行計劃Oracle
- oracle執行計劃相關Oracle
- oracle 執行計劃變更Oracle
- 【優化】Oracle 執行計劃優化Oracle
- oracle 執行計劃設定Oracle
- Oracle檢視執行計劃的命令Oracle
- Oracle訪問表的執行計劃Oracle
- Oracle獲取執行計劃的方法Oracle
- oracle檢視執行計劃的方法Oracle
- 怎樣看懂Oracle的執行計劃Oracle
- 解析Oracle執行計劃的結果Oracle
- Oracle 檢視SQL的執行計劃OracleSQL
- [20130910]12C執行計劃的TABLE ACCESS BY INDEX ROWID BATCHED(補充).txtIndexBAT
- Tuning Oracle Full-table ScansOracle
- Oracle-繫結執行計劃Oracle
- 【SPM】Oracle如何固定執行計劃Oracle
- Oracle檢視執行計劃(五)Oracle
- Oracle檢視執行計劃(六)Oracle