在Oracle 10g中,推出了一些与DB 性能相关的功能,比如AWR, ADDM, STA, 已经这篇讲的ASH(Active Session History)。
关于其他的几个功能说明,参考我之前的Blog:
Oracle AWR 介绍
http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4682300.aspx
Oracle ADDM 自动诊断监视工具 介绍
http://blog.csdn.net/tianlesoftware/archive/2010/05/28/5630942.aspx
如何用 SQL Tuning Advisor (STA) 优化SQL语句
http://blog.csdn.net/tianlesoftware/archive/2010/05/28/5630888.aspx
一. 官网说明
Performance tuning and problem diagnosis are the two most challenging and important management tasks that any database administrator performs. In line with the primary drive of the server manageability effort, the Autometic Database Diagnostic Monitor (ADDM) attempts to make, performing these two tasks, a lot simpler and easier. ADDM employs an iterative top-down approach and drives a rule-based expert system, to identify bottlenecks in a system and suggest relevant recommendations to tackle them.
ASH acquires the information it requires to sample the active session’s activity from the database kernel’s session state objects. The quantity of information sampled by ASH could be quite voluminous, and therefore, ASH maintains a fixed sized circular buffer in the database System Global Area (SGA). The fixed sized circular buffer will be allocated during database start-up time. Since the information collected by the ASH infrastructure compliments the information present in SWRF snapshots, and can be used for drilldown purposes during problem diagnosis or performance tuning, the ASH data is also periodically flushed to disk.
-- ASH 的数据也会定期的写入磁盘
The flushing and purging policies of ASH, including the way ASH respects SWRF baselines, are completely tied with SWRF policies. Still, flushing the entire content of ASH on to disk could be too populous to be feasible, and therefore, only one out of every ten active session samples will be flushed to disk.
-- 将整个ASH 内容频繁的写入磁盘不容易,所以只有1/10的active session 数据写入磁盘
In addition to ADDM using the ASH to achieve its objectives, the ASH contents will also be displayed in the Oracle Enterprise Manager (EM) / Mozart [OEM-SWRF] performance screen. The graph that summarizes the ASH contents in the EM performance screen will be a stacked graph showing the distribution of the elapsed database time onto various wait times and CPU time, during every minute. The ASH infrastructure will provide a single V$ view (V$ACTIVE_SESSION_HISTORY), to view the in-memory contents of ASH.
--可以通过V$ACTIVE_SESSION_HISTORY 视图查看内存中ASH 的信息
The ASH infrastructure will also provide a way to dump the in-memory contents of its circular buffer onto an external file in a human readable format. The ASH dump file can be transported to another system, imported onto a user table, and analyzed using the ADDM in that system.
-- 也可以将内存中的ASM 数据dump 到外部文件,并转移到其他系统进行分析。
ASH Memory Size
==============
Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], 1MB ]
--最小1M,最大30M
Catagoreising the Active Session
============================
i. Present inside a user call
ii. Not a recursive session
iii. Not waiting for the ‘IDLE’ wait-event
iv. If it is a background process, not waiting for its usual timer-event
v. If it is a parallel slave, not waiting for the PX_IDLE wait event.
So will not see any info if a process is waitting for "SQL*Net message from client".
online 和offline 分析示例
Let start with ONLINE analysis
========================
I have open two session. first one (SID 16) is running the DML like
SQL> delete test where rowid='AAAKB9AAEAAAAAiAAA';
From second session (SID 15) run the same DML, and it is obvious that second session will wait for first session to commit.
Lets check the info in V$ACTIVE_SESSION_HISTORY.
------------------------------------------------
Run the following script.
SQL> select SESSION_ID,NAME,P1,P2,P3,WAIT_TIME,CURRENT_OBJ#,CURRENT_FILE#,CURRENT_BLOCK# from v$active_session_history ash, v$event_name enm where ash.event#=enm.event# and SESSION_ID=&SID and SAMPLE_TIME>=(sysdate-&minute/(24*60));
Input is
Enter value for sid: 15
Enter value for minute: 1 /* How many minutes activity you want to see */
output is 59 lines as it is wiatting more than 1 minute more than 1 minute
SESSION_ID NAME P1 P2 P3 WAIT_TIME CURRENT_OBJ# CURRENT_FILE# CURRENT_BLOCK#
---------- ------------------------------ ---------- ---------- ---------- ---------- ------------ ------------- --------------
15 enq: TX - row lock contention 1415053318 589825 143 0 41085 4 34
15 enq: TX - row lock contention 1415053318 589825 143 0 41085 4 34
15 enq: TX - row lock contention 1415053318 589825 143 0 41085 4 34
continue .............
15 enq: TX - row lock contention 1415053318 589825 143 0 41085 4 34
15 enq: TX - row lock contention 1415053318 589825 143 0 41085 4 34
15 enq: TX - row lock contention 1415053318 589825 143 0 41085 4 34
So you have object details with problem info.
Lets do the OFFLINE analysis of ASH
==============================
So if your are not able to find the problem online, you can dump the ASH to a trace.
Command would be like below: where level means minute. lets dump for 10 minutes history
1. SQL> alter session set events 'immediate trace name ashdump level 10';
or
2. SQL> alter system set events 'immediate trace name ashdump level 10';
or
3. SQL> oradebug setmypid
SQL> oradebug dump ashdump 10;
So you will get the trace file in udump.
Output of trace would be like
<<>>
2594829169,1,161390,"07-18-2003 16:05:21.098717000",13,1,0,"",65535,0,0,2,0,0,0,4294967295,0,0,2,35,100,0,0,10
05855,0,"oracle@usunrat21 (MMNL)","","",""
Oracle has provide an utility under $ORACLE_HOME/rdbms/demo (Location may change), by which you can upload the ASH trace dump to a database table and do the analysis.
Please see the following Note
Note 555303.1 ashdump* scripts and post-load processing of MMNL traces
for the scripts.
Script Details
============
1. "ashdump_loader" -> Main script to run with one argument. Argument is the the name of tracefile. (available in 10g only)
2. "ashdump_table.sql" -> It would be called by the main script to create the table
called SYSTEM.ACTIVE_SESSION_HISTORY_DUMP.
3. "ashdump_sqlldr.ctl" -> It is the third script called by main script to load the trace into
table called SYSTEM.ACTIVE_SESSION_HISTORY_DUMP.
注意:You must use the same oracle version to compare the OFFLINE trace with the other view.
二. ASH 说明
ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。
ASH buffers 的最小值为1MB,最大值不超过30MB。内存中记录数据。期望值是记录一小时的内容。
ASH报告生成脚本:@?/rdbms/admin/ashrpt.sql
ASH内存记录数据始终是有限的,为了保存历史数据,引入了自动负载信息库(Automatic Workload Repository ,AWR) 由后台进程MMON完成。ASH信息同样被采集写出到AWR负载库中。由于内存不是足够的,所以MMNL进程在ASH写满后会将信息写出到AWR负载库中。ASH全部写出是不可接受的,所以一般只写入收集的10%的数据量,而且使用direct-path insert完成,尽量减少日志的生成,从而最小化数据库性能影响。
内存中的ASH 信息可以通过V$ACTIVE_SESSION_HISTORY查询,而 写出到AWR负载库的ASH信息,可以通过AWR的基础表wrh$active_session_hist查询,wrh$active_session_hist是一个分区表,Oracle会自动进行数据清理。
一般来说,我们在监控数据库时,如果是当前正在发生的问题,我们可以通过v$session+v$sqlarea来找出性能最差的SQL语句。如果在一个小时以内发生的我们可以通过生成ASH报告来找出SQL。如果是1小时以上或几天我们可以通过AWR报告来找出几小时,几天以来最影响系统的SQL语句。ADDM报告基于AWR库,默认可以保存30天的ADDM报告。
相关查询试图:
v$session (当前正在发生)
v$session_wait (当前正在发生)
v$session_wait_history (会话最近的10次等待事件)
v$active_session_history (内存中的ASH采集信息,理论为1小时)
wrh$_active_session_history (写入AWR库中的ASH信息,理论为1小时以上)
dba_hist_active_sess_history (根据wrh$_active_session_history生成的视图)
三. ASH 报告生成示例
ASH组件以v$active_session_history视图为基础,生成ASH报表,ASH报表与statspack类似,可以提供以下信息:
Top User Events
Top Background Events
Top Event P1/P2/P3 Values
Top Service/Module
Top Client IDs
Top SQL Command Types
Top SQL using literals
Top Blocking Sessions
Top DB Objects
Top DB Files
Top Latches
Activity Over Time
报表间隔时间可以精确到分钟,因而ASH可以提供比STATSPACK或AWR更详细的关于历史会话的信息,可以作为statspack或awr的补充。ASH报告通过@$ORACLE_HOME/rdbms/admin/ashrpt.sql脚本生成,包括hmtl和text两种格式。
SYS@anqing1(rac1)> @?/rdbms/admin/ashrpt.sql;
-- 调用脚本
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
715014091 ANQING 1 anqing1
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: text
-- 选择生成的ASH 报告类型,是text 还是html
Type Specified: text
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
715014091 1 ANQING anqing singledb
* 715014091 1 ANQING anqing1 rac1
715014091 2 ANQING anqing2 rac2
Defaults to current database
Using database id: 715014091
Defaults to current instance
Using instance number: 1
ASH Samples in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oldest ASH sample available: 19-May-11 14:49:59 [ 10585 mins in the past]
Latest ASH sample available: 26-May-11 23:14:34 [ 1 mins in the past]
Specify the timeframe to generate the ASH report
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter begin time for report:
-- Valid input formats:
-- To specify absolute begin time:
-- [MM/DD[/YY]] HH24:MI[:SS]
-- Examples: 02/23/03 14:30:15
-- 02/23 14:30:15
-- 14:30:15
-- 14:30
-- To specify relative begin time: (start with '-' sign)
-- -[HH24:]MI
-- Examples: -1:15 (SYSDATE - 1 Hr 15 Mins)
-- -25 (SYSDATE - 25 Mins)
Defaults to -15 mins
Enter value for begin_time: 8:00
-- 输入ASH 开始的时间,时间格式上面的示例有说明
Report begin time specified: 8:00
Enter duration in minutes starting from begin time:
Defaults to SYSDATE - begin_time
Press Enter to analyze till current time
Enter value for duration:
-- 输入ASH 结束时间,默认是SYSDATE - begin_time
Report duration specified:
Using 26-May-11 08:00:00 as report begin time
Using 26-May-11 23:15:12 as report end time
Specify Slot Width (using ashrpti.sql) for 'Activity Over Time' section
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Explanation:
-- In the 'Activity Over Time' section of the ASH report,
-- the analysis period is divided into smaller slots
-- and top wait events are reported in each of those slots.
-- Default:
-- The analysis period will be automatically split upto 10 slots
-- complying to a minimum slot width of
-- 1 minute, if the source is V$ACTIVE_SESSION_HISTORY or
-- 5 minutes, if the source is DBA_HIST_ACTIVE_SESS_HISTORY.
Specify Slot Width in seconds to use in the 'Activity Over Time' section:
Defaults to a value as explained above:
Slot Width specified:
Specify Report Targets (using ashrpti.sql) to generate the ASH report
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Explanation:
-- ASH Report can accept "Report Targets",
-- like a particular SQL statement, or a particular SESSION,
-- to generate the report on. If one or more report targets are
-- specified, then the data used to generate the report will only be
-- the ASH samples that pertain to ALL the specified report targets.
-- Default:
-- If none of the report targets are specified,
-- then the target defaults to all activity in the database instance.
Specify SESSION_ID (eg: from V$SESSION.SID) report target:
Defaults to NULL:
SESSION report target specified:
Specify SQL_ID (eg: from V$SQL.SQL_ID) report target:
Defaults to NULL: (% and _ wildcards allowed)
SQL report target specified:
Specify WATI_CLASS name (eg: from V$EVENT_NAME.WAIT_CLASS) report target:
[Enter 'CPU' to investigate CPU usage]
Defaults to NULL: (% and _ wildcards allowed)
WAIT_CLASS report target specified:
Specify SERVICE_HASH (eg: from V$ACTIVE_SERVICES.NAME_HASH) report target:
Defaults to NULL:
SERVICE report target specified:
Specify MODULE name (eg: from V$SESSION.MODULE) report target:
Defaults to NULL: (% and _ wildcards allowed)
MODULE report target specified:
Specify ACTION name (eg: from V$SESSION.ACTION) report target:
Defaults to NULL: (% and _ wildcards allowed)
ACTION report target specified:
Specify CLIENT_ID (eg: from V$SESSION.CLIENT_IDENTIFIER) report target:
Defaults to NULL: (% and _ wildcards allowed)
CLIENT_ID report target specified:
Specify PLSQL_ENTRY name (eg: "SYS.DBMS_LOB.*") report target:
Defaults to NULL: (% and _ wildcards allowed)
PLSQL_ENTRY report target specified:
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is ashrpt_1_0526_2315.txt. To use this name,
press <return> to continue, otherwise enter an alternative.
Enter value for report_name: /u01/daveash.txt
-- 输入ASH 报告的名称,可以指定生成的目录,默认情况是当前登陆sqlplus的目录。 这里的扩展最好加上,如果不加扩展名,扩展名会变成lst. 但不影响数据。
Using the report name /u01/daveash.txt
Summary of All User Input
-------------------------
Format : TEXT
DB Id : 715014091
Inst num : 1
Begin time : 26-May-11 08:00:00
End time : 26-May-11 23:15:12
Slot width : Default
Report targets : 0
Report name : /u01/daveash
ASH Report For ANQING/anqing1
DB Name DB Id Instance Inst Num Release RAC Host
------------ ----------- ------------ -------- ----------- --- ------------
ANQING 715014091 anqing1 1 10.2.0.4.0 YES rac1
CPUs SGA Size Buffer Cache Shared Pool ASH Buffer Size
---- ------------------ ------------------ ------------------ ------------------
1 272M (100%) 144M (52.9%) 96M (35.3%) 2.0M (0.7%)
Analysis Begin Time: 26-May-11 08:00:00
Analysis End Time: 26-May-11 23:15:12
Elapsed Time: 915.2 (mins)
Sample Count: 795
Average Active Sessions: 0.01
Avg. Active Session per CPU: 0.01
Report Target: None specified
Top User Events DB/Inst: ANQING/anqing1 (May 26 08:00 to 23:15)
Avg Active
Event Event Class % Activity Sessions
----------------------------------- --------------- ---------- ----------
latch free Other 8.55 0.00
CPU + Wait for CPU CPU 7.17 0.00
log file sync Commit 2.26 0.00
-------------------------------------------------------------
Top Background Events DB/Inst: ANQING/anqing1 (May 26 08:00 to 23:15)
分享到:
相关推荐
Oracle的Active Session History(ASH)报告是性能分析的重要工具,尤其在Oracle 11g数据库环境中。ASH报告提供了对数据库实例中活动会话的详细历史记录,帮助DBA(数据库管理员)快速定位性能问题,优化数据库操作...
- **Session级性能优化**:利用ASH(Active Session History)来分析特定会话的活动情况。 - **DB级性能优化**:通过AWR报告全面了解数据库的整体运行状况。 - **实现机制**:MMON后台进程负责生成AWR快照,并将其...
##### 1.2 ASH (Active Session History) ASH是Oracle提供的一种实时会话监控机制,它记录了数据库中的所有活跃会话的详细信息,如执行的SQL语句、等待时间、CPU使用率等。通过对ASH数据的分析,可以深入了解数据库...
Oracle报表生成器是一款专为Oracle数据库管理员设计的实用工具,它能够自动收集并分析数据库性能数据,生成AWR(Automatic Workload Repository)和ASH(Active Session History)等关键报告。这些报告对于理解...
ASH,即Active Session History,是Oracle 10g版本引入的一个关键特性,旨在解决传统会话信息瞬时消失的问题。在Oracle数据库中,当用户执行操作时,系统会创建会话并保存相关信息至V$SESSION视图,此视图提供了当前...
Oracle的自动性能监控工具如AWR(Automatic Workload Repository)和ASH(Active Session History)为性能分析提供数据支持。 7. **高可用性**:Oracle提供RAC(Real Application Clusters)、Data Guard、...
因此,Oracle 10g 中还引入了 v$active_session_history 视图,也就是 ASH(Active Session History),用于保存处于等待状态的活动 session 的信息。 ASH 采用的策略是,每秒从 v$session_wait 中采样一次,并将...
Oracle ASH(Active Session History)是Oracle数据库性能分析的关键组件,尤其在10g版本之后引入,用于收集关于数据库会话活动的详细信息。然而,它通常只在Oracle Enterprise Edition中提供,且需要额外的许可证。...
Oracle提供了一系列内置的跟踪工具,如TKPROF、SQL Trace、10046事件、Automatic Workload Repository (AWR) 和 ASH (Active Session History) 等。 1. **TKPROF**:这是一个早期的Oracle跟踪分析工具,用于格式化...
Active Session History(ASH)是AWR的补充,它记录了每个会话的活动历史,提供实时性能监控。通过分析ASH数据,可以快速定位到哪些会话在特定时间产生了性能瓶颈,这对于诊断瞬时性能问题非常有用。 三、Database ...
RDA优化工具集合了AWR(Automatic Workload Repository)、ASH(Active Session History)和ADDM(Automatic Database Diagnostic Monitor),帮助DBAs(Database Administrators)深度洞察数据库的运行状态,及时...
10. **数据库监控与诊断**:使用DBA视图、动态性能视图进行性能分析,以及AWR(Automatic Workload Repository)和ASH(Active Session History)报告的解读。 11. **Oracle开发工具**:可能提及SQL Developer、...
此外,了解AWR(Automatic Workload Repository)和ASH(Active Session History)报告也有助于监控和诊断系统性能。 Oracle数据库的学习是一个持续的过程,这四大宝典提供了一个全面的框架,帮助初学者和经验丰富...
FROM GV$ACTIVE_SESSION_HISTORY ASH WHERE ASH.SESSION_TYPE <> 'BACKGROUND' AND ASH.SESSION_STATE = ) a ORDER BY RANK_ORDER; ``` 这些语句可以用于实现 Oracle 数据库中的授权审计表 Truncate 权限,提高...
通过使用性能分析工具如 tkprof、AWR(Automatic Workload Repository)、ASH(Active Session History)和Exadata智能特性,可以识别性能瓶颈并进行调优。SQL优化包括选择合适的索引、优化查询计划、调整表分区等。...
另外,了解Oracle的自动性能诊断工具,如ADDM(Automatic Database Diagnostic Monitor)和ASH(Active Session History),有助于快速定位性能问题。 Oracle的安全性管理是另一个重要主题。你需要理解用户权限、...
故障排查也是DBA工作的一部分,通过日志分析、性能监控工具如SQL*Plus、Gather Database Statistics、ASH(Active Session History)等,可以找出数据库性能瓶颈并解决。 Oracle还支持分布式数据库系统,允许数据在...