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