我们可以用第三方工具监控数据库,如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)我们不需要关注,很直观就发现等待的类型,依次诊断数据库。