oracle 9i 查詢資料字典檢視慢案例分析
環境oracle 9.2.0.8+window2003
sql查詢語句如下:
Select t.Column_Name, t.Data_Type, t.Data_Length, t.Nullable,t.Data_Precision,t.Data_Scale,d.comments
From User_Tab_Columns t,User_Col_Comments d Where t.TABLE_NAME=d.table_name AND t.COLUMN_NAME=d.column_name AND t.Table_Name ='T_ABC';
查詢要二三十秒,才得到結果,並且有全表掃描
執行計劃如下:
SELECT STATEMENT, GOAL = CHOOSE 2279 1 225
TABLE ACCESS BY INDEX ROWID SYS OBJ$ 2 1 23
INDEX UNIQUE SCAN SYS I_OBJ1 1 1
TABLE ACCESS BY INDEX ROWID SYS OBJ$ 2 1 23
INDEX UNIQUE SCAN SYS I_OBJ1 1 1
TABLE ACCESS BY INDEX ROWID SYS OBJ$ 2 1 23
INDEX UNIQUE SCAN SYS I_OBJ1 1 1
TABLE ACCESS BY INDEX ROWID SYS OBJ$ 2 1 23
INDEX UNIQUE SCAN SYS I_OBJ1 1 1
TABLE ACCESS BY INDEX ROWID SYS OBJ$ 2 1 23
INDEX UNIQUE SCAN SYS I_OBJ1 1 1
FILTER
NESTED LOOPS OUTER 2279 1 225
NESTED LOOPS OUTER 2278 1 222
NESTED LOOPS OUTER 2276 1 196
NESTED LOOPS OUTER 2275 1 146
NESTED LOOPS OUTER 2273 1 139
NESTED LOOPS 2272 1 103
HASH JOIN 2271 1 75
NESTED LOOPS 5 1 45
TABLE ACCESS BY INDEX ROWID SYS OBJ$ 4 1 28
INDEX RANGE SCAN SYS I_OBJ2 3 1
TABLE ACCESS CLUSTER SYS COL$ 1 1 17
INDEX UNIQUE SCAN SYS I_OBJ# 1
TABLE ACCESS FULL SYS COL$ 2265 27280 818400
TABLE ACCESS BY INDEX ROWID SYS OBJ$ 1 1 28
INDEX UNIQUE SCAN SYS I_OBJ1 1
TABLE ACCESS CLUSTER SYS COLTYPE$ 1 1 36
INDEX RANGE SCAN SYS I_HH_OBJ#_INTCOL# 2 1 7
TABLE ACCESS BY INDEX ROWID SYS COM$ 1 1 50
INDEX UNIQUE SCAN SYS I_COM1 1
TABLE ACCESS BY INDEX ROWID SYS OBJ$ 2 1 26
INDEX RANGE SCAN SYS I_OBJ3 1 188
TABLE ACCESS CLUSTER SYS USER$ 1 1 3
INDEX UNIQUE SCAN SYS I_USER# 1
TABLE ACCESS CLUSTER SYS TAB$ 2 1 10
INDEX UNIQUE SCAN SYS I_OBJ# 1 1
加上基於規則的hint提示時,查詢正常
Select /*+rule */ t.Column_Name,
2 t.Data_Type,
3 t.Data_Length,
4 t.Nullable,
5 t.Data_Precision,
6 t.Data_Scale,
7 d.comments
8 From User_Tab_Columns t, User_Col_Comments d
9 Where t.TABLE_NAME = d.table_name
10 AND t.COLUMN_NAME = d.column_name
11 AND t.Table_Name = 'T_ABC'
Executed in 0.157 seconds
執行計劃為索引掃描
SELECT STATEMENT, GOAL = CHOOSE
TABLE ACCESS BY INDEX ROWID SYS OBJ$
INDEX UNIQUE SCAN SYS I_OBJ1
TABLE ACCESS BY INDEX ROWID SYS OBJ$
INDEX UNIQUE SCAN SYS I_OBJ1
TABLE ACCESS BY INDEX ROWID SYS OBJ$
INDEX UNIQUE SCAN SYS I_OBJ1
TABLE ACCESS BY INDEX ROWID SYS OBJ$
INDEX UNIQUE SCAN SYS I_OBJ1
TABLE ACCESS BY INDEX ROWID SYS OBJ$
INDEX UNIQUE SCAN SYS I_OBJ1
FILTER
NESTED LOOPS OUTER
NESTED LOOPS
NESTED LOOPS
NESTED LOOPS OUTER
NESTED LOOPS OUTER
NESTED LOOPS OUTER
NESTED LOOPS OUTER
NESTED LOOPS
TABLE ACCESS BY INDEX ROWID SYS OBJ$
INDEX RANGE SCAN SYS I_OBJ2
TABLE ACCESS CLUSTER SYS COL$
INDEX UNIQUE SCAN SYS I_OBJ#
TABLE ACCESS CLUSTER SYS COLTYPE$
INDEX RANGE SCAN SYS I_HH_OBJ#_INTCOL#
TABLE ACCESS BY INDEX ROWID SYS OBJ$
INDEX RANGE SCAN SYS I_OBJ3
TABLE ACCESS CLUSTER SYS USER$
INDEX UNIQUE SCAN SYS I_USER#
TABLE ACCESS BY INDEX ROWID SYS OBJ$
INDEX RANGE SCAN SYS I_OBJ2
TABLE ACCESS BY INDEX ROWID SYS COL$
INDEX UNIQUE SCAN SYS I_COL1
TABLE ACCESS BY INDEX ROWID SYS COM$
INDEX UNIQUE SCAN SYS I_COM1
TABLE ACCESS CLUSTER SYS TAB$
INDEX UNIQUE SCAN SYS I_OBJ#
透過檢查dba_tables表,發現對sys使用者下的系統表做過分析,
然後刪除sys使用者下的統計資料
BEGIN
DBMS_STATS.delete_SCHEMA_stats(ownname => 'SYS');
END;
/
查詢資料字典檢視恢復正常
18:27:58 SQL> Select t.Column_Name,
2 t.Data_Type,
3 t.Data_Length,
4 t.Nullable,
5 t.Data_Precision,
6 t.Data_Scale,
7 d.comments
8 From User_Tab_Columns t, User_Col_Comments d
9 Where t.TABLE_NAME = d.table_name
10 AND t.COLUMN_NAME = d.column_name
11 AND t.Table_Name = 'T_XZSP_TASK_DAY_REMIND'
12 /
Executed in 0.158 seconds
建議:對oracle 系統的資料字典表千萬別做分析,否則會有效能影響
因為oracle 9i系統資料字典表執行計劃預設最佳化器為RBO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-672924/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 資料字典和資料字典檢視Oracle
- oracle常用資料字典.檢視Oracle
- 檢視慢查詢進度
- Oracle檢視查詢慢之統計資訊收集Oracle
- 【檢視】oracle 資料字典檢視之 DICT / DICTIONARYOracle
- Oracle相關資料字典檢視Oracle
- 【轉載】Oracle資料字典檢視Oracle
- oracle資料字典表與檢視Oracle
- Oracle 資料字典及註釋查詢Oracle
- 儲存過程中查詢資料字典檢視(v$或dba)儲存過程
- Oracle 資料庫字典 檢視 基表Oracle資料庫
- 檢視資料字典
- (轉)Oracle常用資料字典查詢語句Oracle
- 【檢視】oracle 資料字典檢視之 “小”檢視 CAT, TAB, SEQ, SYN ...Oracle
- oracle 常用查詢檢視Oracle
- mysql開啟檢視慢查詢日誌MySql
- oracle資料庫sql查詢檢視第二次查詢很慢Oracle資料庫SQL
- 巧用Oracle Discoverer中的資料字典檢查joinOracle
- mongodb慢查詢分析MongoDB
- 檢視 Laravel 查詢資料語句Laravel
- 資料庫的查詢與檢視資料庫
- Oracle OCP(27):使用資料字典檢視管理物件Oracle物件
- Oracle 常用資料字典表、檢視的總結Oracle
- 【VIEW】Oracle資料字典檢視之DICT_COLUMNSViewOracle
- Oracle 常用資料字典檢視、表的總結Oracle
- MySQLslowquery[慢查詢]資料整理MySql
- PostgreSQL、KingBase 資料庫 ORDER BY LIMIT 查詢緩慢案例SQL資料庫MIT
- oracle10g中部分檢視查詢非常‘慢“問題解決Oracle
- 查詢所有資料字典的SQLSQL
- Redis客戶端基本操作以及檢視慢查詢Redis客戶端
- 【PDB】Oracle跨PDB檢視查詢Oracle
- 2.12 資料庫資料字典檢視資料庫
- 資料庫查詢慢的原因資料庫
- 【ORACLE】常用物化檢視相關後設資料查詢語句Oracle
- 使用資料字典檢視管理物件物件
- Oracle 9i 資料庫WITH查詢語法小議(轉)Oracle資料庫
- 優化mysql資料字典表查詢優化MySql
- Oracle ASM 相關的 檢視(V$) 和 資料字典(X$)OracleASM