[英]Oracle Database 10g VIEW performance
我的一個Oracle數據庫中的一個視圖執行時間太長。 語句運行時,它似乎並沒有停止。
無論如何,我們是否可以驗證此視圖的性能,或者如何檢查語句會話是否正在“掛起”?
謝謝,N2EE
我意識到問題出在視圖中的基礎查詢。 感謝Edwin提供的自動跟蹤修復程序。
查詢的執行很可能非常慢。
您可以使用說明計划查看查詢如何在數據庫中執行。
如果您擁有SQL * Plus,則可以使用以下語句輕松完成此操作:
set autotrace traceonly
然后輸入查詢,您將獲得有關查詢的統計信息,如下所示:
SQL> set autotrace traceonly
SQL> select * from o_drops;
4461 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 3820245448
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 4287 | 280K| 11 (10)| 00:00:01 |
| 1 | TABLE ACCESS FULL| O_DROPS | 4287 | 280K| 11 (10)| 00:00:01 |
-----------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
333 consistent gets
48 physical reads
0 redo size
337057 bytes sent via SQL*Net to client
2316 bytes received via SQL*Net from client
299 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
4461 rows processed
如果其中一種資源非常多,則可以重寫查詢和/或向正在使用的表中添加索引。
您需要查看組成視圖的查詢的性能。 最好的方法是對視圖使用的sql語句進行解釋計划。 這將表明它是在執行全表掃描還是其他一些非最佳行為。 調整查詢,您的視圖應運行得更好。
您是在談論創建或替換現有視圖(即執行CREATE或REPLACE VIEW ...語句)還是從視圖中進行選擇。
在前一種情況下,可能是某個會話已將其鎖定。 例如,如果某人正在通過視圖進行更新或刪除,則您將無法替換它。 根據您的版本,您可能可以通過查看v $ session的“ BLOCKING_SESSION”列來查看阻止程序。
在后一種情況下,不是慢的視圖而是查詢。 該視圖幾乎無關緊要。 檢查說明計划(最好將DBMS_XPLAN.DISPLAY_CURSOR與來自v $ sql的sql_id一起使用),並查看其計划。 v $ session_longops可以給出一個指針。
根據快照ID生成AWR報告
有兩個SQL腳本可以創建AWR報告。 1. awrrpt.sql如果只有一個Oracle數據庫,請運行awrrpt.sql sql腳本。
AWR報告SQL腳本$ ORACLE_HOME / rdbms / admin的位置
假設問題是基礎查詢,則性能問題可能是因為尚未分析所使用的表。
您可以使用DBMS_STATS包來更新Oracle關於表的信息,然后查看查詢速度是否提高。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.