Oraccle SQL调优系列之ASH简介

网友投稿 752 2022-05-30

我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315

整体分析调优工具

AWR:关注数据库的整体性能的报告;

ASH:数据库中的等待事件与哪些SQL具体对应的报告;

ADDM:oracle给出的一些建议

AWRDD:Oracle针对不同时段的性能对比报告

AWRSQRPT:oracle获取统计信息与执行计划

不同场景对应工具

局部分析调优工具:

explain plan for

set autotrace on

statistics_level=all

直接通过sql_id获取

10046 trace

awrrpt.sql

整体性能工具要点

AWR关注点:load profile、efficiency percentages、top 5 time events、SQL Statistics、segment_statistics

ASH关注点:等待事件与sql完美结合

ADDM:各种建议与对应SQL

AWRDD:不同时期 load profile的比较、不同时期等待事件的比较、不同时期TOP SQL的比较

AWRSQRPT:获取与关注点(统计信息与执行计划)

select output from table (dbms_workload_repository.awr_report_html(v_dbid,v_instance_number,v_min_snap_id,v_max_snap_id));

1

相关查询试图:

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生成的视图)

对于局部的,比如某个页面列表sql,我们可以使用Oracle的执行计划进行sql调优,但是对于整个系统来说,你可以知道哪些sql比较耗时?当然可以通过查Oracle的共享池得到,不过Oracle系统本身就提供了几种性能分析报告,比如AWR、ASH、ADDM等等报告,本博客介绍一下ASH性能分析报告

ASH即活动会话历史,Active Session History,ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样, 采样工作由新引入的后台进程MMNL完成。

v$active_session_history视图提供了在实例级别抽取会话活动信息。活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中。任何被连接到数据库且正等待一个不属于空闲等待时间的会话会被考虑是一个活动的会话。每个会话抽样都是一组行数据且通过v$active_session_history视图来返回每个被抽样活动会话的行数据,返回最新被抽样会话的第一行数据。

一、ASH报告生成

继上一篇AWR方面的博客之后,https://smilenicky.blog.csdn.net/article/details/89414432,我再写一篇ASH方面的博客:

1.1 工具选择

对于Oracle数据库可以使用sqlplus或者plsql developer客户端软件

sqlplus 使用

可以使用sqlplus工具登录

进入数据库

sqlplus / as sysdba

1

查看用户

show parameter db_name

1

用登录之后才可以使用

plsql developer使用

plsql developer也可以使用,登录之后,选择文件(File)->新建(New)->命令窗口(Command Window)

1.2 自动创建快照

开始压测后执行

exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();

1

可以通过dba_hist_wr_control查看当前的配置情况,当前awr为每1小时做一次数据快照,保留时间为8天。

select * from dba_hist_wr_control;

1

修改配置,每隔30分钟收集一次,保存1天

execute dbms_workload_repository.modify_snapshot_settings(interval=>30,retention=>14000);

1

关闭自动收集

SQL>exec dbms_workload_repository.modify_snapshot_settings (interval=>0,retention=>24*60);

1

1.3 手工创建快照

除了自动创建快照,也可以手工创建快照

select dbms_workload_repository.create_snapshot() from dual;

1

1.4 ASH报告生成

对于sqlplus客户端的可以使用

@?/rdbms/admin/ashrpt.sql

1

对于plsql客户端,我用绝对路径去执行,@?的命令找不到文件

这个要根据自己的Oracle安装路径去修改,例如:

@D:/oracle/product/11.1.0/db_1/RDBMS/ADMIN/ashrpt.sql

1

(1)日志报告类型

Enter value for report_type: text

选择生成的ASH 报告类型,是text 还是html,一般选择html

(2)日志报告起始时间

Enter value for begin_time: 04/18/1920:00:00

输入ASH 开始的时间,时间格式上面的示例有说明,比如我这里是2019年4月18日晚上20:00:00开始。

(3)日志报告结束时间

Enter value for duration:15

输入ASH 结束时间,默认是SYSDATE - begin_time,一般输入,一般默认是秒或者分组,拿出15分组的ash分析日志来。

(4) ASH报告名称

Enter value of report name:ash20190420

输入ASH报告名称,可以随意填,非生产,报告名称,打印的日志后面可以找到报告存放路径,比如:

D:\oracle\product.2.0\dbhome_1\RDBMS\ADMIN\ash.html

SQL> @D:/oracle/product/11.1.0/db_1/RDBMS/ADMIN/ashrpt.sql Current Instance ~~~~~~~~~~~~~~~~ DBID DB_NAME INST_ INST_NAME ---------- ------------ ----- ------------ 1525762377 ORCL 1 orcl Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Enter 'html' for an HTML report, or 'text' for plain text Defaults to 'html' Type Specified: html Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DBBID INSTT DBB_NAME INSTT_NAME HOST ------------ ----- ------------ ------------ ------------ * 1525762377 1 ORCL orcl PC-201508171 906 Defaults to current database Using database id: 1525762377 Enter instance numbers. Enter 'ALL' for all instances in a RAC cluster or explicitly specify list of instances (e.g., 1,2,3). Defaults to current instance. Using instance number(s): 1 PL/SQL procedure successfully completed ... 0 PL/SQL procedure successfully completed ... 18-Apr-19 22:05:54 ASH Samples in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Oldest ASH sample available: 09-Apr-19 22:00:36 [ 12968 mins in the past] Latest ASH sample available: 18-Apr-19 22:05:54 [ 3 mins in the past] ... 18-Apr-19 22:05:54 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 Report begin time specified: 04/18/1920:00:00 PL/SQL procedure successfully completed 18-Apr-20 00:00:00 Enter duration in minutes starting from begin time: Defaults to SYSDATE - begin_time Press Enter to analyze till current time Report duration specified: 7200 PL/SQL procedure successfully completed ... 23-Apr-20 00:00:00 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 WAIT_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_0423_0000.html. To use this name, press to continue, otherwise enter an alternative. Using the report name ash.html Summary of All User Input ------------------------- Format : HTML DB Id : 1525762377 Inst num : 1 Begin time : 18-Apr-20 00:00:00 End time : 23-Apr-20 00:00:00 Slot width : Default Report targets : 0 Report name : ash.html ... 23-Apr-20 00:00:00 Started spooling to D:\oracle\product.2.0\dbhome_1\RDBMS\ADMIN\ash.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

Oraccle SQL调优系列之ASH简介

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

遇到问题:假如执行命令遇到:ORA-01843:无效月份报错,就可以执行下面sql

ALTER SESSION SET NLS_LANGUAGE=American; alter session set NLS_DATE_FORMAT='DD-MON-YY';

1

2

二、ASH报告指标分析

ASH报告就非常直接了,直接给出等待事件和哪些SQL关联,然后我们就可以拿SQL去调优了

图来自《收获,不止SQL优化》一书

Oracle SQL

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在Kubernetes中引入Container Runtime Interface (CRI)
下一篇:【盖楼有奖】跳转机容器化方案,预示着容器化时代的到来。
相关文章