1. 程式人生 > >DB2 應用的最常見狀態(轉)

DB2 應用的最常見狀態(轉)

指示 exec 配置 .com ase select times 如何 time

DB2 的應用最常見的狀態為UOW Executing, UOW Waiting, Connect Completed等,這裏做一個簡單的介紹。

UOW全稱是Unit Of Work, 可以認為是事務。

Connect Completed:           應用連庫成功了。
UOW Executing:               應用正在執行某個SQL語句
UOW Waiting:                 應用執行完一條SQL了,在等著執行同一事務中下一條SQL。 或者執行完了一個事務,在等著執行下一個事務。
Commit Active:               在做commit操作
Lock Wait:                   在等其他應用hold住的鎖
Rollback Active:             在做rollback操作
Pending Remote Quest:        DPF環境下才有,在等其他節點的響應
Federated request pending:   聯邦環境才有,在等聯邦數據源的返回結果
下面的示例中,應用連接到數據庫,完成了兩個事務,並斷開與數據庫的連接,分別指示了各個時間的DB2應用的狀態
$ db2 connect to sample                                 <--Database Connect Pending

<-- Connect Completed

$ db2 +c "update t1 set id = 200 where id = 100"        <--Uow Executing

<--Uow Waiting

$ db2 +c "insert into t1 values(300)"                   <--Uow Executing

<--Uow Waiting $ db2 +c "select * from t1 where id = 300" <--Uow Executing <--Uow Waiting $ db2 commit <--Commit Active <--Uow Waiting $ db2 +c "insert into t2 values(200)" <--Uow Executing <--Uow Waiting $ db2 commit
<--Commit Active <--Uow Waiting $ db2 terminate <--Database Disconnect Pending

補充解釋1:

如果應用狀態是UOW Waiting,如何判斷它是“等著執行同一事務中下一條SQL”,還是“執行完了一個事務,在等著執行下一個事務”?

在db2 +c "select * from t1 where id = 300" 命令完成之後,抓取應用的snapshot,可以看到UOW stop timestamp為空,說明這個事務目前沒有結束,在等著執行下一條SQL.

Application Snapshot Application handle
= 196 Application status = UOW Waiting UOW start timestamp = 2017-03-07 12:57:32.931235 UOW stop timestamp = UOW completion status =

在第一條commit命令之後,再查看snapshot,會發現UOW stop timestamp不為空了,說明上一個UOW完成,正等待執行下一個事務

UOW start timestamp                        = 2017-03-07 12:57:32.931235
UOW stop timestamp                         = 2017-03-07 13:24:47.092684
UOW completion status                      = Committed - Commit Statement

補充解釋2:

有時應用的狀態是Commit Active,Commit Active是指應用正在做提交操作,當db2loggw把日誌記錄寫到磁盤上之後,這個狀態就會消失。

如果一個應用保持CommitActive狀態太久,比如好幾秒鐘,這說明有性能問題,原因要麽是db2loggw太忙,要麽是日誌所在磁盤的IO太繁忙。
對於前者,可以加大LOGBUFSZ以避免log buffer full(可以從MON_GET_DATABASE表函數的num_log_buffer_full列查看log buffer full的次數) 對於後者,可以通過
iostat -DT 1命令查看avgserv列,如果超過3 ms,這說明需要檢查文件系統的布局和存儲的配置了。最佳的實踐是將容器磁盤和存放日誌的磁盤物理上分開。

補充解釋3:

事務占用日誌情況

可以通過db2pd -db <dbname> -transactions 查看每個事務正在使用的日誌的情況。

查看每個應用使用的日誌大小 db2
"select application_handle,UOW_LOG_SPACE_USED,UOW_START_TIME FROM TABLE(MON_GET_UNIT_OF_WORK(NULL,-1)) order by UOW_LOG_SPACE_USED" 查看數據庫整體日誌的作用率:
https:
//www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0060791.html

重點關註的參數有:
ApplHandl
The application handle of the transaction.
SpaceReserved
The amount of log space that is reserved for the transaction.
LogSpace
The total log space that is required for the transaction, including the used space and the reserved space for compensation log records.

DB2 應用的最常見狀態(轉)