IBM 的 DB2 V9.5 引入并完善了工作负载管理(WORKLOAD MANAGEMENT)功能,使得我们可以更深入地洞察系统的运行情况并更好地控制资源和性能。在 DB2 V9.5 中,新引入的工作负载管理功能(WLM)可以帮助您标识、管理和监视数据服务器的工作负载。本文将重点介绍 DB2 V9.5 关于工作负载管理(WLM)的新特性以及相关的概念,并结合实际的例子帮助大家理解和提高。
简介
IBM 的 DB2 V9.5 引入并完善了工作负载管理(WORKLOAD MANAGEMENT)功能,使得我们可以更深入地洞察系统的运行情况并更好地控制资源和性能。在 DB2 V9.5 中,新引入的工作负载管理功能(WLM)可以帮助您标识、管理和监视数据服务器的工作负载。工作负载管理提供了第一个真正集成到 DB2 数据服务器的工作负载管理解决方案,对标识声明的支持使您可以为多层应用程序环境中的各个用户或组提供工作负载管理。
一个好的工作负载管理(WLM)系统能够能够帮助企业更有效的监控系统的运行情况。由于 DB2 V9.5 的数据管理方面得到了极大的增强,在数据库服务器环境中,你可以获得远远超过你预期的高效的管理性能。为了保证数据库服务器得到最大的性能,一个高效的工作负载管理(WLM)系统是必需的。一个成功的工作负载管理(WLM)需要考虑很多方面,并且要清楚的知道自己的目标是什么,比如核心的业务将获得更多的资源,一些非核心的业务对其能够获取的资源进行一定的限制,又或者,对一些流氓查询进行限制等等。在数据库服务器环境中,你必须定义目标。有些时候目标是清晰的,特别是他们源自服务级别协议(SLA)目标的时候。比如,你可以在 AIX 操作平台地 DB2 上设定一个特定的应用程序所耗费的 CPU 资源不能超过所有 CPU 资源总量的 10%(可以通过和 AIX WLM 结合实现)。目标还可以限定在一天中的某一个时间,比如,一个通宵运行的批处理实用程序必须在早上 8 点之前完成,以满足每天的销售报告能够按时出来。但是在其他的情况下,目标是比较难以量化的,比如想设置这样一个目标,保持数据库用户满意并且防止意外的数据库活动干扰用户们的日常工作。不管工作目标是否可以量化,理解工作负载管理分成哪几个阶段很重要。工作负载管理(WLM)有三个阶段,分别是:
标识阶段(Identification Stage)
标识阶段是工作负载管理解决方案的第一步,用来对数据库服务器当前运行的工作进行鉴定标识。如果你想对某一种类型的工作完成设定的目标,第一步需要能够标识出这个工作的具体信息。标识一个具体工作的方法有很多中,比如可以使用应用程序的名称、授权 ID(Authorization ID)等。
管理阶段(Management Stage)
管理阶段是工作负载管理解决方案的第二步。
在鉴定了工作的类型后,接下是对这个工作的动态管理,你可以对这个工作分配资源或者进行严格控制。管理阶段包含保证完成你的目标的机制,当不符合你设定的目标时将采取相应的操作。在数据库服务器上,你会发现,当存在一些低效 SQL 语句时,整体性能会受到很大影响,高峰期时会占据大量资源,或者不同的应用会过度争用同一资源。
监控阶段(Monitoring Stage)
在鉴定了工作的类型后,接下是对这个工作的动态管理,你可以对这个工作分配资源或者进行严格控制。管理阶段包含保证完成你的目标的机制,当不符合你设定的目标时将采取相应的操作。在数据库服务器上,你会发现,当存在一些低效 SQL 语句时,整体性能会受到很大影响,高峰期时会占据大量资源,或者不同的应用会过度争用同一资源。
工作负载管理的流程如图1所示:
工作负载管理功能(WLM)允许我们将数据服务器上的工作按类进行划分并进行相应的设置,以便能够支持同一系统上的各种用户和应用程序。在引入了 WLM 后,以面向核心业务系统,以事务处理为主的数据库和以面向决策支持、辅助分析的,以数据挖掘为主的数据库现在可以选择合并成一个数据库,也就是说,现在 DB2 支持多种混合类型的工作负载,可以同时兼容事务处理和数据挖掘,从而为设计的灵活性提供更大的支持。通过使用工作负载定义自动标识工作、将工作负载分配给服务类并将资源分配到每个服务类,可以将工作划分为易管理的逻辑组。可以捕获详细的工作负载概要文件和性能信息,以帮助优化我们的工作负载定义和服务类定义。可以通过成本、时间和并行性阈值来控制执行情况,这使我们可以控制流氓查询并有助于达到服务级别协议(SLA)目标。通过使用阈值,系统可以自动对不良情况作出反应或在它发生前进行预测。当我们控制了长时间运行且复杂的查询的影响后,我们就可以使事务保持平稳运行。我们可以跟踪处理的每个阶段,以便可以为用户提供最新的状态信息。
另外,在 AIX 操作系统平台上,DB2 服务类提供一个可选的功能,用来把 DB2 进程和 AIX 本身的工作负载管理器(WLM)服务类紧密集成,从而可以利用 AIX 操作系统的功能。每个 DB2 服务类可以分配给特定的 AIX WLM 服务类,在 DB2 服务类中工作的所有代理将由 DB2 自动分配给相应的 AIX WLM 服务类。比如,AIX WLM 可以动态地调整 CPU 份额或使用其他服务类的备用 CPU 份额来最大程度地利用数据服务器。AIX WLM 将对 CPU 进行富有成效的管理,在直接分配资源时使 CPU 得到更好的利用,具体包括:
– 通过分配给 AIX WLM 服务类相应的 CPU 份额,完成 CPU 资源的分配
– CPU 份额可以使用 AIX WLM 接口进行动态调节
– 提供从其他服务类借用其空闲 CPU 份额的能力
– 通过 AIX 服务类可以提供操作系统基本的统计信息
需要注意的是,虽然 AIX WLM 能够为正在运行的进程提供 CPU,I/O 以及内存方面的控制,但是,在 DB2 V9.5 中,DB2 只能受益于 AIX WLM 的 CPU 的部分。
下面我们分别来具体看一下工作负载管理(WLM)的三个阶段,首先看一下识别阶段(Identification Stage)。标识阶段是工作负载管理解决方案的第一步,用来对数据库服务器当前运行的工作进行鉴定标识。可以使用很多方法来标识数据库活动,举个例子,你可以通过谁提交的工作来标识数据库活动,也可以通过其他方法来标识数据库活动。在标识阶段有两个相关的概念,分别是:
工作负载(WORKLOAD)
工作负载(WORKLOAD)通过工作所在的数据库连接属性来标识数据库活动。工作负载(WORKLOAD)是用来分配工作给服务类(Service Class)的方法,是一个根据工作的来源(source)标识区分工作的对象,以方便随后对工作进行相应的管理。来源(source)是由工作所在的数据库连接的属性决定的。
需要注意的是,此处所说的工作负载(WORKLOAD)和设计顾问程序等中所述的工作负载不是一个概念,设计顾问程序等中的工作负载就是数据库管理器必须在给定时间段内处理的一组 SQL 语句,而此处所讲的工作负载是指根据工作所在的数据库连接属性定义的逻辑分类。
工作类(WORK CLASS)和工作类集(WORK CLASS SET)
除了使用工作所在的数据库连接属性标识数据库活动以外,你还可以通过创建可选的工作类,通过基于工作的类型来标识数据库活动。这些类型属性可以是 READ , WRITE , DML , DDL , LOAD , CALL ,ALL。
工作类集(WORK CLASS SET)是一组工作类的集合。为了让一个工作类生效,至少需要启用一个工作类上的工作操作(WORK ACTION)。
下面我们来看一下管理阶段(Management Stage)。管理阶段是工作负载管理解决方案的第二步。在鉴定了工作的类型后,接下是对这个工作的动态管理,你可以对这个工作分配资源或者进行严格控制。管理阶段包含保证完成你的目标的机制。和管理阶段相关的概念有三个概念,分别是:
服务类(SERVICE CLASSES)和服务子类(SERVICE SUBCLASSES)
服务类的目的是为工作运行定义一个执行环境,这个环境包含可用的资源和不同的执行阈值(阈值定义不包含在服务类定义中,而是在单独的阈值定义部分),当你定义一个工作负载时,你必须为之指定对应的服务类。如果你没有显式的定义工作负载,用户数据库请求会被认为是系统默认的工作负载,其对应的服务类是系统默认的用户服务类。所有的系统数据库请求,对应的都是默认系统服务类。
所有的数据库请求都是在服务类中执行的,并且在服务类中获得相应的资源。所有的连接都是映射到工作负载上的,所有的工作负载都是映射到服务类上的。针对服务类中资源分配的情况,可以定义相应的阈值,来进行限定。DB2 的服务类拥有两层结构:服务父类(Service Superclass)和服务子类(Service Subclass)。
当你使用服务类时,你可以通过控制这个服务类的一系列属性,使不同的工作具有不同的优先级。比如,你可以设置服务类中工作的 I/O 页预取优先级,设置服务类中所有代理的 CPU 优先级,你还可以通过不同类型的阈值控制服务类中工作所使用的资源。
阈值(THRESHOLD)
可以通过创建阈值的方式对服务类所使用的资源进行控制,阈值可以根据不同的类型进行创建。阈值提供一种方法,用来控制每种工作能够使用的资源数量。在工作负载管理(WLM)解决方案中,你可以使用阈值来防止系统过载或者资源被滥用现象的发生。通过阈值,你可以直接对特定的资源设置限定,当超过限定时,就会触发特定的动作。
工作操作(WORK ACTION)和工作操作集(WORK ACTION SET)
工作操作(WORK ACTION)是一个用来控制某一种类型工作所对应数据库活动的方法。简单的说就是,当数据库活动满足已经定义好的工作类(WORK CLASS)所涉及的范围时,就会触发相应的工作操作(WORK ACTION)。
下面我们来看一下最后一个阶段,也就是监控阶段(Monitoring Stage)。监视的主要目的是确定你的系统和独立运行的工作负载是否健康和高效。通过表函数,你可以访问实时操作的数据(比如服务类中正在运行的工作负载和数据库活动的列表或者平均响应时间的列表)。作为实时监控的补充,为了历史分析,还通过使用事件监控器捕获数据库活动信息的细节和数据库活动统计信息。
总的来说,工作负载管理(WLM)有两种方式对工作进行管理,即一种主要的方式,一种补充的方式。主要的方式是通过工作负载(Workload)、服务类(Service Classs )和阈值(Threshold)相结合的方式,根据数据库行为的来源(数据库连接属性)对工作进行管理。补充的方式是通过工作类集(Work Class Set)和工作操作集(Work Action Set)相结合,根据数据库行为的属性对工作进行管理。补充的方式是在主要的管理方式基础之上进行的,不是单独进行管理的,也就是说,主要的管理方式一定会生效,如果定义了补充的方式,则补充的方式也同时生效。
所有的工作都将通过工作负载(Workload)、服务类(Service Classs )和阈值(Threshold)相结合的方式,根据数据库行为的来源(数据库连接属性)对工作进行管理。所有的工作都有对应的工作负载,当你定义一个工作负载时,你必须为之指定对应的服务类。如果你没有显式的定义工作负载,用户数据库请求会被认为是系统默认的工作负载,其对应的服务类是系统默认的用户服务类。所有的系统数据库请求,对应的都是默认系统服务类。所有的数据库请求都是在服务类中执行的,并且在服务类中获得相应的资源。可以通过创建阈值的方式对服务类所使用的资源进行控制,阈值可以根据不同的类型进行创建。
补充的方式(通过工作类集(Work Class Set)和工作操作集(Work Action Set)相结合,根据数据库行为的属性对工作进行管理)还将在主要的工作负载管理方式之上,根据数据库的行为,比如是 READ 还是 WRITE,定义工作类,当满足工作类定义时,就将触发相应的工作操作。
具体介绍如下:
工作负载(Workload)、服务类(Service Classs )和阈值(Threshold)
可以根据数据库连接的各种属性对具体的工作进行分类,定义成工作负载(Workload),定义工作负载时指定要匹配的服务类(Service Classs ),然后通过控制服务类的一系列属性,可以使不同的工作具有不同的优先级。比如,你可以设置服务类中工作的 I/O 页预取优先级,设置服务类中所有代理的 CPU 优先级,你还可以通过不同类型的阈值控制服务类中工作所使用的资源。另外,还可以使用阈值对服务类所使用的资源进行控制,阈值可以根据不同的类型进行创建。阈值提供一种方法,用来控制每种工作能够使用的资源数量。在工作负载管理(WLM)解决方案中,你可以使用阈值来防止系统过载或者资源被滥用现象的发生。通过阈值,你可以直接对特定的资源设置限定,当超过限定时,就会触发特定的动作。
工作类集(Work Class Set)和工作操作集(Work Action Set)
还可以根据数据库行为的属性对工作进行分类,比如根据 SQL 语句是 READ 和 WRITE 等定义不同的工作类集,当数据库活动满足已经定义好的工作类(WORK CLASS)所涉及的范围时,就会触发相应的工作操作(WORK ACTION)。
由于工作负载管理(WLM)是 DB2 V9.5 的新特性,很多客户不知道该如何使用,本文将重点介绍 DB2 V9.5 关于工作负载管理(WLM)的新特性以及相关的概念,并结合实际的例子帮助大家理解和提高。
我们将按照下列顺序介绍工作负载管理(WLM)以及相关的功能:
1.安装 DB2 V9.5 ESE,通过创建示例数据库 DB2TEST1,构建演示环境,创建示例表 " RHETTE "." PROJECT ",并插入演示数据,创建演示用户。
2.介绍服务类(SERVICE CLASS)的具体知识,并通过创建 2 个服务类的例子来帮助大家理解。
3.介绍工作负载(WORKLOAD)的具体知识,并通过创建 2 个工作负载的例子来帮助大家理解。
4.介绍阈值(THRESHOLD)的具体知识,并通过创建 2 个阈值的例子来帮助大家理解。
5.介绍如何取消一个数据库活动。
6.介绍工作类(WORK CLASS)和工作操作(WORK ACTION)的具体知识,并通过例子来帮助大家理解。
7.总结工作负载管理(WLM)的优点。