【赛迪网-IT技术报道】在 DB2 V9.5 中,新引入的工作负载管理功能( WLM )可以帮助您标识、管理和监视数据服务器的工作负载。本文将重点介绍 DB2 V9.5 工作负载管理( WLM )中的工作类( WORK CLASS )和工作操作( WORK ACTION )的相关概念,并结合实际的例子帮助大家理解和提高。
取消一个数据库活动
在我们生产系统中,可能存在一些正在运行的大 SQL,这些活动消耗了太多的资源。如果我们想停止这些正在执行的活动,可以调用 WLM_CANCEL_ACTIVITY() 存储过程,如果想捕获一个活动的详细信息可以调用 WLM_CAPTURE_ACTIVITY_IN_PROGRESS() 存储过程,如果想收集和重置一个工作负载对象的统计信息可以调用 WLM_COLLECT_STATS()。这些存储过程的具体信息如下:
WLM_CANCEL_ACTIVITY ( application_handle , uow_id , activity_id ) .
可以使用这个存储过程来取消一个正在运行或者正在排队的活动。对某个特定的活动来说,我们可以使用应用程序句柄、工作单元标识和活动标识来唯一标识。使用这个存储过程,我们可以取消任何类型的活动。当这个存储过程执行后,被取消的特定活动将收到 SQL4725N 的错误信息。
WLM_CAPTURE_ACTIVITY_IN_PROGRESS ( application_handle , uow_id , activity_id ) .
我们可以使用这个存储过程捕获特定活动的详细信息,并发送给活动事件监控器。这个存储过程会立即发送信息,而不是等待该活动完成再发送。
WLM_COLLECT_STATS ( ) .
使用这个存储过程可以用来收集和重置工作负载对象统计信息。所有跟踪收集的服务类、工作负载、阈值队列和工作动作集统计信息,都会发送给活动统计信息事件监控器(如果存在)并重置。如果没有活动统计信息事件监控器,那么统计信息将只重置,而不收集。
以上存储过程调用中需要的应用程序句柄( application_handle )、工作单元标识( uow_id )、活动标识( activity_id ),可以通过调用表函数 WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES 来获得。
我们继续在窗口 1 用 ADMINISTRATOR 用户连接示例数据库 DB2TEST1,在窗口 2 用 RHETTE 用户连接示例数据库 DB2TEST1,并在窗口 2 中执行一个大的查询,具体如清单 23 所示:
清单23 . 在窗口 2 中执行一个大的查询
C:\> db2 connect to db2test1 user rhette using passw0rd
数据库连接信息
数据库服务器 = DB2 / NT 9.5.0
SQL 授权标识 = DB2ADMIN
本地数据库别名 = DB2TEST1
C:\> db2 select count ( * ) from rhette.project , rhette.project , rhette.projec
t , rhette.project , rhette.project , rhette.project
在窗口 2 中的大型查询完成之前,在窗口 1 中调用表函数 WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES,来获得窗口 2 中正在进行的大型查询的应用程序句柄( application_handle )、工作单元标识( uow_id )、活动标识( activity_id )信息,在获得这些信息后,如果还想查看更详细的信息,可以根据应用程序句柄通过 LIST APPLICATIONS SHOW DETAIL 来查看。具体如清单 24 所示:
清单 24 . 在窗口 1 中调用表函数 WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES
C:\> db2 - tvf get_wkld_activities.txt
SELECT T.APPLICATION_HANDLE , T.UOW_ID , T.ACTIVITY_ID , T.ACTIVITY_TYPE ,
T.ACTIVITY_TYPE , T.ACTIVITY_STATE , T.LOCAL_START_TIME FROM
TABLE( WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES ( CAST ( NULL AS BIGINT ) , -2 ) ) T
ORDER BY T.LOCAL_START_TIME
APPLICATION
_HANDLE UOW_ID ACTIVITY_ID ACTIVITY_TYPE ACTIVITY_STATE
LOCAL_START_TIME
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
80 7 1 READ_DML EXECUTING
2008-01-02-17.01.25.306889
81 10 1 READ_DML EXECUTING
2008-01-02-17.01.32.253342
2 条记录已选择。
接下来我们来看一下如何取消窗口 2 中正在进行的大型查询,在窗口 1 中调用 WLM_CANCEL_ACTIVITY 存储过程,输入参数使用在清单 24 中获得的应用程序句柄( application_handle )、工作单元标识( uow_id )、活动标识( activity_id ),具体如清单 25 所示:
清单25 . 在窗口 1 中调用 WLM_CANCEL_ACTIVITY 存储过程取消特定活动
C:\> db2 call WLM_CANCEL_ACTIVITY( 80 , 7 , 1 )
返回状态 = 0
此时窗口 2 中正在执行的大型查询会收到“ SQL4725N 已取消该活动。 SQLSTATE = 57014 ”的相关信息,具体如清单 26 所示:
清单 26 . 在窗口 2 中获得特定活动取消的相关信息
C:\> db2 select count ( * ) from rhette.project , rhette.project , rhette.projec
t , rhette.project , rhette.project , rhette.project
1
- - - - - - - - - - - - - - - - -
SQL4725N 已取消该活动。 SQLSTATE = 57014
工作类( WORK CLASS )和工作操作( WORK ACTION )
除了使用工作所在的数据库连接属性标识数据库活动以外,你还可以通过创建可选的工作类,通过基于工作的类型来标识数据库活动。这些类型属性可以是 READ , WRITE , DML , DDL , LOAD , CALL ,ALL。工作类型属性具体的介绍如下:
READ
此属性对应的活动包括以下语句:
所有的 SELECT 或者 SELECT INTO 语句,并且语句中不包含 DELETE , INSERT , MERGE , UPDATE 语句;
所有的 VALUES INTO 语句;
所有的 XQuery 语句。
WRITE
此属性对应的活动包括以下语句:
所有的 UPDATE 语句;
所有的 DELETE 语句;
所有的 INSERT 语句;
所有的 MERGE 语句;
所有的包含 DELETE, INSERT, UPDATE 的SELECT 语句;
所有的 XQuery 语句。
CALL
此属性对应的活动包括所有的 CALL 语句。如果想让工作类包含一个 CALL 语句 ,其工作类型可以是 CALL 或者 ALL。
DML
所有在 READ 和 WRITE 中出现的语句都是 DML 语句。
DDL
此属性对应的活动包括以下语句:
所有的 ALTER 语句;
所有的 CREATE 语句;
所有的 COMMENT 语句;
所有的 DECLARE GLOBAL TEMPORARY TABLE 语句;
所有的 DROP 语句;
所有的 FLUSH PACKAGE CACHE 语句;
所有的 GRANT 语句;
所有的 REFRESH TABLE 语句;
所有的 RENAME 语句;
所有的 REVOKE 语句;
所有的 SET INTEGRITY 语句;
LOAD
此属性对应的活动包括所有的 LOAD 操作。
ALL
此属性对应的活动可以是以上属性中出现任意一个活动。
工作操作( WORK ACTION )是一个用来控制某一种类型工作所对应数据库活动的方法。简单的说就是,当数据库活动满足已经定义好的工作类( WORK CLASS )所涉及的范围时,就会触发相应的工作操作( WORK ACTION )。
下面我们在窗口 1 中,发出 CREATE WORK CLASS SET 命令,创建工作类集 myquery,其下包含三个工作类,分别是针对小型查询的 smallquery,针对中型查询的 mediumquery 以及针对大型查询的 largequery,工作类型都是 DML,具体如清单 27 所示:
清单 27 . 在窗口 1 中创建工作类集
C:\> db2 connect to db2test1 user administrator using passw0rd
数据库连接信息
数据库服务器 = DB2 / NT 9.5.0
SQL 授权标识 = ADMINIST . . .
本地数据库别名 = DB2TEST1
C:\> db2 - tvf crtWorkClassSet.sql
drop work class set myquery
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0204N " MYQUERY " 是一个未定义的名称。 SQLSTATE = 42704
create work class set myquery (
work class smallQuery work type dml
for timeroncost from 1 to 1000 ,
work class mediumQuery work type dml
for timeroncost from 1000 to 100000 ,
work class largeQuery work type dml
for timeroncost from 100000 tounbounded )
DB20000I SQL命令成功完成。
命令成功完成,这样我们就创建了一个工作类集和三个工作类。工作类 smallQuery 包含的范围是:当一个特定的 DML 活动,其估计成本大于 1 timeron 且小于等于 1000 timerons。需要注意的是,成本是由 CPU 成本(以指令数计)和 I/O(以寻道数和页的转换数计)的组合得出的。成本的单位是 timeron。timeron 不直接等于任何实际的所用时间,只是给出粗略估计的资源(成本)。工作类 mediumQuery 包含的范围是:当一个特定的 DML 活动,其估计成本大于 1000 timeron 且小于等于 100000 timerons。工作类 largeQuery 包含的范围是:当一个特定的 DML 活动,其估计成本大于 100000 timeron ,没有上限。
1
2
下一页>>