如何通过dba_hist_active_sess_history分析数据库历史性能问题.docVIP

如何通过dba_hist_active_sess_history分析数据库历史性能问题.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何通过dba_hist_active_sess_history分析数据库历史性能问题

如何通过dba_hist_active_sess_history分析数据库历史性能问题一、背景 在很多情况下,当数据库发生性能问题的时候,我们并没有机会来收集足够的诊断信息,比如system state dump或者hang analyze,甚至问题发生的时候DBA根本不在场。这给我们诊断问题带来很大的困难。那么在这种情况下,我们是否能在事后收集一些信息来分析问题的原因呢?在Oracle 10G或者更高版本上,答案是肯定的。本文我们将介绍一种通过dba_hist_active_sess_history的数据来分析问题的一种方法。二、适用于 Oracle 10G或更高版本,本文适用于任何平台。 三、案例分析 在Oracle 10G中,我们引入了AWR和ASH采样机制,有一个视图gv$active_session_history会每秒钟将数据库所有节点的Active Session采样一次,而dba_hist_active_sess_history则会将gv$active_session_history里的数据每10秒采样一次并持久化保存。基于这个特征,我们可以通过分析dba_hist_active_sess_history的Session采样情况,来定位问题发生的准确时间范围,并且可以观察每个采样点的top event和top holder。下面通过一个例子来详细说明。1、Dump出问题期间的ASH数据: 为了不影响生产系统,我们可以将问题大概期间的ASH数据export出来在测试机上分析。基于dba_hist_active_sess_history创建一个新表m_ash,然后将其通过exp/imp导入到测试机。在发生问题的数据库上执行exp:SQL conn user/passwdSQL create table m_ash as select * from dba_hist_active_sess_history where SAMPLE_TIME between TO_TIMESTAMP (time_begin, YYYY-MM-DD HH24:MI:SS) and TO_TIMESTAMP (time_end, YYYY-MM-DD HH24:MI:SS);$ exp user/passwd file=m_ash.dmp tables=(m_ash) log=m_ash.exp.log然后导入到测试机:$ imp user/passwd file=m_ash.dmp log=m_ash.imp.log2、验证导出的ASH时间范围:set line 200 pages 1000col sample_time for a25col event for a40alter session set nls_timestamp_format=yyyy-mm-dd hh24:mi:ss.ff;select /*+ parallel 8 */ //开启并行加快查询速度t.dbid, t.instance_number, min(sample_time), max(sample_time), count(*) session_countfrom m_ash tgroup by t.dbid, t.instance_numberorder by dbid, instance_number;INSTANCE_NUMBER MIN(SAMPLE_TIME) MAX(SAMPLE_TIME) SESSION_COUNT1 2015-03-26 21:00:04.278 2015-03-26 22:59:48.387 21712 2015-03-26 21:02:12.047 2015-03-26 22:59:42.584 36分析:从以上输出可知该数据库共2个节点,采样时间共2小时,节点1的采样比节点2要多很多,问题可能发生在节点1上。3、确认问题发生的精确时间范围:select /*+ parallel 8 */dbid, instance_number, sample_id, sample_time, count(*) session_countfrom m_ash tgroup by dbid, instance_number, sample_id, sample_timeorder by dbid, instance_number, sample_time;INSTANCE_NUMBER SAMPLE_ID SAMPLE_TIME SESSION_COUNT1 2015-03-26 22:02:50.985

文档评论(0)

me54545 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档