取消一个数据库活动在我们生产系统中,可能存在一些正在运行的大 SQL,这些活动消耗了太多的资源。如果我们想停止这些正在执行的活动,可以调用 WLM_CANCEL_ACTIVITY() 存储过程,如果想捕获一个活动的详细信息可以调用 WLM_CAPTURE_ACTIVITY_IN_PROGRESS() 存储过程,如果想收集和重...
显示全部取消一个数据库活动
在我们生产系统中,可能存在一些正在运行的大 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 本地数据库别名 = DB2TEST1C:\> db2 select count ( * ) from rhette.project , rhette.project , rhette.project , 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.txtSELECT 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_TIMEAPPLICATION_HANDLE UOW_ID ACTIVITY_ID ACTIVITY_TYPE ACTIVITY_STATE LOCAL_START_TIME- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 80 7 1 READ_DML EXECUTING 2008-01-02-17.01.25.30688981 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.project , rhette.project , rhette.project , rhette.project1- - - - - - - - - - - - - - - - -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此属性对应的活动可以是以上属性中出现任意一个活动。
收起