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

取消一个数据库活动

在我们生产系统中,可能存在一些正在运行的大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

 

 

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

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

你可能感兴趣的:(DB2 V9.5工作负载管理(六))