热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

通过案例学调优之--AWRBaseLine管理-mysql教程

通过案例学调优之--AWRBaseLine管理BaseLineBaseline是指一个特定时间段内的性能数据,保留这些数据是为了在性能问题产生时与其他类似的工作负载时间段进行比较。Baseline中包含的快照将从自动AWR清理进程中排除,并无限期的保留。在OracleDatabas

通过案例学调优之--AWR BaseLine管理 BaseLine Baseline 是指一个特定时间段内的性能数据,保留这些数据是为了在性能问题产生时与其他类似的工作负载时间段进行比较。Baseline 中包含的快照将从自动 AWR 清理进程中排除,并无限期的保留。 在 Oracle Databas

通过案例学调优之--AWR BaseLine管理

BaseLine

Baseline 是指一个特定时间段内的性能数据,保留这些数据是为了在性能问题产生时与其他类似的工作负载时间段进行比较。Baseline 中包含的快照将从自动 AWR 清理进程中排除,并无限期的保留。

在 Oracle Database 中存在多种类型的 baseline:

Fixed Baseline:fixed baseline 表示的是您指定的一个固定的、连续的时间段。在创建 fixed baseline 之前,请认真考虑您选作 baseline 的时间段,因为该 baseline 应该代表系统处于良好的性能下运行。您可以在将来将该 baseline 与在性能较差的时间段捕获的其他 baseline 或 snapshot 进行比较分析。

Moving Window Baseline表示的是 AWR 保留期内存在的所有 AWR 数据。在使用自适应阈值时,它非常有用,因为数据库可以使用整个 AWR 保留期内的 AWR 数据来计算指标值。

Oracle Database 会自动维护系统定义的 moving window baseline。系统定义的 moving window baseline 的默认窗口大小就是当前的 AWR 保留期,即默认为 8 天。如果您打算使用自适应阈值,请考虑使用更长的移动窗口——如30天,以便精确地计算阈值。您可以重新调整 moving window baseline,将移动窗口的大小调整为小于或等于 AWR 的保留天数。因此,要增加移动窗口的大小,必须要先增加相应的 AWR 保留期限。

Baseline Template:您可以使用 baseline template 创建将来某个连续时间段的 baseline。Oracle 中有两种 baseline 模板:single 和 repeating

利用 single baseline template,您可以为将来某个单独的连续时间段创建 baseline。该技术在某些情况下非常有用。例如,如果您想捕获下周计划的系统测试期间的 AWR 数据,您可以创建一个 single baseline template 来自动捕获测试发生的时间段的统计数据。

利用 repeating baseline template ,可以根据重复的时间计划创建和删除 baseline。当您希望 Oracle Database 自动持续地捕获连续时间段的统计数据时,这非常有用。例如,您可能需要在长达一个月内捕获每周一早上的 AWR 数据。在这种情况下,您可以创建一个 repeating baseline template ,以在每周一自动创建 baseline,在指定的过期期限内自动删除过时的 baseline。

案例:

1、创建基线

Fixed Baseline:fixed baseline 表示的是您指定的一个固定的、连续的时间段。

根据snap_id创建:
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
   start_snap_id    IN  NUMBER,
   end_snap_id      IN  NUMBER,
   baseline_name    IN  VARCHAR2,
   dbid             IN  NUMBER DEFAULT NULL,
   expiration       IN  NUMBER DEFAULT NULL);

根据时间创建: 
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
   start_time       IN  DATE,
   end_time         IN  DATE,
   baseline_name    IN  VARCHAR2,
   dbid             IN  NUMBER DEFAULT NULL,
   expiration       IN  NUMBER DEFAULT NULL);
   
查看snapshot:
14:25:31 SYS@ test1 >select snap_id,BEGIN_INTERVAL_TIME,dbid from dba_hist_snapshot;

   SNAP_ID BEGIN_INTERVAL_TIME                                                               DBID
---------- --------------------------------------------------------------------------- ----------
       435 04-NOV-14 11.00.52.880 AM                                                   1195893416
       436 04-NOV-14 12.00.07.338 PM                                                   1195893416
       437 04-NOV-14 01.00.22.331 PM                                                   1195893416
       432 04-NOV-14 12.00.04.575 AM                                                   1195893416
       434 04-NOV-14 09.52.45.512 AM                                                   1195893416
       428 31-OCT-14 02.58.47.186 PM                                                   1195893416
       429 31-OCT-14 04.00.51.633 PM                                                   1195893416
       430 03-NOV-14 10.19.24.000 AM                                                   1195893416
       433 04-NOV-14 09.41.40.000 AM                                                   1195893416
       426 31-OCT-14 11.25.58.000 AM                                                   1195893416
       427 31-OCT-14 02.47.40.000 PM                                                   1195893416
       431 03-NOV-14 10.30.31.348 AM                                                   1195893416

12 rows selected.

创建Baseline:
14:27:46 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id=>435,end_snap_id=>436,baseline_name=>'work_bs1',dbid=>1195893416,expiration=>30);
PL/SQL procedure successfully completed.

--435 是起始的 snapshot 序列号,436 是结束 snapshot 序列号。expiration => 30 表示该 baseline 将在30天后自动删除,expiration =>null表示,永不过期
--创建 baseline 时,系统会自动分配一个唯一的 baseline ID 给新建的 baseline。可以通过 DBA_HIST_BASELINE 视图查看。

查看Baseline:
14:31:10 SYS@ test1 >col baseline_name for a40
14:31:30 SYS@ test1 >select dbid,baseline_id,baseline_name,EXPIRATION,CREATION_TIME from dba_hist_baseline
      DBID BASELINE_ID BASELINE_NAME                            EXPIRATION CREATION_TIME
---------- ----------- ---------------------------------------- ---------- -------------------
1195893416           1 work_bs1                                         30 2014-11-04 14:29:08
1195893416           0 SYSTEM_MOVING_WINDOW                                2013-06-23 12:43:59

重命名Baseline:
14:31:30 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (old_baseline_name => 'work_bs1', new_baseline_name => 'work_bl1', dbid => 1195893416);
PL/SQL procedure successfully completed.

14:35:46 SYS@ test1 >select dbid,baseline_id,baseline_name,EXPIRATION,CREATION_TIME from dba_hist_baseline;
      DBID BASELINE_ID BASELINE_NAME                            EXPIRATION CREATION_TIME
---------- ----------- ---------------------------------------- ---------- -------------------
1195893416           1 work_bl1                                         30 2014-11-04 14:29:08
1195893416           0 SYSTEM_MOVING_WINDOW                                2013-06-23 12:43:59

删除Baseline:
14:35:54 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'work_bl1',cascade => FALSE, dbid => 1195893416);
PL/SQL procedure successfully completed.

14:38:24 SYS@ test1 >select dbid,baseline_id,baseline_name,EXPIRATION,CREATION_TIME from dba_hist_baseline;
      DBID BASELINE_ID BASELINE_NAME                            EXPIRATION CREATION_TIME
---------- ----------- ---------------------------------------- ---------- -------------------
1195893416           0 SYSTEM_MOVING_WINDOW                                2013-06-23 12:43:59
--cascade 参数设置为 FALSE,指定只删除。将此参数设置为 TRUE 指定删除与该 baseline 相关联的所有快照。

移动窗口(Moving Window)基线

Oracle 11g引入了移动窗口(Moving Window)基线的概念,用于计算阀值的度量,窗口(window)是AWR数据在保存期限内的一个视图,窗口大小与AWR默认的保留期限8天匹配,但它可以设置为这个值的子集,在增大窗口大小前,首先要增大AWR保留期限的大小。

查询DBA_HOST_WR_CONTROL视图的RETENTION列,可以返回当前的AWR保留期限。

14:45:42 SYS@ test1 >SELECT retention FROM dba_hist_wr_control;
RETENTION
---------------------------------------------------------------------------
+00008 00:00:00.0

使用存储过程MODIFY_SNAPSHOT_SETTINGS可以修改保留期限,指定RETENTION参数,单位分钟。


14:48:12 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(retention=>43200);
--Minutes(=30 Days)
PL/SQL procedure successfully completed.

14:48:33 SYS@ test1 >SELECT retention FROM dba_hist_wr_control;
RETENTION
---------------------------------------------------------------------------
+00030 00:00:00.0

查询DBA_HIST_BASELINE视图可以返回当前的移动窗口大小。

14:48:44 SYS@ test1 >SELECT moving_window_size
14:50:30   2  FROM   dba_hist_baseline
14:50:30   3  WHERE  baseline_type = 'MOVING_WINDOW';
MOVING_WINDOW_SIZE
------------------
                 8

使用存储过程MODIFY_BASELINE_WINDOW_SIZE可以修改移动窗口基线,它接受WINDOW_SIZE参数,单位为天。

14:50:45 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.modify_baseline_window_size(window_size =>30);
PL/SQL procedure successfully completed.

14:53:25 SYS@ test1 >SELECT moving_window_size FROM   dba_hist_baseline WHERE  baseline_type = 'MOVING_WINDOW';
MOVING_WINDOW_SIZE
------------------
                30
Oracle建议在使用适当的阀值时,窗口大小应大于或等于30天。(应该小于或等于snapshot的retention)

基线模板

基线模板允许你定义可能在将来要捕获的基线,CREATE_BASELINE_TEMPLATE存储过程定义单一基线或重复基线的捕获,创建单一基线模板与创建基于时间的基线类似,除了将来的时间外。

15:02:44 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.create_baseline_template(
start_time=>TO_DATE('09-NOV-2014 00:00', 'DD-MON-YYYY HH24:MI'),
end_time=>TO_DATE('12-NOV-2014 05:00', 'DD-MON-YYYY HH24:MI'),
baseline_name =>'09_11_14_BS1',
template_name =>'09_11_14_TP1',
expiration=> 10
);
PL/SQL procedure successfully completed.

15:05:19 SYS@ test1 >col REPEAT_INTERVAL for a10
15:05:34 SYS@ test1 >select DBID,TEMPLATE_ID,TEMPLATE_NAME,TEMPLATE_TYPE,DURATION,EXPIRATION,REPEAT_INTERVAL from dba_hist_baseline_template
      DBID TEMPLATE_ID TEMPLATE_NAME                  TEMPLATE_   DURATION EXPIRATION REPEAT_INT
---------- ----------- ------------------------------ --------- ---------- ---------- ----------
1195893416           1 09_11_14_TP1                   SINGLE                       10

重复基线模板稍微有点不同,因为它需要调度信息,START_TIME和END_TIME参数分别在模板激活和释放时定义,DAY_OF_WEEK,HOUR_IN_DAY和DURATION定义产生基线的日期,时间和持续时间,因为模板会产生多个基线,基线名是以BASELINE_NAME_PREFIX开始的,下面的基线模板例子将在未来6个月内运行,每周星期一00:00至05:00收集基线。

15:05:35 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.create_baseline_template(
day_of_week=>'MONDAY',
hour_in_day=>0,duration=>5,
start_time=>SYSDATE,
end_time=>ADD_MONTHS(SYSDATE, 6),
baseline_name_prefix =>'monday_morning_bl',
template_name=>'monday_morning_tp',
expiration=> NULL
);
PL/SQL procedure successfully completed.

15:09:20 SYS@ test1 > select DBID,TEMPLATE_ID,TEMPLATE_NAME,TEMPLATE_TYPE,DURATION,EXPIRATION,REPEAT_INTERVAL from dba_hist_baseline_template;
      DBID TEMPLATE_ID TEMPLATE_NAME                  TEMPLATE_   DURATION EXPIRATION REPEAT_INT
---------- ----------- ------------------------------ --------- ---------- ---------- ----------
1195893416           1 09_11_14_TP1                   SINGLE                       10
1195893416           2 monday_morning_tp              REPEATING          5            FREQ=WEEKL
                                                                                      Y;INTERVAL
                                                                                      =1;BYDAY=M
                                                                                      ON;BYHOUR=
                                                                                      0;BYMINUTE
                                                                                      =0;BYSECON
                                                                                      D=0
                                                                          
15:12:14 SYS@ test1 >col BASELINE_NAME_PREFIX for a20
15:12:33 SYS@ test1 >r
  1  SELECT template_name,
  2         template_type,
  3         baseline_name_prefix,
  4         start_time,
  5         end_time,
  6         day_of_week,
  7         hour_in_day,
  8         duration,
  9         expiration
 10* FROM   dba_hist_baseline_template

TEMPLATE_NAME        TEMPLATE_ BASELINE_NAME_PREFIX START_TIME          END_TIME            DAY_OF_WE HOUR_IN_DAY
-------------------- --------- -------------------- ------------------- ------------------- --------- -----------
  DURATION EXPIRATION
---------- ----------
09_11_14_TP1         SINGLE    09_11_14_BS1         2014-11-09 00:00:00 2014-11-12 05:00:00
                   10

monday_morning_tp    REPEATING monday_morning_bl    2014-11-04 15:09:20 2015-05-04 15:09:20 MONDAY         0
         5
注意BASELINE_NAME_PREFIX列可能保留了基线前缀或完整的基线名,主要依赖于捕获基线的类型.

DROP_BASELINE_TEMPLATE存储过程删除基线模板

15:17:46 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.drop_baseline_template (template_name =>'09_11_14_TP1');
PL/SQL procedure successfully completed.

15:18:26 SYS@ test1 >exec DBMS_WORKLOAD_REPOSITORY.drop_baseline_template (template_name => 'monday_morning_tp');
PL/SQL procedure successfully completed.

15:18:52 SYS@ test1 >select DBID,TEMPLATE_ID,TEMPLATE_NAME,TEMPLATE_TYPE,DURATION,EXPIRATION,REPEAT_INTERVAL from dba_hist_baseline_template;
no rows selected

基线视图
DBA_HIST_BASELINE:显示有关系统中所获取的基线的信息。对于每个基线,该视图显示完整的时间范围,以及该基线是否为默认基线。其它信息包括创建日期、上一次统计信息计算的时间和基线类型。
DBA_HIST_BASELINE_DETAILS:显示可用来确定给定基线有效性的信息,如基线时段期间是否存在关闭操作及基线时段中由快照数据覆盖的百分比。
DBA_HIST_BASELINE_TEMPLATE:保存了基线模板。该视图提供了 MMON 所需的信息,用以确定何时根据模板创建基线,以及何时应删除基线。
DBA_HIST_BASELINE_METADATA:显示基线的元数据信息,包括名称、类型、创建时间、模板和失效时间。
如果要在过去的某个时段创建基线,则使用 CREATE_BASELINE 过程;如果时段有任何部分处于未来,则使用CREATE_BASELINE_TEMPLATE 过程。

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了通过mysql命令查看mysql的安装路径的方法,提供了相应的sql语句,并希望对读者有参考价值。 ... [详细]
author-avatar
迷途羔羊1989_751
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有