recyclebin未清引起的查詢表空間使用率慢
今天客戶反應說跑sql一條sql非常慢,看了一下發現發現是一條查詢表空間相關資訊的sql。詢問是否recyclebin資料太多引起?
為什麼recyclebin太多垃圾會引起sql執行慢呢?針對此我研究了一下。
透過檢視sql的執行計劃發現問題應該來自於sql會對recyclebin$這個表進行訪問,而該sql 查詢的檢視是db_tablespaces,dba_data_files和dba_free_space三個檢視,sql對recyclebin$訪問正是來源於查詢 dba_free_space。
從執行計劃中可以看出,RECYCLEBIN$兩次被訪問,
第一次是作為被驅動表與驅動表 FILE$進行nested loops。此時 RECYCLEBIN$ 因 FILE$返回的行數可能被掃描多次索引以及多次回表;
第二次是 RECYCLEBIN$作為驅動表與被驅動表UET$進行 nested loops,此時 RECYCLEBIN$進行一次全表掃描。
因此當回收站的堆積了太多的資料的時候,有時在跑一些查詢表空間的指令碼會越來越慢。
為什麼recyclebin太多垃圾會引起sql執行慢呢?針對此我研究了一下。
透過檢視sql的執行計劃發現問題應該來自於sql會對recyclebin$這個表進行訪問,而該sql 查詢的檢視是db_tablespaces,dba_data_files和dba_free_space三個檢視,sql對recyclebin$訪問正是來源於查詢 dba_free_space。
-
SQL> set linesize 200 pagesize 200
-
SQL> explain plan for select bytes from dba_free_space;
-
-
Explained.
-
-
SQL> select * from table(dbms_xplan.display());
-
-
PLAN_TABLE_OUTPUT
-
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
Plan hash value: 2345329605
-
-
-----------------------------------------------------------------------------------------------------
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-
-----------------------------------------------------------------------------------------------------
-
| 0 | SELECT STATEMENT | | 10559 | 134K| 20 (10)| 00:00:01 |
-
| 1 | VIEW | DBA_FREE_SPACE | 10559 | 134K| 20 (10)| 00:00:01 |
-
| 2 | UNION-ALL | | | | | |
-
| 3 | NESTED LOOPS | | 1 | 56 | 1 (0)| 00:00:01 |
-
| 4 | NESTED LOOPS | | 1 | 45 | 1 (0)| 00:00:01 |
-
| 5 | INDEX FULL SCAN | I_FILE2 | 9 | 54 | 1 (0)| 00:00:01 |
-
|* 6 | TABLE ACCESS CLUSTER | FET$ | 1 | 39 | 0 (0)| 00:00:01 |
-
|* 7 | INDEX UNIQUE SCAN | I_TS# | 1 | | 0 (0)| 00:00:01 |
-
|* 8 | TABLE ACCESS CLUSTER | TS$ | 1 | 11 | 0 (0)| 00:00:01 |
-
|* 9 | INDEX UNIQUE SCAN | I_TS# | 1 | | 0 (0)| 00:00:01 |
-
| 10 | NESTED LOOPS | | 65 | 4030 | 6 (0)| 00:00:01 |
-
| 11 | NESTED LOOPS | | 65 | 3640 | 6 (0)| 00:00:01 |
-
|* 12 | TABLE ACCESS FULL | TS$ | 8 | 136 | 6 (0)| 00:00:01 |
-
|* 13 | FIXED TABLE FIXED INDEX | X$KTFBFE (ind:1) | 8 | 312 | 0 (0)| 00:00:01 |
-
|* 14 | INDEX UNIQUE SCAN | I_FILE2 | 1 | 6 | 0 (0)| 00:00:01 |
-
| 15 | NESTED LOOPS | | 10492 | 1014K| 9 (23)| 00:00:01 |
-
| 16 | NESTED LOOPS | | 5 | 170 | 7 (0)| 00:00:01 |
-
| 17 | NESTED LOOPS | | 5 | 85 | 2 (0)| 00:00:01 |
-
| 18 | INDEX FULL SCAN | I_FILE2 | 9 | 54 | 1 (0)| 00:00:01 |
-
| 19 | TABLE ACCESS BY INDEX ROWID| RECYCLEBIN$ | 1 | 11 | 1 (0)| 00:00:01 |
-
|* 20 | INDEX RANGE SCAN | RECYCLEBIN$_TS | 5 | | 0 (0)| 00:00:01 |
-
|* 21 | TABLE ACCESS CLUSTER | TS$ | 1 | 17 | 1 (0)| 00:00:01 |
-
|* 22 | INDEX UNIQUE SCAN | I_TS# | 1 | | 0 (0)| 00:00:01 |
-
|* 23 | FIXED TABLE FIXED INDEX | X$KTFBUE (ind:1) | 2222 | 141K| 0 (0)| 00:00:01 |
-
| 24 | NESTED LOOPS | | 1 | 80 | 4 (0)| 00:00:01 |
-
| 25 | NESTED LOOPS | | 1 | 74 | 4 (0)| 00:00:01 |
-
| 26 | NESTED LOOPS | | 1 | 63 | 4 (0)| 00:00:01 |
-
| 27 | TABLE ACCESS FULL | RECYCLEBIN$ | 5 | 55 | 4 (0)| 00:00:01 |
-
| 28 | TABLE ACCESS CLUSTER | UET$ | 1 | 52 | 0 (0)| 00:00:01 |
-
|* 29 | INDEX UNIQUE SCAN | I_FILE#_BLOCK# | 1 | | 0 (0)| 00:00:01 |
-
|* 30 | TABLE ACCESS CLUSTER | TS$ | 1 | 11 | 0 (0)| 00:00:01 |
-
|* 31 | INDEX UNIQUE SCAN | I_TS# | 1 | | 0 (0)| 00:00:01 |
-
|* 32 | INDEX UNIQUE SCAN | I_FILE2 | 1 | 6 | 0 (0)| 00:00:01 |
-
-----------------------------------------------------------------------------------------------------
-
-
Predicate Information (identified by operation id):
-
---------------------------------------------------
-
-
6 - filter("F"."FILE#"="FI"."RELFILE#")
-
7 - access("F"."TS#"="FI"."TS#")
-
8 - filter("TS"."BITMAPPED"=0)
-
9 - access("TS"."TS#"="F"."TS#")
-
12 - filter("TS"."BITMAPPED"<>0 AND ("TS"."ONLINE$"=1 OR "TS"."ONLINE$"=4) AND
-
"TS"."CONTENTS$"=0)
-
13 - filter("TS"."TS#"="F"."KTFBFETSN")
-
14 - access("F"."KTFBFETSN"="FI"."TS#" AND "F"."KTFBFEFNO"="FI"."RELFILE#")
-
20 - access("RB"."TS#"="FI"."TS#")
-
21 - filter("TS"."BITMAPPED"<>0 AND ("TS"."ONLINE$"=1 OR "TS"."ONLINE$"=4) AND
-
"TS"."CONTENTS$"=0)
-
22 - access("TS"."TS#"="RB"."TS#")
-
23 - filter("U"."KTFBUEFNO"="FI"."RELFILE#" AND "U"."KTFBUESEGTSN"="RB"."TS#" AND
-
"U"."KTFBUESEGFNO"="RB"."FILE#" AND "U"."KTFBUESEGBNO"="RB"."BLOCK#")
-
29 - access("U"."TS#"="RB"."TS#" AND "U"."SEGFILE#"="RB"."FILE#" AND
-
"U"."SEGBLOCK#"="RB"."BLOCK#")
-
30 - filter("TS"."BITMAPPED"=0)
-
31 - access("TS"."TS#"="U"."TS#")
-
32 - access("U"."TS#"="FI"."TS#" AND "U"."SEGFILE#"="FI"."RELFILE#")
-
- 62 rows selected.
從執行計劃中可以看出,RECYCLEBIN$兩次被訪問,
第一次是作為被驅動表與驅動表 FILE$進行nested loops。此時 RECYCLEBIN$ 因 FILE$返回的行數可能被掃描多次索引以及多次回表;
第二次是 RECYCLEBIN$作為驅動表與被驅動表UET$進行 nested loops,此時 RECYCLEBIN$進行一次全表掃描。
因此當回收站的堆積了太多的資料的時候,有時在跑一些查詢表空間的指令碼會越來越慢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-1972190/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢表空間的使用率
- oracle表空間使用率查詢Oracle
- oracle 表空間,臨時表空間使用率查詢Oracle
- 查詢表空間的大小和使用率
- 臨時表空間和回滾表空間使用率查詢
- Oracle 查詢表大小以及表空間使用率Oracle
- oracle 查詢表空間使用率的語句Oracle
- 表空間使用情況查詢慢的處理
- 查詢數oracle據庫表空間使用率sqlOracleSQL
- 由於回收站存在大量物件導致查詢表空間使用率較慢物件
- oracle 剩餘表空間查詢慢,解決辦法Oracle
- oracle表空間查詢Oracle
- 表空間大小查詢
- 表空間查詢資訊
- oracle 10g以後查詢表空間使用率的快速方法Oracle 10g
- oracle查詢表空間的空間佔用情況Oracle
- 表空間查詢和管理
- 表空間相關查詢
- oracle11g 查詢臨時表空間的使用率和正在使用臨時表空間的使用者Oracle
- 臨時表空間的空間使用情況查詢
- 【UNDO】Oracle undo表空間使用率過高,因為一個查詢Oracle
- 查詢資料庫系統中表空間的使用率資料庫
- 表空間使用量查詢
- 查詢表空間使用情況
- 查詢表空間已使用空間和空閒空間的簡單檢視
- Oracle查詢表佔磁碟空間大小及移動表空間Oracle
- 查詢表空間中的extent數量
- Oracle 表空間查詢相關sqlOracleSQL
- Oracle查詢表空間使用情況Oracle
- 查詢表的大小及表空間的使用情況
- Oracle查詢表空間的每日增長量Oracle
- 查詢表空間使用情況的指令碼指令碼
- 查詢使用表空間的TABLE,INDEX,INDEX SUBPARTITIONIndex
- 有關表空間查詢的sql指令碼SQL指令碼
- Oracle11g新增檢視查詢表空間使用率DBA_TABLESPACE_USAGE_METRICSOracle
- ORACLE查詢所有表空間使用情況Oracle
- 查詢表空間是否具備自動擴充套件空間套件
- 臨時表空間被佔滿的原因查詢