DB2 V9.5工作负载管理(七)

工作类(WORK CLASS)和工作操作(WORK ACTION)

除了使用工作所在的数据库连接属性标识数据库活动以外,你还可以通过创建可选的工作类,通过基于工作的类型来标识数据库活动。这些类型属性可以是READ , WRITE , DML , DDL , LOAD , CALL ,ALL。工作类型属性具体的介绍如下:

Ø         READ

此属性对应的活动包括以下语句:

1.        所有的SELECT或者SELECT INTO语句,并且语句中不包含DELETE , INSERT , MERGE , UPDATE语句;

2.        所有的VALUES INTO语句;

3.        所有的XQuery语句。

Ø         WRITE

此属性对应的活动包括以下语句:

1.        所有的UPDATE语句;

2.        所有的DELETE语句;

3.        所有的INSERT语句;

4.        所有的MERGE语句;

5.        所有的包含DELETE, INSERT, UPDATE 的SELECT语句;

6.        所有的XQuery语句。

Ø         CALL

此属性对应的活动包括所有的 CALL 语句。如果想让工作类包含一个CALL语句 ,其工作类型可以是CALL或者ALL。

Ø         DML

所有在READ和WRITE中出现的语句都是DML语句。

Ø         DDL

此属性对应的活动包括以下语句:

1.        所有的ALTER语句;

2.        所有的CREATE语句;

3.        所有的COMMENT语句;

4.        所有的DECLARE GLOBAL TEMPORARY TABLE语句;

5.        所有的DROP语句;

6.        所有的FLUSH PACKAGE CACHE语句;

7.        所有的GRANT语句;

8.        所有的REFRESH TABLE语句;

9.        所有的RENAME语句;

10.    所有的REVOKE语句;

11.    所有的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中创建相应的工作动作集以及工作动作。发出CREATE WORK ACTION SET命令,创建工作动作集MYWORKACTION,并创建面向工作类smallQuery的工作动作smallQueryAction,面向工作类mediumQuery的工作动作mediumQueryAction,面向工作类largeQuery的工作动作largeQueryAction,具体如清单28所示:

 

- - 清单28 . 在窗口1中创建工作动作集

 

C:\> db2 - tvf crtWorkActionSet.sql

alter work action set MYWORKACTION

   alter smallQueryAction disable

   alter mediumQueryAction disable

   alter largeQueryAction disable

DB20000I  SQL命令成功完成。

 

drop work action set MYWORKACTION

DB20000I  SQL命令成功完成。

 

create work action set MYWORKACTION for database using work class set MYQUERY 

   ( work action smallQueryAction on work class smallQuery

       count activity,

    work action mediumQueryAction on work class mediumQuery

       collect activity data with details and values  ,

    work action largeQueryAction on work class largeQuery

       when concurrentdbcoordactivities > 1 and queuedactivities > 1 stop execution )

DB20000I  SQL命令成功完成。

 

命令成功完成。这样我们就创建了1个工作动作集和3个工作动作。

工作动作集MYWORKACTION对应的工作类集MYQUERY。工作动作smallQueryAction对应的工作类是smallQuery,且指定了count activity选项,含义是指定工作类smallQuery所对应的数据库活动,只要其任何一个在运行,则这个工作类的计数器就会累积增长。

工作动作mediumQueryAction对应的工作类是mediumQuery,且指定了collect activity data with details and values选项,collect activity data的含义是当工作类mediumQuery相关的每一个活动完成后,都将其数据发送给相关合适的事件监控器;with details的含义是当相关的活动完成后,还要把相关的语句和编译环境发送给相关的时间监控器;and values的含义是那些活动相关的输入数据值也发送给相关的事件监控器。

工作动作largeQueryAction对应的工作类是largeQuery,且指定了when concurrentdbcoordactivities > 1 and queuedactivities > 1 stop execution选项,含义是当并发的数据库协调器活动(database coordinator activities)大于1时,数据库管理器将对活动进行排队,对后来的数据库协调器活动(比如一个查询)放入排队队列。并且当排队的活动也大于1时,数据库活动将不允许执行。

下面我们继续在窗口2中用RHETTE用户连接示例数据库DB2TEST1,并执行两个查询,在窗口3中用RHETTE用户连接示例数据库DB2TEST1,也执行两个相同的查询,然后在窗口2中通过调用表函数WLM_GET_WORK_ACTION_SET_STATS,查看工作动作集的状态,具体如清单29所示:

 

- - 清单29_1 . 在窗口2中执行两个查询

 

C:\> db2 connect to db2test1 user rhette using passw0rd

 

   数据库连接信息

 

 数据库服务器         = DB2 / NT 9.5.0

 SQL 授权标识         = RHETTE

 本地数据库别名       = DB2TEST1

 

 

C:\> db2 select count ( * ) from project , project , project

 

1

- - - - - - - - - - - - - - - - - - - - - -

       8000

 

  1 条记录已选择。

 

 

C:\> db2 select count ( * ) from project , project , project , project , project

 

1

- - - - - - - - - - - - - - - - - - - - - -

    3200000

 

  1 条记录已选择。

 

- - 清单29_2 . 在窗口3中执行两个查询

 

C:\> db2 connect to db2test1 user rhette using passw0rd

 

   数据库连接信息

 

 数据库服务器         = DB2 / NT 9.5.0

 SQL 授权标识         = RHETTE

 本地数据库别名       = DB2TEST1

 

 

C:\> db2 select count ( * ) from project , project , project

 

1

- - - - - - - - - - - - - - - - - - - - - -

       8000

 

  1 条记录已选择。

 

 

C:\> db2 select count ( * ) from project , project , project , project , project , project

 

1

- - - - - - - - - - - - - - - - - - - - - -

   64000000

 

1 条记录已选择。

 

- - 清单29_3 . 在窗口2中查看工作动作集的状态

 

C:\> db2 select substr( work_action_set_name , 1 , 18 ) as work_action_set_name , substr ( char ( dbpartitionnum ) , 1 , 4 ) as part , substr ( work_class_name , 1 , 15 ) as work_class_name , last_reset , substr ( char ( act_total ) , 1 , 14 ) as total_wlo_acts from table ( WLM_GET_WORK_ACTION_SET_STATS ( cast ( null as varchar ( 128 ) ) , -2 ) ) as wasstats order by work_action_set_name , work_class_name , part

 

WORK_ACTION_SET_NAME        PART     WORK_CLASS_NAME LAST_RESET                TOTAL_WLO_ACTS

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

MYWORKACTION         0      *               2008-01-03-14.26.15.293798 0

 

MYWORKACTION         0    LARGEQUERY      2008-01-03-14.26.15.293791 1

 

MYWORKACTION         0    MEDIUMQUERY     2008-01-03-14.26.15.293754 1

 

MYWORKACTION         0    SMALLQUERY      2008-01-03-14.26.15.293717 3

 

 

  4 条记录已选择。

 

命令成功完成。

 

接下来我们看一下如果同时在三个窗口执行同样的大型SQL,会出现什么样的状况。首先在窗口1中执行一个大型查询SQL,同时在窗口2、3也同时执行同样的大型sql,在窗口3会报“SQL4712N  已超过阈值 =‘SQL080103142608430’。原因码 = ‘6’。  SQLSTATE = 5U026”错误。窗口1和窗口2最终将查询出结果集来。具体如清单30所示:

 

 - - 清单30_1 . 在窗口1中执行大型查询

 

C:\> db2 connect to db2test1 user rhette using passw0rd

 

   数据库连接信息

 

 数据库服务器         = DB2 / NT 9.5.0

 SQL 授权标识         = RHETTE

 本地数据库别名       = DB2TEST1

 

C:\> db2 select count ( * ) from project , project , project , project , project , project

 

1

- - - - - - - - - - - - - - - - - - - - - -

   64000000

 

1 条记录已选择。

 

- - 清单30_2 . 在窗口2中执行大型查询

 

C:\> db2 select count ( * ) from project , project , project , project , project , project

 

1

- - - - - - - - - - - - - - - - - - - - - -

   64000000

 

1 条记录已选择。

 

- - 清单30_3 . 在窗口3中执行大型查询

C:\> db2 select count ( * ) from project , project , project , project , project , project

SQL4712N  已超过阈值 " SQL080103142608430 "。原因码 = " 6 "。  SQLSTATE = 5U026

 

 

 

总结工作负载管理(WLM)        通过上面的讲述和具体的例子,我们可以发现使用DB2 V9.5工作负载管理(WLM)可以更好地控制系统资源,增加了可预测性和稳定性。我们可以定义一个混合的工作负载来满足复杂的场景需求。针对越来越复杂的数据库活动,我们可以预定义一组工作负载,并使用相应的服务类、阈值、工作类和工作动作来标识数据库活动并将它们隔离在自己的执行环境中,并给其分配达到我们设定目标所需要的适当资源。在环境或服务类中,您可以显式管理系统资源,以便较重要的资源可供较高优先级的工作使用,并可以控制或消除与较低优先级工作的争用情况。

       当我们的生产系统在高峰期时,增加的数据库活动会影响数据库的性能,通过使用工作负载管理(WLM),我们可以预先确定适当的资源分配、活动的优先级划分和排队选项来高效地处理工作,从而可以平滑高峰工作负载。在您定义这些指示后,数据服务器使用它们来分配资源和划分工作的优先级。例如,您可以使工作远离流氓查询的影响,这些查询使用过量的数据库资源,因此会对系统上运行的其他查询带来负面影响并可能会影响整个数据库。通过使用阈值,您可以使用许多不同特征(如执行时间或系统临时表空间使用量)来定义系统内可接受的查询行为,并定义对不按要求执行的任何查询要执行哪些操作。这些操作包括收集关于查询的详细信息的功能以及自动取消查询的功能。

       另外,通过使用DB2 V9.5新增的许多表函数,我们可以动态的监视数据库活动,可以让我们清楚哪个工作当前正在系统上运行、它在分区上的分布情况以及是否有特定的活动可能导致数据服务器上发生资源争用情况。

参考资料

学习


获得产品和技术


讨论

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9524210/viewspace-511960/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9524210/viewspace-511960/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值