乌林珠
作者乌林珠·2012-05-14 20:45
数据库管理员·IBM

DB2 9分布式管理:自动维护和实用程序节流

字数 4985阅读 1034评论 0赞 0
【转载】

来源:互联网

==================================================================

  前言

  DB2 9 的适应性实用程序节流系统使维护可以在繁忙时间段进行。

  如果您希望保持汽车状态良好,就必须定期进行一些维护,比如更换机油和火花塞。对于数据库,也是如此;如果希望保持良好的性能,就必须定期执行维护操作,比如重新安排数据布局、更新数据库统计数据和重组表/索引。

  在 DB2 中,这些维护操作是通过运行各种实用程序来执行的。因为这些实用程序会消耗宝贵的系统资源,所以维护操作通常在非高峰时间段的 “维护窗口” 中执行。但是,如今的业务越来越需要不间断地运行,所以让数据库离线以执行这些重要的操作变得越来越困难了。现在,一些维护任务可以在数据库在线的情况下执行,但是许多任务消耗的资源仍然非常多,会影响数据库的正常工作。

  IBM 为这个问题提供了一个解决方案,可以自动执行某些应该定期执行的日常维护活动。IBM 开发人员还创建了一种细粒度的资源控制机制,这种机制称为实用程序节流(utility throttling)。它允许选择一些实用程序,让它们在某些时间占用更多资源,在其他时间占用比较少的资源。

  在这篇专栏文章中,我将解释如何执行自动维护,并说明如果需要在数据库正在处理工作负载时执行维护操作,应该如何利用实用程序节流。

  自动维护

  自动维护是 DB2 9 中引入的一个新特性。通过使用这个特性,您可以指定维护目标,DB2 Database Manager 决定是否需要执行维护活动来实现这些目标。如果 Database Manager 认为需要执行维护操作,就可以在下一个维护时间窗中自动执行此操作;维护时间窗是由您指定的一个时间段,所有自动维护活动都在这段时间内执行。

  可以使用自动维护执行以下任务:

  ◆生成数据库备份映像。自动数据库备份解决方案可以确保适当地定期备份数据库,用户不需要总是关注备份时间或如何正确地编写 BACKUP 命令。

  ◆数据碎片整理(表或索引重组)。这种维护活动可以提高 DB2 Database Manager 访问表的效率。自动重组管理离线表和索引重组,用户不需要关心何时以及如何重组数据。

  ◆数据访问优化(运行 RUNSTATS)。DB2 Database Manager 会自动更新关于表数据、表索引数据或者这两者的系统编目统计数据。在响应查询时,DB2 Optimizer 使用这些统计数据决定使用哪个路径访问数据。自动统计数据收集过程会维护最新的表统计数据,从而提高数据库的性能。其目标是让 DB2 Optimizer 总是根据准确的信息选择访问计划。

  ◆统计数据分析。自动统计数据分析过程会探测过时、缺失或不准确地指定的统计数据,根据查询反馈生成统计数据分析,从而建议何时以及如何收集表统计数据。

  在创建 DB2 9 数据库时,会默认启用自动维护;通过自动维护专用的数据库配置参数(auto_maint、auto_db_backup、auto_tbl_maint、auto_runstats、auto_stats_prof、auto_prof_upd 和 auto_reorg)启用可用的自动维护特性。这些参数是一组层次化的开关,可以设置为 ON 或 OFF。

  适应性实用程序节流

  自动维护活动(备份、统计数据收集、统计数据分析和表/索引重组)在运行时会消耗系统资源,所以会影响数据库性能。另外,离线数据库备份和表/索引重组操作会限制对表、索引或整个数据库的访问。为了尽可能减少对系统的影响,可以使用 DB2 的适应性实用程序节流系统对某些自动维护活动的资源使用量进行调节。

  适应性实用程序节流系统是在 DB2 8.1.2 中引入的。这个系统使维护实用程序可以在工作负载比较高的时间段运行,同时把它们对系统的影响限制在可接受的范围内。这个节流系统还使实用程序在非高峰时间段自动地获得更多的计算资源,而在高峰时间段减少资源使用量。在 DB2 9.5 中,以下维护操作可以利用适应性实用程序节流系统:

  ◆统计数据收集

  ◆备份操作

  ◆数据重新布置操作

  ◆异步索引清理

  您可能已经使用实用程序进行节流,只是没有意识到而已;在默认情况下,DB2 自动地对一些自动调用的维护实用程序进行节流,比如自动的 RUNSTATS。

  设置和影响策略

  为了控制实用程序节流,必须建立一个影响策略。影响策略是指实例范围限制,所有节流实用程序对生产性工作负载的积累影响不能超越这个限制;建立这样的策略之后,就由系统负责确保实施这个策略。对于在一个实例中运行的启用节流的所有实用程序,通过 DB2 Database Manager 配置参数 util_impact_lim 控制它们的影响策略。(这个参数是动态的,所以不需要停止并重新启动实例就能够修改它;甚至可以在启用节流的实用程序正在运行时设置它。)要想为所有节流的实用程序定义影响策略,只需为配置参数 util_impact_lim 指定一个 1 到 100 之间的值。

  例如,要想把实例范围的影响限制设置为 10%(换句话说,要确保所有节流的实用程序对系统工作负载造成的性能影响不超过 10%),只需执行下面的 UPDATE DATABASE MANAGER 命令,把配置参数 util_impact_lim 设置为 10:

  UPDATE DATABASE MANAGER USING UTIL_IMPACT_LIM 10

  如您所料,与未节流的实用程序相比,节流的实用程序通常要花费更长时间才能执行完成。如果发现某个实用程序的运行时间过长了,就可以增加配置参数 util_impact_lim 的值,或者通过把配置参数 util_impact_lim 设置为 100 来完全禁用节流。(如果 util_impact_lim 设置为 100,实用程序就不会受到节流。在这种情况下,实用程序可以尽可能快地运行,但是它们很可能对工作负载性能产生严重影响。)

  执行节流的实用程序

  定义影响策略并不意味着所有实用程序的运行都会受到节流。实际上,即使已经定义了影响策略,在默认情况下实用程序都是以非节流模式运行的。要想以节流模式运行一个实用程序,就必须在调用这个实用程序时启用节流,或者在启动这个实用程序之后启用节流。有些实用程序无法在调用时启用节流,只能在启动之后启用节流,例如 REBALANCE。

  要想在调用实用程序时启用节流,必须在执行这个实用程序所用的命令中指定 UTIL_IMPACT_PRIORITY 选项。例如,为了调用 Backup 实用程序并启用节流,应该执行下面的 BACKUP DATABASE 命令:

  BACKUP DATABASE sample UTIL_IMPACT_PRIORITY

  当前,只有 BACKUP DATABASE 和 RUNSTATS 命令能够识别 UTIL_IMPACT_PRIORITY 子句。另外,必须先定义影响策略(通过设置配置参数 util_impact_lim),然后 UTIL_IMPACT_PRIORITY 子句才能对这些命令起作用。

  UTIL_IMPACT_PRIORITY 子句有一个可选的相对优先级参数(0 到 100 之间的值;0 表示关闭),这个参数用来区分节流的实用程序的重要性。与具有较低优先级的节流实用程序相比,高优先级的实用程序会占用更多资源。IBM 建议不指定相对优先级值,而是接受默认的优先级值 50。(请记住,所有节流实用程序的累积影响仍然受到影响策略的限制。)

  修改影响策略

  如果想修改已经在运行的实用程序的影响优先级(节流级别),那么可以执行 SET UTIL_IMPACT_PRIORITY 命令。可以使用这个命令:

  ◆对以非节流模式启动的实用程序进行节流,

  ◆对节流的实用程序取消节流,

  ◆重新调整节流实用程序的优先级。(如果同时运行多个节流实用程序,而其中之一比较重要,就可以使用这个功能。)

  SET UTIL_IMPACT_PRIORITY 命令的语法是:

  SET UTIL_IMPACT_PRIORITY [UtilityID] TO [Priority]

  其中:

  * UtilityID 用 ID 表示要修改其优先级的正在运行的实用程序。

  * Priority 指定与这个实用程序相关联的实例级影响限制。100 表示最高优先级;

  1 表示最低优先级。把 Priority 设置为 0 会使节流的实用程序以非节流模式继续运行;

  把 Priority 设置为非零值会使非节流的实用程序以节流模式继续运行。

  因此,如果希望让实用程序 ID 为 1 的非节流 Backup 操作以节流模式继续运行,就可以执行下面的 SET UTIL_IMPACT_PRIORITY 命令:

  SET UTIL_IMPACT_PRIORITY 1 TO 20

  执行这个命令之后,Backup 操作和同时执行的其他节流实用程序的累积影响会低于为配置参数 util_impact_lim 指定的百分比值;值 20 定义 Backup 操作相对于其他节流实用程序的节流重要性。

  查明正在运行的实用程序

  在以前,如果 DB2 Database Manager 认为需要执行某一维护操作(根据先前指定的目标),就会自动调用相应的实用程序。那么,如何判断哪些实用程序正在运行呢?更重要的是,如果希望用 SET UTIL_IMPACT_PRIORITY 命令修改某一实用程序的影响优先级,应该如何获得实用程序的 ID 呢?

  可以通过执行 LIST UTILITIES 命令,查明一个实例上正在运行的实用程序(如果有的话)及其影响优先级。这个命令的语法是:

  LIST UTILITIES

  如果某人对 SAMPLE 数据库启动了 Backup 操作,而您希望获得关于这个操作的详细信息,那么可以执行下面的 LIST UTILITIES 命令:

  LIST UTILITIES SHOW DETAIL

  假设这个 Backup 操作是以非节流模式启动的,执行以上命令时返回的信息应该与清单 1 相似。

  清单1. LIST UTILITIES 命令输出结果

  ID = 1

  Type = BACKUP

  Database Name = SAMPLE

  Partition Number = 0

  Description = offline db

  Start Time = 03/12/2008 10:35:31.442019

  State = Executing

  Invocation Type = User

  Throttling:

  Priority = Unthrottled

  Progress Monitoring:

  Estimated Percentage Complete = 46

  Total Work = 49310404 bytes

  Completed Work = 22696620 bytes

  Start Time = 03/12/2008 10:35:31.466054

  要想修改这个 Backup 操作的影响优先级,应该执行 SET UTIL_IMPACT_PRIORITY 命令并指定实用程序 ID 为 1。

  自动维护

  执行定期的日常维护是数据库管理的重要部分。但是,维护实用程序会消耗宝贵的系统资源,如果在数据库在线的情况下执行它们,就必须仔细地控制对它们的使用。自动维护对何时执行某些实用程序提供了更多的控制能力,并使 DB2 能够智能化地决定何时执行某些维护操作。

  实用程序节流使维护实用程序可以与工作负载在繁忙时期同时运行,并将对系统的影响控制在可接受的范围内。实用程序节流使实用程序能够在非高峰时间段自动地获得更多的计算资源,而在高活动量时间段减少资源使用量。通过结合使用这两种技术,就可以显著减少数据库维护所需的工作量。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广