oracle ash介绍,循序渐进Oracle - 全面认识Oracle ASH

从Oracle 10g开始,Oracle引入了ASH新特性,也就是活动Session历史信息记录(Active Session History,ASH)。如果说v$session_wait_history是一小步,那么ASH则是Oracle迈出根本变革的一大步。

本文节选自一、ASH概述

ASH以v$session为基础,每秒钟采样一次,记录活动会话等待的事件。因为记录所有会话的活动是非常昂贵的,所以不活动的会话不会被采样,这一点从ASH的“A”上就可以看出。采样工作由Oracle 10g新引入的一个后台进程MMNL来完成。

是否启用ASH功能,受一个内部隐含参数控制:

50ded559be74ec72ab6732daf0f21f04.png

而采样时间同样由另一个内部隐含参数决定:

df3f5c1d697da43c2502d849195b910b.png

1000毫秒正好是一秒的时间。此处引用的脚本GetHparDes.sql内容如下:SELECT x.ksppinm NAME, y.ksppstvl VALUE,

x.ksppdesc describ

FROM

SYS.x$ksppi x, SYS.x$ksppcv y

WHERE

x.inst_id = USERENV ('Instance')

AND

y.inst_id = USERENV ('Instance')

AND

x.indx = y.indx

AND

x.ksppinm LIKE '%&par%'

/注意:隐含参数通常具有特殊的作用,一般不建议用户查询或者修改,本文大量引用隐含参数的目的只有一个,那就是希望大家知道,所有在文档中见到的限制、约束、阈值、比率都是有来源的,只要足够细心,就能找出数据库的真相,不再靠记忆来学习。

很多人可能更关心性能,如此频繁的采样是否会极大地影响数据库的性能呢?

采样的性能影响无疑是存在的,但是因为Oracle的采样工具可以直接访问Oracle10g内部结构,所以是极其高效的,对于性能的影响也非常小,这也正是Oracle提供优化或诊断工具的优势所在。

ASH信息被设计为在内存中滚动的,在需要时早期的信息是会被覆盖的。ASH记录的信息可以通过v$active_session_history视图来访问,对于每个活动session,每次采样会在这个视图中记录一行信息。

这部分内存在SGA中分配:SQL> select * from v$sgastat where name like

'%ASH%';

POOL            NAME               BYTES

------------

---------------    ----------

shared pool   ASH buffers     6291456

注意,ASH buffers的最小值为1MB,最大值不超过30MB,大小按照以下算法分配:Max ( Min (cpu_count * 2MB, 5% * SHARED_POOL_SIZE,

30MB), 1MB)

在以上公式中,如果SHARED_POOL_SIZE未显示设置,则限制为2%*SGA_TARGET。这一算法在Oracle 10g的不同版本中,可能不同。

根据这个算法,这里采样系统分配的ASH Buffers为6MB:

26bdd9594be3e7c97ab3be9c96d86f8e.png

另外一个生产系统中,这一内存分配为8MB:

351e6e7253543efc9cda31a6aa0c8a33.png

记录在SGA中的ASH信息,可以通过v$session_wait_history进行查询:

99178c9e0b240afcaafed581cde5fbe4.png二、ASH报告

我们可以通过Oracle提供的工具生成ASH的报告,报告可以以几分钟为跨度对数据库进行精确分析;也可以以数小时或数天为时间跨度,为数据库提供概要分析。生成ASH报告主要可以通过两种方式。20da2971c51dc784755fc8b818ada179.png脚本方式

调用$ORACLE_HOME/rdbms/admin/ashrpt.sql脚本,回答一系列问题之后,就可以生成一个ASH的报告,报告包括Top等待事件、Top SQL、Top SQL命令类型、Top sessions等内容,摘录部分报告内容如下。

首先使用$ORACLE_HOME/rdbms/admin/ashrpt.sql脚本:

d45c40f1be9f70c52f468a37d0c5c264.png

数据库可用的采样数据:

74a61128470e5e9efbcba5bbf015fa51.png

完成一系列定义之后,ASH会将用户定义概要显示出来:

fa6034cd1678e8dc0af24d97457487ab.png

然后生成ASH报告,接下来对这个报告进行一点详细说明:

b697349506409f5ea47c860b6b968836.png

顶级用户事件(TopUser Events)部分列出了采样时段内数据库发生的显著用户等待,可以看到行级锁竞争(enq: TX - row lock contention)占用了87.82%的活动时间。

99c466972635d00dc01da005867e006b.png

顶级后台进程事件(TopBackground Events)部分列出后台进程等待事件,对于本例没有输出:

67b71ac8fe8c68eacb14db0606f6aab2.png

对于顶级等待事件,接下来部分列出了相关等待时间及其参数值。根据这些参数,可以知道等待发生在哪些对象或资源上,对于不同的等待事件,P1/P2/P3列信息被完整地记录在案,在Oracle 10g之前,我们是无法在事后获得这部分信息的:

8258f0a0bd3f31a0bfe1c42fd0500dfa.png

顶级服务和组件(TopService/Module),这一部分列出活动进程的用户及应用信息,通过这部分信息可以看到,活动时间最久的应用是SQL*Plus,那么也就意味着,相关SQL是通过SQL*Plus直接执行的:

c09bb1aa39a7f1306f2dbc0e69f62f9f.png

顶级SQL命令类型(Top SQL Command Types)部分列出了ASH采样阶段数据库接受的命令类型,通过以下的数据注意到,采样阶段占用87.82%时间的SQL是一条UPDATE命令:

c09bb1aa39a7f1306f2dbc0e69f62f9f.png

再转到Top SQL部分,引发数据库等待的SQL在此被列出,在这里看到那条引发等待的UPDATE语句排在了第一位,第二位的SQL则引发了全表扫描:

6460f3d8afea288f1c9c0e3dd53294ae.png

通过以上介绍我们已经能够感受到ASH的强大之处。

session及session的等待信息、进一步的SQL信息都被记录在案,并且能够通过ASH报告清晰展现,这对于追踪数据库的性能问题,发现数据库性能瓶颈提供了极大的帮助。

这在Oracle 10g之前都需要DBA去跟踪、捕获,现在Oracle帮助我们完成了这一切。

接下来列出了数据库未使用绑定变量的SQL示例(Top SQLUsing Literals),看来Oracle将绑定变量的重要性进一步提高了:

da86d57f8e7a1bf404fe08aa714d87b9.png

顶级会话(TopSessions)部分列举了处于等待的会话,信息包括详细的等待事件、等待用户等:

80ed61f4df4a2ad6fd8aa1fafd8364f6.png

阻塞会话列表(TopBlocking Sessions)部分列举了被阻塞的会话信息,这个信息和测试追踪的信息一致,其来源同样一致:

aea6aeaf3402b3a1c2e631ac2a6b76e0.png

此外还有顶级并行查询信息,在这次采样中,未有这类信息记录:

527f3d31604c2777c2d9f34d9660ce84.png

顶级数据库对象(Top DBObjects)部分则列举了相关等待具体等待的对象,对于我们测试的EYGLE表此处已经列出,数据库业务应用全表扫描的数据表也已经被列出:

52a2b158fde2d2dd65bd2d78f2fca7b0.png

顶级数据文件列表(Top DB Files)部分列出了全表扫描访问的数据文件信息:

dba278e07a33e76dc82130a2cb7d7831.png

顶级栓锁(Top Latches)部分列出Latch竞争,对于本例没有这类竞争:

b24002d0d04218e3a36a5efd67927f47.png

活动结束时间(Activity Over Time)部分列出了各类等待的细粒度显示:

46ad06fcf53b40975450f8c5fbfad52e.png

通过ASH报告可以注意到,以前需要通过用户追踪或者不易跟踪的信息,通过现在的ASH报告,可以很清晰地从始至终获得全面的信息,与以前版本比较起来,性能诊断和分析可以用“易如反掌”来形容。20da2971c51dc784755fc8b818ada179.pngEM图形方式

通过Oracle 10g Web方式的EM,可以在性能页,单击“运行ASH报告”按钮生成ASH报告,如图所示。

25ea1116e521e932fb3248332b63012c.png

只要试用一下就可以感受到ASH的强大功能,OEM生成的ASH报告非常清晰和直观。ASH的概况信息如下图所示。

81241a6eb1e637c1fa6079523f13154d.png

等待事件信息如下。

f06645f3072889f948d1f827c430e41d.png

等待参数信息如下。

a8371627471e235357703009d4728eda.png

Top SQL等信息如下。

a713c53405ea30f809ac926585cdfa65.png2a2cd8226d838f9dfa1891a2be76fc79.gif加入"云和恩墨大讲堂"微信群,参与讨论学习

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值