我的Oracle數據庫中有一個視圖執行時間過長。聲明運行時,似乎不會停止。Oracle數據庫10g查看性能
有無論如何,我們可以驗證此視圖的性能,或者我們如何檢查以查看聲明會話是否「掛起」?
感謝, N2EE
UPDATE
我意識到這個問題是與視圖的基礎查詢。 感謝Edwin的autotrace修復。
我的Oracle數據庫中有一個視圖執行時間過長。聲明運行時,似乎不會停止。Oracle數據庫10g查看性能
有無論如何,我們可以驗證此視圖的性能,或者我們如何檢查以查看聲明會話是否「掛起」?
感謝, N2EE
我意識到這個問題是與視圖的基礎查詢。 感謝Edwin的autotrace修復。
您的查詢執行很可能非常緩慢。
您可以看到如何使用explain plan在數據庫中執行查詢。
如果您有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 OR REPLACE VIEW ...語句)還是從視圖中選擇。
在前一種情況下,可能是某個會話鎖定了它。例如,如果有人正在通過視圖更新或刪除,您將無法替換它。根據您的版本,您可以通過選中v $ session的'BLOCKING_SESSION'列來查看阻止程序。
在後一種情況下,它不是一個緩慢的視圖,而是一個查詢。這個觀點非常不相關。檢查解釋計劃(最好使用DBMS_XPLAN.DISPLAY_CURSOR和來自v $ sql的sql_id)並查看它的內容。 v $ session_longops可能會給出一個指針。
假設問題是基礎查詢,性能問題可能是因爲所使用的表尚未分析。
您可以使用DBMS_STATS包來更新Oracle有關表的信息,然後查看查詢速度是否提高。
基於快照ID生成AWR報告
有兩個用於創建AWR報告的sql腳本。 1. awrrpt.sql 如果我們只有一個Oracle數據庫,那麼運行awrrpt.sql sql腳本。
位置 $ ORACLE_HOME/RDBMS /管理