ASH
我們可以用第三方工具監控數據庫,如toad,spotlight(我用的是這個,還不錯),但是oracl提供的監測數據的工具不可忽視,學會應用會給監控數據帶來便捷。下面介紹ASH.
ASH:active session history
我們可以查v$active_session_history(記錄了活動session的歷史信息),v$session_wait_history(記錄了session等待的信息),v$session_wait
對active session的理解:持有CPU資源;有事務等待
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
下面簡介如何使用ASH報告:
SQL> SELECT DISTINCT SID FROM V$MYSTAT;
SID
----------
143
SQL> update t set name='s' where id=1;
已更新 1 行。
SQL> select distinct sid from v$mystat;
SID
----------
21
SQL> update t set name='d' where id=1;
此時出現了阻塞:
通過腳本生成ASH報告:
SQL> @/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/ashrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
3848072073 ORCL3939 1 orcl3939
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
輸入 report_type 的值: (可以選擇html,text格式)
..............
.............
.............
根據填寫的時間段,我填寫的是13:10 10(如果填寫的-10,則時間段是13:00-13:10),可以生成ash報告:
上面只是報告一小部分截圖,上面分析了這一段時間內的top events,top sql等事件,同時也出現了上面模擬的等待。
具體可以實驗研究。
我們也可以通過OEM來生成ASH報告,同樣在em裡可以分析性能問題,比較直觀。
對於em,還是ash,都是通過查找視圖來收集這些信息的,如果我們熟悉的話,可以直接查視圖發現問題。
例如上面的阻塞:
select * from v$session_wait;
關於空的的等待(idle)我們不需要關注,很直觀就發現等待的類型,依次診斷數據庫。