DB2 V9.5工作负载管理之工作类和工作操作

在 DB2 V9.5 中,新引入的工作负载管理功能( WLM )可以帮助您标识、管理和监视数据服务器的工作负载。本文将重点介绍 DB2 V9.5 工作负载管理( WLM )中的工作类( WORK CLASS )和工作操作( WORK ACTION )的相关概念,并结合实际的例子帮助大家理解和提高。
取消一个数据库活动 5 P, ?3 ?4 q; o- ~' Z  E  e

  在我们生产系统中,可能存在一些正在运行的大 SQL,这些活动消耗了太多的资源。如果我们想停止这些正在执行的活动,可以调用 WLM_CANCEL_ACTIVITY() 存储过程,如果想捕获一个活动的详细信息可以调用 WLM_CAPTURE_ACTIVITY_IN_PROGRESS() 存储过程,如果想收集和重置一个工作负载对象的统计信息可以调用 WLM_COLLECT_STATS()。这些存储过程的具体信息如下: 3 N. k/ @( d% U
/ }, h0 g5 E! F" s
  WLM_CANCEL_ACTIVITY ( application_handle , uow_id , activity_id ) . ' @8 a9 `5 ~* J+ |6 g
" h% L/ |3 ^8 @7 C
  可以使用这个存储过程来取消一个正在运行或者正在排队的活动。对某个特定的活动来说,我们可以使用应用程序句柄、工作单元标识和活动标识来唯一标识。使用这个存储过程,我们可以取消任何类型的活动。当这个存储过程执行后,被取消的特定活动将收到 SQL4725N 的错误信息。 : l. P' ?/ u8 x4 J
9 q6 L, n; I: e3 j9 r) D
  WLM_CAPTURE_ACTIVITY_IN_PROGRESS ( application_handle , uow_id , activity_id ) .
L: Z$ X0 h+ _2 A* f0 d$ y
  我们可以使用这个存储过程捕获特定活动的详细信息,并发送给活动事件监控器。这个存储过程会立即发送信息,而不是等待该活动完成再发送。
  WLM_COLLECT_STATS ( ) . # i0 r, h( G! L4 I; E8 ^$ x3 c: d" [" T


  使用这个存储过程可以用来收集和重置工作负载对象统计信息。所有跟踪收集的服务类、工作负载、阈值队列和工作动作集统计信息,都会发送给活动统计信息事件监控器(如果存在)并重置。如果没有活动统计信息事件监控器,那么统计信息将只重置,而不收集。 & i4 [, [6 V9 j) K! o) E0 [

  以上存储过程调用中需要的应用程序句柄( application_handle )、工作单元标识( uow_id )、活动标识( activity_id ),可以通过调用表函数 WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES 来获得。 8 O1 r4 Z9 m# ~9 m1 i8 W
5 z7 P( p& ?1 h2 J) U3 d
  我们继续在窗口 1 用 ADMINISTRATOR 用户连接示例数据库 DB2TEST1,在窗口 2 用 RHETTE 用户连接示例数据库 DB2TEST1,并在窗口 2 中执行一个大的查询,具体如清单 23 所示:    * J; S3 u: ]2 p8 H
7 D' Q0 e$ k; S5 C; Y8 T
  清单23 . 在窗口 2 中执行一个大的查询 7 C/ K- t4 T/ @% K  P5 t3 B
( C. l: R$ y8 E) z) d
  
U; u5 A5 k$ a% V
  C:> db2 connect to db2test1 user rhette using passw0rd . y' m6 i) I, F- ~5 ?5 J5 B) N3 n

  数据库连接信息   c& ~' _$ t9 T' ]) O+ f! V1 H
) [) m( G7 {5 M2 K4 a4 t& l( o# z
  数据库服务器 = DB2 / NT 9.5.0 8 D( T& }( D7 X4 t
, o, k, u% T: Z; v
  SQL 授权标识 = DB2ADMIN & c5 j4 E+ g! |; z' B6 T  o

  本地数据库别名 = DB2TEST1
l# _, @
  C:> db2 select count ( * ) from rhette.project , rhette.project , rhette.projec , T6 ~% Q. a3 B8 Q0 v

  t , rhette.project , rhette.project , rhette.project ) U8 Y3 i  p- K: E0 I% ?
  R) k7 @& N5 f' |9 u5 j+ _. @
   # l4 n* l' m- S# B' e6 e/ [

  在窗口 2 中的大型查询完成之前,在窗口 1 中调用表函数 WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES,来获得窗口 2 中正在进行的大型查询的应用程序句柄( application_handle )、工作单元标识( uow_id )、活动标识( activity_id )信息,在获得这些信息后,如果还想查看更详细的信息,可以根据应用程序句柄通过 LIST APPLICATIONS SHOW DETAIL 来查看。具体如清单 24 所示: $ g- r7 j9 @4 c1 m9 {+ Q& G
  清单 24 . 在窗口 1 中调用表函数 WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES
G) I/ T- T+ l; K
   , h# O. T$ s% r. F: s
( v" x& r! f; w* _4 w! x: M; z
  C:> db2 - tvf get_wkld_activities.txt
  p  # M) w
  SELECT T.APPLICATION_HANDLE , T.UOW_ID , T.ACTIVITY_ID , T.ACTIVITY_TYPE ,
  T.ACTIVITY_TYPE , T.ACTIVITY_STATE , T.LOCAL_START_TIME FROM / ]7 w0 c6 ], J; B


  TABLE( WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES ( CAST ( NULL AS  3 g  I) x' Z6 U, |( 7 [1 e
" M  t0 L8 [7 y
  ORDER BY T.LOCAL_START_TIME
  APPLICATION + v. }5 w0 R7 ?0 q  g
. D6 h6 C* i2 m) s' f
  _HANDLE UOW_ID ACTIVITY_ID ACTIVITY_TYPE ACTIVITY_STATE 3 u. k) o/ T! K( Q
$ P. ?+ |0 L6 A) ~
  LOCAL_START_TIME " x% W* A1 v5 % e" ~
7 l) ], H0 N+ `* p# o  F3 N( x
  80 7 1 READ_DML EXECUTING ! R; _& o7 $ ~3 b
2 ]( b" H4 d* Z
  2008-01-02-17.01.25.306889
  81 10 1 READ_DML EXECUTING
  2008-01-02-17.01.32.253342 / v: Y! U/ P& Q2 l: t- B* S6 d4 ~2 Z+ N
  2 条记录已选择。
4 R5 _. R3 G, q
  接下来我们来看一下如何取消窗口 2 中正在进行的大型查询,在窗口 1 中调用 WLM_CANCEL_ACTIVITY 存储过程,输入参数使用在清单 24 中获得的应用程序句柄( application_handle )、工作单元标识( uow_id )、活动标识( activity_id ),具体如清单 25 所示:
参与5

4同行回答

paulxiepaulxie数据库管理员CMBC
Not Bad!显示全部
Not Bad!收起
银行 · 2012-06-16
浏览858
study123study123系统架构师ERICSSON
很有参考价值谢谢分享!收藏了显示全部
很有参考价值
谢谢分享!收藏了收起
系统集成 · 2011-05-09
浏览826
小大小大销售da
清单 31. 在窗口 2 中查看工作动作集的状态    . h+ S8 z9 ^. H  v" j0 N# U7 B/ v, P/ B1 R, J6 m& T& S* [  C:\> db2 select substr( work_action_set_name , 1 , 18 ) as work_action_set_name , : J8 ?" ?6 c8 r2 w9 ?& n1 p  substr ( char ( dbpa...显示全部
清单 31. 在窗口 2 中查看工作动作集的状态    . h+ S8 z9 ^. H  v" j0 N# U7 B/ v
, P/ B1 R, J6 m& T& S* [
  C:\> db2 select substr( work_action_set_name , 1 , 18 ) as work_action_set_name ,
: J8 ?" ?6 c8 r2 w9 ?& n1 p
  substr ( char ( dbpartitionnum ) , 1 , 4 ) as part , 8 R' \/ n: T0 {+ ?- P2 d& l
& J7 M/ T, l$ ?' p
  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 ) ) 3 B3 `1 X4 j; V3 T' l2 w0 c

  as wasstats order by work_action_set_name , work_class_name , part . c' j' P2 q* o, ]  o7 J' L+ i4 n; a
5 r8 G; `) ]8 m: q  b# i0 r
  WORK_ACTION_SET_NAME PART WORK_CLASS_NAME LAST_RESET TOTAL_WLO_ACTS , L* V2 g1 b  U3 q+ ?-  w: H; Y" \! v4 E
  MYWORKACTION 0 * 2008-01-03-14.26.15.293798 0   t+ x* u2 n" w, c5 v2 w! C
: n. _$ u2 O& I0 m" Y$ `
  MYWORKACTION 0 LARGEQUERY 2008-01-03-14.26.15.293791 1
/ _) v' Y" M& \- v- X/ Y. z
  MYWORKACTION 0 MEDIUMQUERY 2008-01-03-14.26.15.293754 1 1 ^! g- d5 r; q. x' Z3 K  j  @
! o8 I2 N% v  D0 B: L3 `1 ^
  MYWORKACTION 0 SMALLQUERY 2008-01-03-14.26.15.293717 3 $ F9 h5 ]2 c  h2 f9 P
0 l' e0 @8 V% \9 m% K* T
   8 |- R) d7 i2 x# O5 R% m3 s
' M! l' o" I* E0 S5 \0 Y
  4 条记录已选择。
D& D) R1 c9 o2 y& m- s
  命令成功完成。 8 i0 k; S+ v: D. A

  接下来我们看一下如果同时在三个窗口执行同样的大型 SQL,会出现什么样的状况。首先在窗口 1 中执行一个大型查询 SQL,同时在窗口 2、3 也同时执行同样的大型 sql,在窗口 3 会报“ SQL4712N 已超过阈值 =‘SQL080103142608430’。原因码 = ‘6’。 SQLSTATE = 5U026”错误。窗口 1 和窗口 2 最终将查询出结果集来。具体如清单 30 所示: , z4 v8 K2 K) [$ ]2 J5 t0 B- {( A& E6 ~
. s! d- a0 ~# s
     h, J( O2 L% o

  清单 32. 在窗口 1 中执行大型查询 4 b: y6 S/ ^$ f- W& ~( A

  C:\> db2 connect to db2test1 user rhette using passw0rd 0 {; i$ _' U9 |4 y

  数据库连接信息
! N  [8 N+ L, f2 c% c! \
  数据库服务器 = DB2 / NT 9.5.0 ! T2 `7 P/ C7 R8 _# L

  SQL 授权标识 = RHETTE
Y2 d1 R  k8 o: K1 R
  本地数据库别名 = DB2TEST1 4 ?) n0 s$ w5 d/ G
5 Z* w0 t5 B1 {$ y/ }
  C:\> db2 select count ( * ) from project , project , project , project , project , project ; `# H8 B8 Y& J# m
G
   64000000
{4 E4 G2 w; Y2 _+ K' H
  1 条记录已选择。
  清单 33. 在窗口 2 中执行大型查询

  C:\> db2 select count ( * ) from project , project , project , project , project , project . m+ ]1 A6 q' ?, N; k8 A# I& O
L/ U! g' ?$ j  p
6 G" ^7 t& o5 L+ r4 c5 s
_, l8 f4 [' D" r: P
  64000000
  1 条记录已选择。 3 w% g7 |  ^2 }' p. z5 a, n' V4 ]
" M* t% s" \( X4 s' m% W% i2 D3 c
  清单 34. 在窗口 3 中执行大型查询 ( p# A7 @" M; |$ D0 W
- o2 n3 [8 G  I2 B$ A
   $ d1 H1 S& c0 k! k) g9 y6 v% ?5 R
+ s7 f- h7 O8 H. \3 j- ^3 k
  C:\> db2 select count ( * ) from project , project , project , project , project ,
Q- u; A8 M
  project 3 A, ]; V7 {; {+ C- {

  SQL4712N 已超过阈值 " SQL080103142608430 "。原因码 = " 6 "。 SQLSTATE = 5U026
|! B9 X" `. H1 |2 q+ s
  总结工作负载管理( WLM )
  通过上面的讲述和具体的例子,我们可以发现使用 DB2 V9.5 工作负载管理( WLM )可以更好地控制系统资源,增加了可预测性和稳定性。我们可以定义一个混合的工作负载来满足复杂的场景需求。针对越来越复杂的数据库活动,我们可以预定义一组工作负载,并使用相应的服务类、阈值、工作类和工作动作来标识数据库活动并将它们隔离在自己的执行环境中,并给其分配达到我们设定目标所需要的适当资源。在环境或服务类中,您可以显式管理系统资源,以便较重要的资源可供较高优先级的工作使用,并可以控制或消除与较低优先级工作的争用情况。 7 J4 U0 r% h3 v+ @$ i% N1 p$ F
5 {6 o/ m6 Y8 I: b
  当我们的生产系统在高峰期时,增加的数据库活动会影响数据库的性能,通过使用工作负载管理( WLM ),我们可以预先确定适当的资源分配、活动的优先级划分和排队选项来高效地处理工作,从而可以平滑高峰工作负载。在您定义这些指示后,数据服务器使用它们来分配资源和划分工作的优先级。例如,您可以使工作远离流氓查询的影响,这些查询使用过量的数据库资源,因此会对系统上运行的其他查询带来负面影响并可能会影响整个数据库。通过使用阈值,您可以使用许多不同特征(如执行时间或系统临时表空间使用量)来定义系统内可接受的查询行为,并定义对不按要求执行的任何查询要执行哪些操作。这些操作包括收集关于查询的详细信息的功能以及自动取消查询的功能。 $ {; e. q) f( ]: o

  另外,通过使用 DB2 V9.5 新增的许多表函数,我们可以动态的监视数据库活动,可以让我们清楚哪个工作当前正在系统上运行、它在分区上的分布情况以及是否有特定的活动可能导致数据服务器上发生资源争用情况。收起
机械装备 · 2011-05-09
浏览853
小大小大销售da
下面我们继续在窗口 1 中创建相应的工作动作集以及工作动作。发出 CREATE WORK ACTION SET 命令,创建工作动作集 MYWORKACTION,并创建面向工作类 smallQuery 的工作动作 smallQueryAction ,面向工作类 mediumQuery 的工作动作 mediumQueryAction,面向工作类 largeQuery 的工...显示全部
下面我们继续在窗口 1 中创建相应的工作动作集以及工作动作。发出 CREATE WORK ACTION SET 命令,创建工作动作集 MYWORKACTION,并创建面向工作类 smallQuery 的工作动作 smallQueryAction ,面向工作类 mediumQuery 的工作动作 mediumQueryAction,面向工作类 largeQuery 的工作动作 largeQueryAction,具体如清单 28 所示: : B8 R! Y6 M5 Q
( a$ a  清单 28 . 在窗口 1 中创建工作动作集 6 K6 z- G  v, k. M+ M; R, G. N' @
^2 Y
  C:\> DB2 - tvf crtWorkActionSet.sql 3 S0 k  f8 ~: G4 t
8 G1 t) w7 U; }  e! c  }' s
  alter work action set MYWORKACTION - }' h' {$ H) }& P- f5 ?4 C
0 ?! ~- O  l# W. X
  alter smallQueryAction disable # L  ?! @, H6 c6 q9 s

  alter mediumQueryAction disable
  alter largeQueryAction disable 0 p. g) U% x% n
8 ^9 S" c9 S' c. L0 v! O: X& |
  DB20000I SQL命令成功完成。

  drop work action set MYWORKACTION
 DB20000I SQL命令成功完成。
3 L# R% Q3 h! l* s+ ?4 z7 a1 ~
  create work action set MYWORKACTION for database using work class set MYQUERY
  ( work action smallQueryAction on work class smallQuery
  count activity, $ S8 E! V8 I2 \/ W8 d7 G/ \" \

 work action mediumQueryAction on work class mediumQuery , L3 t+ J& n& l) f; f$ g

  collect activity data with details and values , 3 T5 u; Q3 s  r5 }3 Q; L
5 o7 G! k6 u% }: v/ l
  work action largeQueryAction on work class largeQuery
  when concurrentdbcoordactivities > 1 and queuedactivities > 1 stop execution )
{$ R0 C) i: G# o1 k! d
  DB20000I SQL命令成功完成。 0 O* q* q# a$ x# |3 \. j. e$ i
. J( `* S1 ^4 Y0 F  H
  命令成功完成。这样我们就创建了 1 个工作动作集和 3 个工作动作。 4 Z$ |7 r" j/ i6 ~0 j: J2 d& C

  工作动作集 MYWORKACTION 对应的工作类集 MYQUERY。工作动作 smallQueryAction 对应的工作类是 smallQuery,且指定了 count activity 选项,含义是指定工作类 smallQuery 所对应的数据库活动,只要其任何一个在运行,则这个工作类的计数器就会累积增长。 , v2 ^* c& _1 r& S* j; P% |
. \$ \% ]4 w" i% [: T: C* \
  工作动作 mediumQueryAction 对应的工作类是 mediumQuery,且指定了 collect activity data with details and values 选项,collect activity data 的含义是当工作类 mediumQuery 相关的每一个活动完成后,都将其数据发送给相关合适的事件监控器;with details 的含义是当相关的活动完成后,还要把相关的语句和编译环境发送给相关的时间监控器;and values 的含义是那些活动相关的输入数据值也发送给相关的事件监控器。
Z; h$ ~$ m
  工作动作 largeQueryAction 对应的工作类是 largeQuery,且指定了 when concurrentdbcoordactivities > 1 and queuedactivities > 1 stop execution 选项,含义是当并发的数据库协调器活动( database coordinator activities )大于 1 时,数据库管理器将对活动进行排队,对后来的数据库协调器活动(比如一个查询)放入排队队列。并且当排队的活动也大于1时,数据库活动将不允许执行。
M# ?) d9 {
  下面我们继续在窗口 2 中用 RHETTE 用户连接示例数据库 DB2TEST1,并执行两个查询,在窗口 3 中用 RHETTE 用户连接示例数据库 DB2TEST1 ,也执行两个相同的查询,然后在窗口 2 中通过调用表函数 WLM_GET_WORK_ACTION_SET_STATS ,查看工作动作集的状态,具体如清单 29 所示:   " y9 T8 U( e) a/ ?- W
: f" k' k  z+ u& L! u3 a
  清单 29. 在窗口 2 中执行两个查询 : X6 [+ }, |7 i9 g( P3 o4 ?

  A% D3 d
  C:\> db2 connect to db2test1 user rhette using passw0rd - c& Y1 I' l( r
/ h- J$ `% W) @: `, q, u
  数据库连接信息
  数据库服务器 = DB2 / NT 9.5.0 * N3 _1 z: ]- n. g0 S( R

  SQL 授权标识 = RHETTE
 本地数据库别名 = DB2TEST1
' _( u/ G# }& @. G# g/ q- u
   ; N6 u8 D7 C# |) r
5 r' n8 V; }9 \! Q" e3 u2 E7 w1 o
  C:\> db2 select count ( * ) from project , project , project
  8000
  1 条记录已选择。
k! C6 y0 w5 G7 z# S9 }; `+ M! n. l: @
   3 Q8 g, ~- P- c9 X( H4 v8 R7 V
/ j) O" i/ J4 U( R. ~# ?: H5 c
  C:\> db2 select count ( * ) from project , project , project , project , project
K6 l# j8 Y
2 |$ N- }3 A7 r1 z% [! h- d
  3200000 ' R* D" `" |) f0 }3 ]+ H

  1 条记录已选择。
  清单 30. 在窗口 3 中执行两个查询
# L3 t! I
  C:\> db2 connect to db2test1 user rhette using passw0rd
M& R3 D/ _4 p9 _
  数据库连接信息 + T' p/ B7 f1 ?1 w* Q. G1 a/ ]
4 U4 B: ?" d, l1 O4 d0 f
  数据库服务器 = DB2 / NT 9.5.0
  SQL 授权标识 = RHETTE % _4 Q. ?1 J2 x2 b: u/ q
9 U# z; p) G/ V3 ^* C5 K
  本地数据库别名 = DB2TEST1 6 N, ~+ Y/ J" V; D) m
- k$ y# {& g8 L  a$ f) ^
y
  C:\> db2 select count ( * ) from project , project , project
M( e7 w! Y
  1 3 T, w) Y3 B! I
- R7 |; d3 G( [3 V' q& \7 t7 x
H' y0 Q
7 {- }: E7 m" C7 U
  8000 ( d# u2 E7 x7 ^. Q( o" _* `6 M9 E
) F4 c  _( L1 o; k* i$ h
  1 条记录已选择。 2 K$ ?* P" f4 \ ' D4 L1 ?  s9 Q2 I
  C:\> db2 select count ( * ) from project , project , project , project , project , project
- O( V* z" l  H0 z9 e
  64000000
  1 条记录已选择。 ' x& M  U. H, [: P$ P- ]0 D6 U收起
机械装备 · 2011-05-09
浏览855

提问者

小大
销售da
擅长领域: 数据库

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2011-05-09
  • 关注会员:1 人
  • 问题浏览:4928
  • 最近回答:2012-06-16
  • X社区推广