| 免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版 |
|---|
| 下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。 |
现今的数据库服务器经常涌现出各种各样的数据库活动,这些数据库活动通常来自许多不同的源。DB2 WLM 允许您监控数据库系统上执行的工作。这将有助于您最大限制地提高系统效率和/或流量,还能帮助您实现业务性能目标。WLM 是 IBM DB2 AESE 的一个关键部分,只要 DB2 数据库处于活动状态,WLM 就总是存在并时刻保持警惕。所有工作都通过 WLM 运行,即便是使用了默认配置。WLM 新增了一个功能,可以有选择性地集成 AIX 或 Linux 的操作系统工作负载管理,从而允许您根据需要利用这两个操作系统的功能。
DB2 Workload Manager 能够:
- 提供正确监控 DB2 执行环境中的工作所需的功能和细粒度。
- 允许在不同的业务部分之间分配关键资源,从而帮助您确保满足 SLA 的要求。
- 支持通过负载平衡更好地利用现有硬件。
- 帮助您在行为异常的语句对系统造成重大影响之前自动检测这些语句并采取相应行动。
- 支持利用操作系统工作负载管理环境(AIX 和 Linux)来补充 DB2 的监控功能。
下面几个小节将描述 DB2 WLM 基础概念,以及通过 WLM 可获取的监控和混合特性。
服务类 是 DB2 WLM 的基本组件之一。服务类的目的是用于定义一个执行环境,可以在其中运行数据服务器上的工作。服务类是在 DB2 的工作执行中分配和监控资源的主要点。通过用户连接提交的所有工作都可在 DB2 服务类中执行。
服务类定义和所有 WLM 对象定义都存储在 DB2 目录中,并在数据库启动时被读入内存。存储在内存中的 WLM 配置在 DPF (Database Partitioning Feature) 环境中的所有分区上均相同。
DB2 中有三个默认服务类:
- SYSDEFAULTUSERCLASS:所有用户活动都在此服务类中运行,除非特意创建另一个服务类。
- SYSDEFAULTMAINTENANCECLASS:该服务类用于跟踪正在执行管理和维护任务的内部 DB2 请求,比如异步索引清理、自动 runstats、自动 reorg 以及自动备份。
- SYSDEFAULTSYSTEMCLASS:该服务类用于跟踪正在执行系统级任务的内部 DB2 工作,比如页面清理器、预取器以及日志写入器。
还有两种类型的服务类,以双层层次结构排列:
- 服务超类 是较高的工作层,可视为一些用于提供一些跨服务子类的公共属性逻辑实体。
- 服务子类 是活动实际运行的地方。一个服务超类中可能存在一个或多个子类,系统将自动为每个超类创建一个默认子类。默认子类是所有映射到超类的工作( 即不直接映射到用户定义的子类)将运行的地方。
可以使用几种方法定义服务类的优先顺序和资源控制:
- 可以通过两种方法控制 CPU 优先性:AIX 或 Linux 工作负载管理;或者使用可在所有 DB2 服务类上设置的代理优先性。代理优先性影响该服务类中运行代理的相对代理优先性设置。
- 预取优先性向预取请求分配一个优先性,该优先性影响数据服务器处理预取请求的顺序。
- 缓冲池优先性影响缓存池中已由给定服务类中的活动访问的页面的比例。
工作负载 识别基于一组用户定义连接属性标识的入站工作。所有用户连接都映射到一个 DB2 工作负载,如果用户定义工作负载定义不存在,用户连接会被映射到默认用户工作负载 (SYSDEFAULTUSERWORKLOAD)。工作负载识别提交工作的用户,然后将工作路由到一个 DB2 服务类进行执行。建立连接时,连接会被映射到一个特定工作负载,根据需要 在一个工作边界单位上重新评估连接映射。
可用于为工作负载定义的连接属性有:
- 应用程序名称,可以使用通配符 (*)
- 授权 ID(用户、组、角色)
- 客户端信息(客户端用户 ID、客户端 applname、客户端 wrkstnname 和客户端 accstr),可以通过 sqleseti 或 WLM_SET_CLIENT_INFO 设置,可以使用通配符 (*)
- IP 地址
- 上述任意组合
当连接进入数据库系统时,该连接的属性将与 DB2 工作负载定义的属性相比较。连接将被映射到第一个发现的工作负载定义(以评估顺序指定的顺序搜索),该定义的属性会与连接的属性进行匹配。
图 1 显示没有用户定制(默认设置)的 DB2 WLM 环境。所有用户连接都被映射到默认用户工作负载,后者又直接映射到默认用户服务类。所有内部维护活动都被直接映射到默认维护服务类,所有系统活动都被直接映射到默认系统服务类。
图 1. 默认的 DB2 WLM 环境
图 2 显示了一个定制的 DB2 WLM 环境,其中来自不同应用程序的请求被工作负载映射到特定服务类。与特定的用户定义工作负载不匹配的连接将被映射到默认用户工作负载,进而将其活动映射到默认用户服务类。
图 2. 定制的 DB2 WLM 环境
阈值 可自动监控可能存在行为不良或异常的活动或连接。它们的主要目标是维护系统稳定性。阈值有各种不同类型。其中有一些用于监控和操作活动(比如查询或 DDL),而另一些则用于监控和操作连接。有些阈值具有预见性,它们甚至在工作启动之前就能做出反应,比如阻止预计成本(单位为 timeron)非常大的查询运行。另一些阈值具有 反应性,可对当前正在执行的工作的不同方面(比如执行花费的时间和资源消耗)进行监控并做出相应反应。还有一些具有并发性 的阈值,其本质上也具有预见性,是基于活动连接或正在运行的活动的数量进行监控和反应。阈值也可以应用于不同的领域,比如数据库、服务类或工作负载。
下面的列表将根据类型分组列出当前可用的所有 WLM 阈值列表,其中还包括对每个阈值的简短说明。
活动
- ESTIMATEDSQLCOST 可控制能运行的 DML 活动的大小。在编译时,DB2 优化器会生成一个预计成本,阈值则会在 DML 活动开始之前使用该成本来确定是否运行这个 DML 活动。
连接(聚合)
- TOTALDBPARTITIONCONNECTIONS 可控制与同一个分区(或协调器)连接的应用程序的数量。
- TOTALSCPARTITIONCONNECTIONS 可控制分配给分区上的某个特定服务类的应用程序的数量。这是一个排队阈值。
活动(汇总)
- CONCURRENTWORKLOADACTIVITIES 可控制一个分区上能够运行的每个工作负载实例的并发活动的数量。
- CONCURRENTDBCOORDACTIVITIES 可控制一个跨所有分区的数据库上能够运行的并发活动的数量。这是一个排队阈值,被认为是最强大的阈值之一,因为事实证明它在控制资源消耗方面非常有效。
工作负载实例(汇总)
- CONCURRENTWORKLOADOCCURRENCES 可控制某个特定工作负载每次可运行的工作负载实例的数量。工作负载实例是与工作负载定义相关的连接。例如,如果连接 APPLICATIONA 被映射到 WORKLOADA,那么 APPLICATIONA 连接就会被认为是 WORKLOADA 的一个实例。
活动
- ACTIVITYTOTALTIME 可控制活动运行需要的总时间,包括等待或排队时间。
- SQLROWSRETURNED 可控制活动所能返回的应用程序的行数。
- CPUTIME 和 CPUTIMEINSC 可控制活动在一个分区上在其生命周期中能够消耗的 CPU 时间。
- SQLTEMPSPACE 可控制活动在一个分区上能够消耗的系统临时表空间。
- SQLROWSREAD 和 SQLROWSREADINSC 可控制活动在一个分区上在其生命周期中能够读取的行数。
活动(汇总)
- AGGSQLTEMPSPACE 可控制每个数据库分区中一个服务类中的活动使用的系统临时表空间消耗总量。
连接
- CONNECTIONIDLETIME 可控制连接闲置的持续时间。
其他
- UOWTOTALTIME 可控制数据库管理器允许一个工作单位执行的总时间。
如果您的 DB2 系统上运行的工作引发了某个阈值超过指定值(例如,某个 DML 活动的预计成本超过 ESTIMATEDSQLCOSTA 阈值的指定值),那么就会发生阈值违反。如果已经创建并激活一个 THRESHOLDVIOLATIONS 事件监控器,那么只要一发生阈值违反,就会在事件监控器表中插入一条记录,其中包含阈值名称、违反时间、采取的操作等信息。
另外,当发生阈值违反时,可采取以下操作之一。(注意,部分操作只适用于某些阈值类型。)
- Stop 阻止活动或连接继续运行。这将向应用程序发送一个负 sqlcode,表明该阈值被超过。
- Continue 允许活动或连接继续运行。如果与 THRESHOLDVIOLATION 事件监控器联用,那么这个操作对于弄清您的阈值应该设置什么值是很有用,这样可以避免对您的工作造成负面影响。当阈值被违反时,活动或连接可以继续运行,但收集的信息可以稍后加以分析,帮助您洞察阈值的值是否应该被调整。
- Force application 仅适用于 UOWTOTALTIME 阈值。当这个操作被指定且阈值被超过时,应用程序将被强制退出系统。
- Remap 仅适用于两个 “服务类内” 阈值(CPUTIMEINSC 和 SQLROWSREADINSC)。这个操作将导致活动被重新映射到同一个服务超类中的另一个服务子类。如果当前正在执行的活动消耗太多 CPU 或读取太多行,您想降低其优先性,那么这个操作将很有帮助。
- Collect activity data 允许您收集引发阈值违反的活动的其他相关信息。如果创建并启用 ACTIVITY 事件监控器,则会收集语句文本、编译环境以及输入数据值。
CONCURRENTDBCOORDACTIVITIES 和 TOTALSCPARTITIONCONNECTIONS 这两个 DB2 WLM 阈值允许将过量活动或连接放置到一个队列 中。系统不是停止活动或连接从而对工作负载造成负面影响,而是将它放置到一个队列中等待运行。对于终端用户,活动或连接看起来似乎正在运行。因此,队列阈值经常被使用,尤其是 CONCURRENTDBCOORDACTIVIES 阈值。
尽管工作负载允许您基于提交工作的 “人”(通过连接属性确定)标识并区别对待工作,但工作类集和工作动作集允许您基于工作类型标识并区别对待工作。
工作类 基于工作的属性来标识不同工作类型。工作类集 由一个或多个工作类组成。可以标识的公认工作类型包括 READ、WRITE、DML(READ 和 WRITE 的结合)、CALL、DDL、LOAD 和 ALL。另外,工作可以通过以下属性进一步隔离:
- 预计成本(单位为 timeron):适用于类型为 READ、WRITE、DML 和 ALL 的工作类。
- 基数性(预计返回的行的范围):适用于类型为 READ、WRITE、DML 和 ALL 的工作类。
- 架构名称:适用于类型为 CALL 和 ALL 的工作类。
使用工作类和工作类集标识工作后,可以使用工作动作和工作动作集来规定在该工作上执行一个特定操作将出现什么后果。工作动作 表示可应用到工作类中的工作的动作。工作动作集 是一个或多个工作动作的组合,适用于一个特定服务超类、工作负载或整个数据库中的活动。如果您为一个数据库或工作负载定义一个工作动作集,那么有几种操作类型适用于一个工作类中的活动,比如活动阈值、阻止执行(阻止活动启动)、收集活动数据和计数活动。如果您为一个服务超类定义工作动作集,那么可以应用到活动的操作类型包括将活动映射到一个服务子类、阻止执行、 收集活动数据或汇总数据、以及计数活动。
图 3 展示了一个常见示例,该示例展示通常如何使用工作类集和工作动作集。在本例中,映射到服务超类 "MAIN_SC" 的所有 DML 活动将通过服务超类工作动作集 (SC_WAS) (属于 MARKETINGAPP 工作负载的活动除外)。由于 MARKETINGAPP 将其工作直接映射到 MARKETING_SSC 服务子类,它不受 SC_WAS 工作动作集影响,而是有效地绕过它。但是,来自任何 “开发应用程序” 的所有小型 DML 活动将通过工作动作集映射到 SMALLQUERY_SSC 子类。类似地,所有中型和大型 DML 活动将分别映射到 MEDQUERY_SSC 子类和 LARGEQUERY_SSC 子类。由于本例使用 SC_WAS 来只映射 DML 活动,来自 “开发应用程序” 的任何其他活动类型都将在默认服务子类中运行。
当您将并发阈值(例如 CONCURRENTDBCOORDACTIVITIES)应用到包含较大 DML 活动的服务类时,就会看到 图 3 中描述的设置的真正威力。这样,您就能控制同时运行的大中型查询的数量,对过量的查询进行排队,将更多系统资源留给较小的查询。
图 3. 工作动作集映射示例
DB2 WLM 提供一种可选性,支持紧密集成 DB2 服务类和 AIX 或 Linux(内核 2.6.26 或更高)所提供的一些工作负载管理特性。通过在创建或更改 DB2 服务类时指定 OUTBOUND CORRELATOR 标记,每个 DB2 服务类都可以与一个对应的 OS 服务类关联。使用该标记,DB2 会将 DB2 服务类中工作的所有代理(线程)动态关联至相对等的 OS 服务类中。这可充许您利用操作系统所提供的 CPU 资源控制和工作负载管理统计数据来帮助补充 DB2 WLM 提供的相应功能。
监控是工作负载管理的一个关键阶段。在 DB2 WLM 中,监控功能允许进行识别系统健康状况变化、向下钻取问题根源以及调优系统以获得最优效率等操作。有两种监控信息类型:实时监控信息(关于系统中当前运行的工作)和历史监控信息(关于以前运行的工作)。应该注意的是,下面描述的实时监控和历史监控都可以通过默认 WLM 配置在 DB2 基础产品中启用。但是,如果没有 WLM 许可,您不能基于用户定义的 WLM 对象(比如服务类、工作负载等)识别要监控的工作。
使用以 WLM_ 或 MON_ 开始的表功能,可以访问系统上执行的工作的实时信息。您可以提供指标来帮助您确定使用模式和资源分配,识别问题区域,以及显示 DB2 数据库服务器的总体健康状况。某些表功能提供的数据还可以用作其他第三方工具的输入,或与其他脚本结合用于分析。
下面是一些表功能示例,它们展示运行在系统上的工作、DB2 WLM 对象汇总的数据、或者针对不同对象的统计信息:
- WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES_V97 返回分配给一个服务类的多个数据库分区中的工作负载发生的列表。
- WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES_V97 返回分配给一个服务类的多个数据库分区中的工作负载发生的列表。
- MON_GET_WORKLOAD 返回一个或多个工作负载的指标。
- MON_GET_SERVICE_SUBCLASS 返回一个或多个服务子类的指标。
- WLM_GET_SERVICE_SUPERCLASS_STATS 返回一个或多个服务超类的基本统计数据。
历史监控对于查看系统上已经发生的事情很有用。事件监控器是用来收集将来可能有用或可用于历史分析的信息。事件监控器并不导致事件生成,而是事件的被动接收者。尽管有许多不同的事件监控器,但只有三种 WLM 事件监控器:
- 活动事件监控器 采集服务类、工作负载、工作类或活动中已经违反一个阈值的各个活动的相关详细信息。可以配置要采集的数据量。可以收集诸如 WLM 身份信息、基本时间统计数据、语句文本编译环境和数据值等信息。
- 阈值违反事件监控器 用于采集引发阈值违反的活动或连接的相关信息。它会收集诸如违反的阈值、违反时间以及已采取的操作的信息。
- 统计数据事件监控器 用于采集汇总活动信息,比如完成的活动的数量和平均执行时间。汇总数据包括几个活动度量值(比如平均和标准偏移)的柱状图。例如,柱状图显示在一个给定时间短内,有多少活动在 1 秒或更低的时间内完成,有多少活动在 5 秒内完成,以及有多少活动的完成时间超过 5 秒。
DB2 WLM 还提供许多其他的功能。
- 提供一些存储过程,可用于取消活动,采集详细活动信息,重置 DB2 WLM 对象上的统计数据,以及设置数据服务器上的客户端信息。
- 一对样例 Perl 脚本,(假设您已经收集了一些活动信息)它将生成关于哪些表、索引和列还未或已被访问的历史信息。
- 一个 Perl 样例脚本,用于帮助从过时的 DB2 Query Patroller 迁移到 DB2 WLM。
DB2 AESE 是一个经济实惠的单个软件包的综合数据库解决方案。工作负载管理是它提供的众多功能和益处之一。该功能可正确监控 DB2 环境中的工作,帮助确保对关键资源进行分配,从而实现业务目标。要深入了解 DB2 AESE 及其提供的功能,请参见下面的参考资料。
学习
-
阅读 深入了解 IBM DB2 Advanced Enterprise Server Edition,该部分主要关注性能管理和存储优化。
-
阅读 深入了解 DB2 Advanced Enterprise Server Edition,第 2 部分:Q 复制与联邦,该部分主要关注 Q 复制和联邦。
-
DB2 9.7 文档 提供关于 IBM DB2 AESE 的特性和功能的技术细节。
-
阅读 WLM Hands On Tutorial 文档,了解更多信息。
-
阅读这篇 IBM 红皮书,详细了解关于 WLM for Linux, UNIX and Windows 的技术信息。
-
参阅 SAP on DB2 FOR LUW,了解如何在 SAP 环境中利用 WLM。
- 了解 Smart Data Administration 电子工具包 中的 DB2 WLM 柱状图。
-
在 针对 Oracle 专业人员的 IBM DB2 网络广播系列 中探索 DB2 for Linux, UNIX, and Windows 的关键特性。
- 参见 针对数据库专业人员的 IBM DB2 电子工具包、针对 Oracle 专业人员的 IBM DB2 研讨会 以及 针对 Oracle 专业人员的 DB2 基础知识:DB2 简介。
获得产品和技术
- 下载 试用版:IBM DB2 for Linux, UNIX, and Windows 免费试用版,在您的环境中试用它。
- 使用可直接从 developerWorks 下载的 IBM 产品评估试用版软件 构建您的下一个开发项目。
讨论
- 参与论坛讨论。
- 参与 developerWorks 博客,并加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。