DB2 V9.5工作負載管理(六)

rheet1978發表於2008-12-15
取消一個資料庫活動

在我們生產系統中,可能存在一些正在執行的大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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章