DB2故障診斷工具

keeptrying發表於2012-12-11

一、db2cklog

使用db2cklog工具來檢查歸檔日誌檔案

檢查歸檔日誌檔案可確保需要前滾恢復時已知正常的日誌檔案可用,並且恢復操作不會因為日誌檔案存在問題而失敗。

db2cklog工具讀取單個日誌檔案或一定範圍的編號的日誌檔案並檢查檔案的內部有效性。如果歸檔日誌檔案未通過驗證並帶有錯誤訊息或返回了警報,那麼不能在前滾恢復期間使用該日誌檔案。未通過驗證的歸檔日誌檔案無法修復。

需要對歸檔日誌檔案具有讀許可權,以便db2cklog工具可讀取日誌檔案並執行檢查。只有已關閉的日誌檔案(如歸檔日誌檔案)才能通過驗證。對於仍處於活動狀態的日誌檔案執行此工具,此工具無法準確檢查該檔案,並且將受到一條警報,以便知道此檔案仍處於活動狀態。

使用db2cklog命令時不應指定完整日誌檔名,而應僅指定包含在日誌檔名中的數字標識。如,S0000001.LOG日誌檔案的數字標識為1,檢查該日誌檔案,應指定db2cklog 1。如果這些歸檔日誌檔案不在當前目錄中,要使用ARCHLOGPATH引數新增這些日誌檔案的相對或絕對路徑。

要檢查單個歸檔日誌檔案:如:

db2cklog 1 ARCHLOGPATH /home/amytang/tests.

要檢查一定範圍的歸檔日誌檔案:如:

db2cklog 0 to 5 ARCHILOGPATH /home/nrichers/tests

db2cklog通過驗證的任何檔案的返回碼為0,如果指定了一定範圍的編號歸檔日誌檔案,那麼db2cklog將按順序讀取每個檔案,對每個檔案執行檢查併發出返回碼。當遇到第一個錯誤時停止,即使指定了一定範圍的日誌檔案並且還有其他檔案未檢查也會停止。發現錯誤時返回的DBT訊息可提供有關歸檔日誌檔案未通過驗證的原因的更多訊息,但無法修正無效日誌檔案

 

二、db2dart

db2dart命令驗證資料庫及其物件的體系結構是否正確。還可以使用它來顯示資料庫控制檔案的內容,以便從其他情況下可能無法訪問的表中抽取資料。

使用不帶任何引數的db2dart命令檢視所有可能的選項。

預設情況下,db2dart實用程式將建立名為databaseName.RPT的報告檔案。對於單一分割槽資料庫分割槽環境,將在當前目錄中建立該檔案。對於多分割槽資料庫分割槽環境,將在診斷目錄的子目錄中建立該檔案。該子目錄稱為DART####,其中####是資料庫分割槽號。

使用db2dart必須確保沒有使用者連線資料庫db2dart實用程式通過直接從磁碟中讀取資料庫中的資料和後設資料來對其進行訪問。因此,決不能對仍具有活動連線的資料庫執行該工具。如果存在活動連線,那麼該工具將不知道緩衝池中的頁面或記憶體中的控制結構,可能會報告假的錯誤結果。同樣,如果對需要進行崩潰恢復或尚未完成前滾恢復的資料庫執行db2dart,由於磁碟上的資料性質不一致,可能會導致類似的不一致情況。

>>-db2dart--database-name--+---------------------+-------------&gt<

                           '-action--+---------+-'   

                                     '-options-'

1ACTIONS

1)、Inspection actions

/DB:預設選項,檢查整個資料庫。

/T:檢查一個或多個表。需要兩個輸入引數:table space ID/TSI)和table object ID(/OI)a list of table object IDstable name(/TN)

/TSF:檢查table space filescontainers

/TSC:檢查一個或多個表空間的table space constructs,但是不檢查表。需要一個輸入引數:table space ID(/TSI)a list of table space IDs

/TS:檢查一個或多個表空間和其中的表。需要一個輸入引數:table space ID(/TSI)a list of table space IDs

/ATSC:檢查所有表空間的constructs,但是不檢查表。

 

2)、Date formatting actions

/DD: Dumps formatted table date。需要五個輸入引數:table object ID(/OI)table name(/TN)table space ID(/TSI)page number to start with(/PS)number of pages(/NP)verbose choice(/V Y/N 其中:Y:VerboseN:No verbose)

/DI Dumps formatted index date。需要五個輸入引數:table object ID(/OI)table name(/TN)table space ID(/TSI)page number to start with(/PS) number of pages(/NP)verbose choice(/V Y/N)

      對於分割槽表上的非分割槽索引,/DI使用SYSCAT.INDEXESINDEX_OBJECTIDTBSPACEID作為前兩個輸入引數(/OI/TSI)。這種情況下不支援table name/TN)選項。

      對於分割槽表上的分割槽索引,/DI使用SYSCAT.DATAPTITIONSPARTITIONOBJECTIDTBSPACEID。這種情況同樣不支援table name/TN)選項。

/DMDumps formatted block map data。需要五個輸入引數:table object ID(/OI)table name(/TN)table space ID(/TSI)page number to start with(/PS)number of pages(/NP)verbose choice(/V Y/N)The data shows whether a block has been reclaimed for use by the table space after a reorganization to reclaim multidimensional clustering(MDC)table blocks that were empty.

/DP:以十六進位制形式Dumps pages

     對於DMS表空間,需要三個輸入引數:table space ID(/TSI)page number to start with(/PS)number of pages(/NP)

     對於SMS表空間,需要五個輸入引數:table space IDobject IDpage number to start withnumber of pagesobject type

/DTSFDumps formatted table space file information

/DDELDumps formatted table data in delimited ASCII format。需要四個輸入引數:table object ID(/OI)table name(/TN)table space ID(/TSI)page number to start with(/PS)number of pages(/NP)

       Dumpdelimited ASCII檔案使用資料庫內碼表進行編碼,db2dart命令不執行內碼表轉換。

       /DDEL引數只支援下面幾種列型別,如果表中包含其他型別的列,這些列將會跳過,不被包含在delimited ASCII檔案中:

       SMALLINTFLOATREALINTEGERTIMEDECIMALCHAR()VARCHAR()DATETIMESTAMPBIGINT

       如果CHARVARCHAR型別的列包含二進位制資料,或者使用FOR BIT DATA定義,/DDEL引數生成的DEL檔案中將包含二進位制資料。當使用LOADDEL檔案進行裝入時,要確保使用delprioritychar選項進行修改。當使用IMPORTDEL檔案進行匯入表時,確保指定delprioritychar codepage=xx是輸入資料集的內碼表)選項進行修改。

/DHWMDumps high water mark information。需要一個輸入引數:table space ID(/TSI).

/DXA:以十六進位制形式Dumps formatted XML column data。需要五個輸入引數:table object ID(/OI)table name(/TN)table space ID(/TSI)page number to start with(/PS)number of pages(/NP)verbose choice(/V Y/N)

/LHWM:降低高水位的建議。需要兩個輸入引數:table space ID(/TSI)number of pages(wanted high water mark)(/NP)/LHWM選項不支援系統編目表空間。

 

3)、Repair actions

/ETS:擴充套件表限制(only 4KB DMS表空間)。需要一個輸入引數:table space ID(/TSI)

/MI:標記索引無效。指定這一引數時資料庫必須offline。需要兩個輸入引數:table space ID(/TSI)index object ID(/OI)。對於分割槽索引,這些值可以從SYSCAT.INDEXPARTITIONSINPARTITIONOBJECTIDINDPARTITIONTBSPACEID獲得。

/RHWM:降低高水位through empty SMP extents。指定這一引數時資料庫必須offline。需要一個輸入引數:table space ID(/TSI)。不支援系統編目表空間。

 

4)、Change state actions

/CHST:改變資料庫狀態。指定這一引數時,資料庫必須offline。需要一個輸入引數:database backup pending state(/WHAT DBBP OFF/ON)

示例:

1、檢查T

[db2inst@localhost ~]$ db2dart sample /T /TSI 3 /TN T

       The requested DB2DART processing has completed successfully!

                        Complete DB2DART report found in:

/home/db2inst/sqllib/db2dump/DART0000/SAMPLE.RPT

2dump格式化的表空間檔案資訊

[db2inst@localhost ~]$ db2dart sample /DTSF

         The requested DB2DART processing has completed successfully!

                        Complete DB2DART report found in:

/home/db2inst/sqllib/db2dump/DART0000/SAMPLE.RPT

 

 

三、db2diag

db2diag工具用於對db2diag日誌檔案中的大量資訊進行過濾和格式化。以縮短查詢所需記錄的時間。

示例1按資料庫名稱過濾db2diag日誌檔案。

db2diag –g db=SAMPLE

 

示例2按程式標識過濾db2diag日誌檔案。

以下命令用來顯示程式標識(PID)為2200,並且在分割槽012、或3上執行的程式生成的所有嚴重錯誤訊息

db2diag –g level=Severe,pid=2200 –n 0,1,2,3

也可寫作:db2diag –l severe –pid 2200 –n 0,1,2,3

注意:-g選項指定區分大小寫的搜尋,所以此處“Server”寫作“server”會失敗。

 

示例3:格式化db2diag工具輸出

以下命令過濾201211之後發生,並且包含分割槽012上記錄的所有非嚴重錯誤和嚴重錯誤的所有記錄。輸出內容格式化為:時間戳記、分割槽號和級別出現在第一行,而PIDTID和例項名出現在第二行上,之後是錯誤訊息:

db2diag -time 2012-01-01 –node “0,1,2” –level “Severe,Error” |   db2diag –fmt “Time:%{ts}

Partition:%node Message Level:%{level}  \nPid:%{pid} Tid:%{tid}

Instance:%{instance} \nMessage:@{msg}\n”

 

示例4:過濾來自不同工具的訊息

僅檢視來自資料庫管理器中的特定工具(或所有工具)的訊息。受支援的工具包括:

l      ALL:返回來自所有工具的記錄。

l      MAIN:返回來自DB2常規診斷日誌的記錄,例如db2diag日誌檔案和管理通知日誌。

l      OPTSTATS:返回與優化器統計資訊有關的記錄。

要讀取來自MAIN工具的訊息:

db2diag -facility MAIN

要顯示來自OPTSTATS工具的訊息並過濾出級別為Severe的記錄:

db2diag -fac OPTSTATS -level Severe

要顯示來自所有可用工具的訊息並過濾出例項為harmistr級別為Error的記錄:

db2diag -fac all -g instance=harmistr,level=Error

要顯示OPTSTATS工具中級別為Error並且以特定格式輸出時間戳記和PID欄位的所有訊息:

db2diag -fac optstats -level Error -fmt “Time:%{ts} Pid:%{pid}”

 

示例5:根據時間戳記來合併檔案和對記錄進行排序

db2diag -merge db2diag.0.log db2diag.1.log -fmt %{ts} -level error

 

示例6:按時間戳記合併單臺主機中的三個資料庫分割槽中的檔案。

以下是要合併的三個db2diag日誌檔案的列表:

l      ~/sqllib/db2dump/NODE0000/db2diag.log

l      ~/sqllib/db2dump/NODE0001/db2diag.log

l      ~/sqllib/db2dump/NODE0002/db2diag.log

要根據時間戳記合併這三個診斷日誌檔案並對記錄進行排序:

db2diag -merge

 

示例7:合併多臺主機和多個資料庫分割槽中的診斷日誌檔案

bowerhorton兩臺主機中每個主機上有三個資料庫分割槽的診斷日誌檔案:

l      ~/sqllib/db2dump/HOST_bower/NODE0000/db2diag.log

l      ~/sqllib/db2dump/HOST_bower/NODE0001/db2diag.log

l      ~/sqllib/db2dump/HOST_bower/NODE0002/db2diag.log

l      ~/sqllib/db2dump/HOST_horton/NODE0003/db2diag.log

l      ~/sqllib/db2dump/HOST_horton/NODE0004/db2diag.log

l      ~/sqllib/db2dump/HOST_horton/NODE0005/db2diag.log

要獲得所有診斷日誌中所有記錄:

db2diag -global

要合併這些資料庫分割槽中的所有db2diag日誌檔案,並根據時間戳記設定輸出格式:

db2diag -global -merge -sdir /temp/keon -fmt %{ts}

其中/temp/keonbowerhorton這兩個主機共享的共享目錄,在處理期間用來儲存每個主機的臨時合併檔案。

 

示例8:僅過濾和合並最新的診斷日誌條目

過濾db2diag日誌檔案記錄以僅顯示特定數目的最新條目。顯示分割槽資料庫環境(共3個分割槽)中每個分割槽的5個最新格式化記錄並按時間戳記進行合併和格式化:

db2diag -lastrecords 5 -global -merge -sdir /home/vbmithun -fmt %{ts}

僅返回最新的10個記錄中具有嚴重訊息級別的記錄:

db2diag db2diag.log -lastrecords 10 -level Severe -fmt %{ts}

 

例項9:歸檔無例項客戶機上的db2diag日誌檔案

V9.7 FP4 開始,IBM® Data Server Driver Package IBM Data Server for ODBC and CLI 提供了 db2diag –archive(或 –A選項。此選項使您能夠歸檔無例項客戶機上的診斷日誌檔案。如:

db2diag -A

db2diag:Moving “/home/usr1/clidriver/db2dump/db2diag.log”

          to “/home/usr1/clidriver/db2dump/db2diag.log_2010-09-14-01.16.26”

如果指定除-archive-A之外的選項,將返回錯誤訊息。

 

 

四、db2greg

UNIXLinux平臺上,可以使用db2greg命令來檢視全域性登錄檔

DB2 V9.7及更高版本中,DB2全域性概要檔案登錄檔並非在文字檔案/default.env中。現在,使用全域性登錄檔檔案global.reg來註冊與當前DB2安裝版本相關的DB2全域性概要檔案設定。

全域性登錄檔只存在於UNIXLinux平臺上:

對於root安裝,全域性登錄檔檔案為/var/db2/global.reg

對於非root安裝,全域性登錄檔檔案為$HOME/sqllib/global.reg,其中$HOME是非root使用者的主目錄。

全域性登錄檔由以下三種不同記錄型別組成:

“服務”:服務記錄包含產品級別的資訊,如版本和安裝路徑;

“例項”:例項記錄包含例項級別的資訊,如例項名、例項路徑、版本和“引導時啟動”標誌;

“變數”:變數記錄包含變數級別的資訊,如變數名和變數值;

註釋。

可使用db2greg工具檢視全域性登錄檔。此工具位於sqllib/binbin下的install目錄中。可使用db2greg工具編輯全域性登錄檔。

示例:

1、檢視“服務”資訊:

[db2inst@localhost ~]$ db2greg -getservrec service=DB2

Retrieved record:

   Service     = |DB2|

   Version     = |9.7.0.7|

   InstallPath = |/opt/ibm/db2/V9.7|

   GCFModule   = |N/A|

   Comment     = |N/A|

   FixpackNum  = 7

   InstallerUID  = 0

   InterimFixLetter  = N/A

   Timestamp  = 1354816731

   SpecialInstallNumber  = 0

2、檢視“例項”資訊:

[db2inst@localhost ~]$ db2greg -getinstrec instancename=db2inst

Retrieved record:

   Service      = |DB2|

   Version      = |9.7.0.7|

   InstanceName = |db2inst|

   InstancePath = |/home/db2inst/sqllib|

   Usage        = |N/A|

   StartAtBoot  = 1

   Maintenance  = 0

   InstallPath  = |/opt/ibm/db2/V9.7|

   RemoteProf   = |N/A|

   Comment      = |N/A|

 

五、db2level

db2level命令用來確定DB2例項的版本和修訂包級別。

 

六、db2look

建立一個結構相同的資料庫很多時候是非常有利的。例如,不用在生產環境下測試新的應用和恢復計劃,而是建立一個與之結構和資料都相似的測試環境,在測試環境上進行測試。這樣,生產環境就不會受到測試所帶來的效能影響以及意外的資料破壞。此外,當調查一個故障(例如不合法的結果、效能問題等)時,在一個與生產環境相同的測試環境上進行除錯都要相對容易一些。

可以使用db2look工具提取需要的DDL語句以在另外一個資料庫中重新構建資料庫物件。也可以使用db2look工具生成需要的SQL語句以複製統計資訊、資料庫配置資訊、資料庫管理器配置資訊以及登錄檔變數。這是非常重要的,因為新的資料庫可能不會非常精確的包含同樣的資料集,但是仍然希望使用相同的訪問計劃。

示例:

1、生成test資料庫中,user1使用者建立的所有物件的DDL,並輸出到db2look.sql檔案中:

db2look –d test –u user1 –e –o db2look.sql

2、生成test資料庫中,user1使用者建立的,模式名ianhe的所有物件的DDL,並輸出到db2look.sql檔案中:

db2look –d test –u user1 –z ianhe –e –o db2look.sql

3、生成UPDATE語句,以複製test資料庫中,user1使用者建立的資料庫物件的統計資訊,並輸出到db2look.sql檔案中:

db2look –d test –u user1 –m –o db2look.sql

4、生成test資料庫中,user1使用者建立的物件的DDL語句和複製統計資訊的UPDATE語句,輸出到db2look.sql檔案中:

db2look –d test –u user1 –e –m –o db2look.sql

5、生成test資料庫中所有使用者物件的DDL語句,輸出到db2look.sql檔案中:

db2look –d test –a –e –o db2look.sql

-a選項生成所有creators的統計資訊,如果同時指定了-u,則-u選項被忽略。

6、生成test資料庫中所有使用者定義的分割槽組、buffer pools和表空間DDL語句,並輸出到db2look.sql檔案中:

db2look –d test –l –o db2look.sql

-l選項生成:資料庫分割槽組、bufferpools和表空間資訊。

7、生成test資料庫的優化器相關的資料庫和資料庫管理器配置引數的UPDATE語句以及優化器相關的登錄檔變數的db2set語句,輸出到db2look.sql檔案:

db2look –d test –f –o db2look.sql

-f選項生成配置引數和環境變數

8、資料庫為test,生成:所有物件的DDL語句、用於複製所有表和索引的統計資訊的UPDATE語句、GRANT授權語句、優化器相關的資料庫和資料庫管理器配置引數的UPDATE語句、優化器相關的登錄檔變數的db2set語句、所有使用者定義的資料庫分割槽組和buffer pools以及表空間的DDL語句。輸出到db2look.sql檔案:

db2look –d test –a –e –m –l –x –f –o db2look.sql

-x選項generate authorization DDL for existing granted privileges, excluding the original definer of the object

9、生成test資料庫中所有使用者物件的DDL語句,並%作為分界符(預設為“;”),輸出到db2look.sql檔案中:

db2look –d test –a –e –td % -o db2look.sql

10、生成test資料庫中所有物件授權的DDL語句,包括original creator建立的物件(這種情況下,在物件建立時由SYSIBM授權)。輸出到db2look.sql檔案中:

db2look –d test –xd –o db2look.sql

11、生成test資料庫物件的DDL語句,不包括create view語句:

db2look –d test –e –noview –o db2look.sql

12、生成test資料庫中與指定表相關的物件的DDL語句:

db2look –d test –e –t tabl –o db2loog.sql

13、生成federated資料庫FEDDEPART中所有物件(federatednon-federated)的DDL語句。

db2look –d feddepart –e –wrapper fedwrap

14、生成test資料庫中所有使用者物件的DDL語句。同時匯出XSR物件到目錄/home/ofer/ofer/

 db2look –d test -a –e –xs –xdir /home/ofer/ofer

15、生成test資料庫中WLM詳細的DDL語句:

db2look –d test –wlm

 

 

七、db2ls

UNIXLinux上,列出系統上安裝的DB2資料庫產品。

該命令可以列出DB2資料庫產品在系統上安裝的位置DB2資料庫產品的版本;可以列出特定安裝路徑上的所有或指定的DB2資料庫產品和元件

列出DB2資料庫產品在系統上安裝的路徑和版本db2ls

列出特定安裝路徑上的DB2資料庫產品或元件

db2ls –q –p –b baseInstallDirectory

-q:必須指定。指明正在查詢DB2產品或元件。

-p:指定列出資料庫產品而不是列出元件,如果不指定,則列出各個資料庫元件。

-b:指定安裝目錄。如果不是在安裝目錄下執行命令,則此引數必須指定。

 

 

八、db2pd

db2pd命令用來診斷故障,因為它可以迅速的返回記憶體中的即時資訊

db2pd工具收集資訊不需要任何latches(鎖存器),也不需要使用任何引擎資源。因此,當db2pd收集資訊時,它可能會檢索正在更改的資訊。這樣,收集到的資料可能不完全準確。如果遇到正在更改的記憶體指標,可使用訊號處理程式來防止db2pd異常結束。這可能會導致輸出中出現如下訊息“Changing data structure forced command termination”。儘管如此,該工具對於故障診斷非常有用。在不鎖存的情況下收集資訊有兩個好處:檢索速度更快並且不會爭用引擎資源。

當特定的SQLCODEZRC codeECF code發生時,可以使用db2pdcfg –catch命令捕獲資料庫管理器系統資訊。當errors被捕獲時,db2cos(callout script)被呼叫

例如,如果要在一個鎖超時錯誤發生時,呼叫db2cos指令碼

db2pdcfg –catch locktimeout db2cos

db2cos指令碼可以被動態的修改以便執行任何db2pd命令、OS命令、或者任何其他需要用來解決問題的命令。在UNIXLinux下,db2cos指令碼檔案在sqllib/bin目錄下。在Windows下,db2cos$DB2PATH\bin目錄

DB2安裝後自帶的預設db2cos指令碼有著簡單的流程。DB2呼叫它的時候會同時傳遞給它一些引數。db2cos指令碼通過這些引數得知呼叫自己的例項、程式、時間點和函式等資訊。還有一個傳入引數叫做typeReason,它告訴db2cos被呼叫的原因是什麼,例如資料損壞(DATA_COR)、鎖超時(LOCKTIMEOUT)、死鎖(DEADLOCK)或者其他錯誤程式碼(SQLCODE)。

常見的傳入引數有:#instance: instance name   #database:database name

#dbpart:database partition number

#pid:process ID

#tid:thread ID

#function:function name of function that called the panic script

#component:component of the function

#probe:probe point

#timestamp:timestamp of when the script. was called

#appid:application ID

#apphld:application handle

db2cos會遍歷上面的引數,記錄下它們的值,然後根據typeReason引數的定義,執行對應的動作。每次db2cos被呼叫,db2diag.log中都會有相應的記錄

 

要獲取當前處於活動狀態或者曾處於活動狀態但由於某種原因而被取消的事件監視器列表,執行db2pd –gfw命令。此命令返回關於每個快速寫程式EDU的目標(事件監視器將資料寫入這些目標)的統計資訊和資訊。

 

示例:

1、診斷lockwait

db2pd –db dbname –locks –transactions –applications -dynamic

返回結果類似如下:

Locks:

Address               TranHdl Lockname                      Type Mode Sts Owner Dur HldCnt Att    ReleaseFlg

0x07800000202E5238  3        00020002000000040000000052 Row  ..X  G    3      1    0      0x0000 0x40000000

0x07800000202E4668  2        00020002000000040000000052 Row  ..X  W*   2      1    0      0x0000 0x40000000

對於指定了-db選項的資料庫,第一個結果顯示資料庫的locks。此處結果顯示TranHdl 2正在等待TranHdl 3持有的鎖。

Transactions:

Address             AppHandl [nod-index]  TranHdl Locks State Tflag      Tflag2     Firstlsn Lastlsn LogSpace SpaceReserved TID AxRegCnt GXID

0x0780000020251B80  11       [000-00011]  2       4     READ  0x00000000 0x00000000 0x000000000000 0x000000000000 0 0 0x0000000000B7 1 0

0x0780000020252900  12       [000-00012]  3       4     WRITE 0x00000000 0x00000000 0x000000FA000C 0x000000FA000C 113 154 0x0000000000B8 1 0

可以看到TranHdl 2AppHandl 11相關,TranHdl 3AppHandl 12相關。

Applications:

Address              AppHandl  [nod-index]  NumAgents  CoorPid  Status         C-AnchID  C-StmtUID L-AnchID L-StmtUID  Appid

0x07800000006879E0   12        [000-00012]  1          1073336  UOW-Waiting    0         0         17       1          *LOCAL.burford.060303225602

0x0780000000685E80   11        [000-00011]  1          1040570  UOW-Executing  17        1         94       1          *LOCAL.burford.060303225601

可以看到AppHandl 12最後執行動態語句17,1.ApplHandl 11當前正在執行動態語句17,1,最後執行的時94,1.

Dynamic SQL Statements:

Address                AnchID  StmtUID  NumEnv NumVar NumRef  NumExe  Text

0x07800000209FD800   17       1         1       1       2        2        update pdtest set c1 = 5

0x07800000209FCCC0   94       1         1       1       2        2        set lock mode to wait 1

可以看到與鎖等待相關的SQL語句。

 

2、使用-wlocks引數捕獲所有正處於等待狀態的鎖定

db2pd –wlocks –db pdtest

Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:22

Locks being waited on :

AppHandl   [nod-index] TranHdl Lockname                       Type  Mode  Conv Sts CoorEDU AppName AuthID AppID

47          [000-00047] 8        00020004000000000840000652  Row   ..X         G    5160    db2bp   VENUS *LOCAL.venus.071207213730

46          [000-00046] 2        00020004000000000840000652  Row   .NS         W    5913    db2bp   VENUS *LOCAL.venus.071207213658

3、使用-apinfo引數獲取lock ownerlock waiter執行的詳細資訊。

與上例相同的條件下:

db2pd –apinfo 47 –db pdtest

輸出結果如下:

Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:30

Application :

Address : 0x0780000001676480

AppHandl [nod-index] : 47 [000-00047]

Application PID : 876558

Application Node Name : boson

IP Address: n/a

Connection Start Time : (1197063450)Fri Dec 7 16:37:30 2007

Client User ID : venus

System Auth ID : VENUS

Coordinator EDU ID : 5160

Coordinator Partition : 0

Number of Agents : 1

Locks timeout value : 4294967294 seconds

Locks Escalation : No

Workload ID : 1

Workload Occurrence ID : 2

Trusted Context : n/a

Connection Trust Type : non trusted

Role Inherited : n/a

Application Status : UOW-Waiting

Application Name : db2bp

Application ID : *LOCAL.venus.071207213730

ClientUserID : n/a

ClientWrkstnName : n/a

ClientApplName : n/a

ClientAccntng : n/a

List of inactive statements of current UOW :

UOW-ID : 2

Activity ID : 1

Package Schema : NULLID

Package Name : SQLC2G13

Package Version :

Section Number : 203

SQL Type : Dynamic

Isolation : CS

Statement Type : DML, Insert/Update/Delete

Statement : insert into pdtest values 99

db2pd –apinfo 46 –db pdtest

結果如下:

Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:39

Application :

Address : 0x0780000000D77A60

AppHandl [nod-index] : 46 [000-00046]

Application PID : 881102

Application Node Name : boson

IP Address: n/a

Connection Start Time : (1197063418)Fri Dec 7 16:36:58 2007

Client User ID : venus

System Auth ID : VENUS

Coordinator EDU ID : 5913

Coordinator Partition : 0

Number of Agents : 1

Locks timeout value : 4294967294 seconds

Locks Escalation : No

Workload ID : 1

Workload Occurrence ID : 1

Trusted Context : n/a

Connection Trust Type : non trusted

Role Inherited : n/a

Application Status : Lock-wait

Application Name : db2bp

Application ID : *LOCAL.venus.071207213658

ClientUserID : n/a

ClientWrkstnName : n/a

ClientApplName : n/a

ClientAccntng : n/a

List of active statements :

*UOW-ID : 3

Activity ID : 1

Package Schema : NULLID

Package Name : SQLC2G13

Package Version :

Section Number : 201

SQL Type : Dynamic

Isolation : CS

Statement Type : DML, Select (blockable)

Statement : select * from pdtest

 

4、使用db2cos分析鎖超時

要使用調出指令碼,找到db2cos輸出檔案。該檔案的位置由資料庫管理器配置引數diagpath控制。輸出檔案的內容將根據在db2cos指令碼檔案中輸入的命令而不同。在UNIX系統上,預設db2cos指令碼在bin目錄中,此目錄是隻讀目錄,可將db2cos指令碼檔案複製到adm目錄,必要時在該位置修改該檔案。在adm目錄中,db2cos目錄同樣可以執行。

使用預設的db2cos指令碼就可以方便的分析鎖超時問題。首先賦予db2cos指令碼執行許可權chmod u+x $HOME/sqllib/bin/db2cos

然後使用db2dpcfg –catch命令開啟捕獲開關。這個命令會告訴DB2在發生鎖超時(lock timeout)時執行db2cos指令碼。

db2pdcfg –catch locktimeout

這個預設的db2cos指令碼會在鎖超時發生後生成一個名為db2cos.rpt的檔案在$HOME/sqllib/db2dump/下。

 

5、將應用程式對映至動態SQL語句

db2pd –applications –dynamic命令報告動態SQL語句的當前和最後一個錨點標識和語句唯一標識。這允許直接從應用程式對映至動態SQL語句。

Applications:

Address AppHandl [nod-index] NumAgents CoorPid Status

0x00000002006D2120 780 [000-00780] 1 10615 UOW-Executing

C-AnchID C-StmtUID L-AnchID L-StmtUID Appid

163 1 110 1 *LOCAL.burford.050202200412

Dynamic SQL Statements:

Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text

0x0000000220A02760 163 1 2221CREATE VIEW MYVIEW

0x0000000220A0B460 110 1 2221CREATE VIEW YOURVIEW

 

6、監視記憶體使用情況

使用db2pd –memblock命令瞭解記憶體使用情況。

[db2inst@localhost ~]$ db2pd -memblock | more

All memory blocks in DBMS set.

 

Address    DataAddress PoolID     PoolName    BlkAge Size(Bytes)  I LOC   File

0x10740068 0x10740080 77         fcmsess      3     849920       1 495   3002113363

0x10730048 0x10730060 77         fcmsess      2     6000         1 388   3002113363

0x106EFFC8 0x106EFFE0 77         fcmsess      1     262144       1 246   3315196337

0x10680068 0x10680080 79         fcmchan      3     93184        1 495   3002113363

0x10670048 0x10670060 79         fcmchan      2     768          1 388   3002113363

0x1065FFC8 0x1065FFE0 79         fcmchan      1     65536        1 246   3315196337

0x10580068 0x10580080 13         fcmbp        3     524288       1 495   3002113363

0x10570048 0x10570060 13         fcmbp        2     768          1 388   3002113363

0x1055FFC8 0x1055FFE0 13         fcmbp        1     65536        1 246   3315196337

0x10978C78 0x10978C90 73         fcmctl       11    160592       1 1650  2986298236

0x10948C78 0x10948C90 73         fcmctl       10    160592       1 1650  2986298236

0x1092C528 0x1092C540 73         fcmctl       5     80544        1 1476  2986298236

Total size for DBMS memory set: 10178767 bytes

接下來是已排序的“效能池”輸出:

Memory blocks sorted by size for fcmsess pool:

PoolID     PoolName   TotalSize(Bytes)     TotalCount LOC   File     

77         fcmsess    849920               1          495   3002113363

77         fcmsess    262144               1          246   3315196337

77         fcmsess    6000                 1          388   3002113363

Total size for fcmsess pool: 1118064 bytes

 

Memory blocks sorted by size for fcmchan pool:

PoolID     PoolName   TotalSize(Bytes)     TotalCount LOC   File     

79         fcmchan    93184                1          495   3002113363

79         fcmchan    65536                1          246   3315196337

79         fcmchan    768                  1          388   3002113363

Total size for fcmchan pool: 159488 bytes

 

Memory blocks sorted by size for apmh pool:

PoolID     PoolName   TotalSize(Bytes)     TotalCount LOC   File     

70         apmh       286464               12         1476  2986298236

70         apmh       260200               1          285   1586829889

70         apmh       130100               1          271   1586829889

70         apmh       16000                1          1650  2986298236

70         apmh       4404                 2          195   2986298199

70         apmh       4208                 2          815   1411768055

70         apmh       2380                 7          1581  3342001786

70         apmh       840                  2          3380  1953793439

70         apmh       840                  1          1472  3878879032

最後一部分輸出對整個記憶體集的記憶體使用者進行排序:

All memory consumers in DBMS memory set:

PoolID     PoolName   TotalSize(Bytes)     %Bytes TotalCount %Count LOC   File     

72         eduah      2816016              27.67  1          0.06   189   4210081592

50         sqlch      1205268              11.84  1          0.06   193   2576467555

73         fcmctl     854872               8.40   6          0.33   1476  2986298236

77         fcmsess    849920               8.35   1          0.06   495   3002113363

62         resynch    604820               5.94   1          0.06   128   1599127346

13         fcmbp      524288               5.15   1          0.06   495   3002113363

50         sqlch      423228               4.16   1          0.06   250   2576467555

73         fcmctl     321184               3.16   2          0.11   1650  2986298236

70         apmh       286464               2.81   12         0.67   1476  2986298236

UNIXLinux上,還會在最後報告專用記憶體的記憶體塊:

All memory blocks in FMP set.

 

Address    DataAddress PoolID     PoolName    BlkAge Size(Bytes)  I LOC   File

0x126A1FB8 0x126A1FD0 59         undefh       3     122900       1 408   1937674139

0x12681FB8 0x12681FD0 59         undefh       2     122900       1 408   1937674139

0x12661FB8 0x12661FD0 59         undefh       1     122900       1 408   1937674139

Total size for FMP memory set: 368700 bytes

 

7、確定哪個應用程式耗盡表空間

使用db2pd –tcbstats可以確定對錶執行的插入運算元。以下是sample資料庫中T表的資訊:(此處只說明過程,實際T表並沒有耗盡表空間)

[db2inst@localhost ~]$ db2pd -db sample -tcbstats

TCB Table Information:

Address    TbspaceID TableID PartID MasterTbs MasterTab TableName          SchemaNm ObjClass DataSize   LfSize     LobSize    XMLSize

0xA5904944 3         8       n/a    3         8         T                  DB2INST  Perm     1          0          0          0        

 

TCB Table Stats:

Address    TableName          SchemaNm Scans      UDI        RTSUDI               PgReorgs   NoChgUpdts Reads      FscrUpdates Inserts    Updates    Deletes    OvFlReads  OvFlCrtes  RowsComp   RowsUncomp CCLogReads StoreBytes BytesSaved

0xA5904944 T                  DB2INST  3          0          0                    0          0          5          0           2          0          0          0          0          0          0          0          -          -        

然後,通過使用db2pd –tablespaces命令獲取表空間3的資訊:

Tablespace Configuration:

Address    Id    Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe  LastConsecPg Name

0xA4965D80 3     DMS  Large   8192   32       Yes  32       1     1         Off 1        0          31           IBMDB2SAMPLEREL

 

Tablespace Statistics:

Address    Id    TotalPgs   UsablePgs  UsedPgs    PndFreePgs FreePgs    HWM        Max HWM    State      MinRecTime NQuiescers PathsDropped

0xA4965D80 3     4096       4064       864        0          3200       864        864        0x00000000 0          0          No          

 

Tablespace Autoresize Statistics:

Address    Id    AS  AR  InitSize    IncSize     IIP MaxSize     LastResize                 LRF

0xA4965D80 3     Yes Yes 33554432    -1                No  None        None                       No 

 

Containers:

Address    TspId ContainNum Type    TotalPgs   UseablePgs PathID     StripeSet  Container

0xA4967230 3     0          File    4096       4064       0          0          /home/db2inst/db2inst/NODE0000/SAMPLE/T0000003/C0000000.LRG

 

FreePgs值加上UsedPgs值等於UsablePgs值。FreePgs列值下降表示可用空間減少。

然後通過執行db2pd –db sample –dyn來確定正在使用表T的動態SQL語句:

[db2inst@localhost ~]$ db2pd -db sample -dyn | more

Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 02:00:19 -- Date 2012-12-11-07.15.08.862395

 

Dynamic Cache:

Current Memory Used           1265017

Total Heap Size               1271398

Cache Overflow Flag           0

Number of References          741

Number of Statement Inserts   225

Number of Statement Deletes   179

Number of Variation Inserts   63

Number of Statements          46

 

Dynamic SQL Statements:

Address    AnchID StmtUID    NumEnv     NumVar     NumRef     NumExe     Text

0xA5ADFDF0 647    1          0          0          1          1          insert into t values (2,'b')

0xA5B13F00 106    1          1          1          3          3          insert into t values(4,'d')

最後,通過執行db2pd –db sample –app將以上輸出中的資訊對映到應用程式輸出,以便確定應用程式:

Applications:

Address    AppHandl [nod-index] NumAgents  CoorEDUID  Status                  C-AnchID C-StmtUID  L-AnchID L-StmtUID  Appid                                                            WorkloadID  WorkloadOccID CollectActData          CollectActPartition     CollectSectionActuals

0x10A908C0 270      [000-00270] 1          36         UOW-Waiting             0        0          106      1          *LOCAL.db2inst.121210233431                                      1           2             N                       C                       N 

可以使用用於標識動態SQL語句的錨點標識(AnchID)值來標識相關聯的應用程式。

db2pd –agent的輸出將指示應用程式讀取的行數(Rowsread列)和寫入的行數(Rowswrtn列)。這些值顯示應用程式已完成的部分及未完成的部分:

[db2inst@localhost ~]$ db2pd -agent app=270

Address    AppHandl [nod-index] AgentEDUID Priority    Type     State       ClientPid  Userid   ClientNm Rowsread   Rowswrtn   LkTmOt DBName   LastApplId                                                       LastPooled         

0x10B00060 270      [000-00270] 36         0           Coord    Inst-Active 7074       db2inst  db2bp    1          8          NotSet SAMPLE   *LOCAL.db2inst.121210233431                                      Tue Dec 11 07:30:45

可以將執行db2pd –agent命令時生成的AppHandlAgentEDUID值對映到執行db2pd –app命令時生成的相應AppHandlCoorEDUID值。

 

8、監視恢復

如果執行db2pd –recovery命令,輸出將顯示多個計數器,這些計數器可用於驗證是否正在執行恢復。

 

9、確定事務正在使用的資源量

db2pd –transactions命令輸出鎖定數、第一個日誌序號(LSN)、最後一個LSN、以用日誌空間量和保留空間量。

[db2inst@localhost ~]$ db2pd -db sample  -transactions

Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 04:00:20 -- Date 2012-12-11-09.15.09.876334

 

Transactions:

Address    AppHandl [nod-index] TranHdl    Locks      State   Tflag      Tflag2     Firstlsn           Lastlsn            SpaceReserved   LogSpace        TID            AxRegCnt   GXID     ClientUserID                   ClientWrkstnName               ClientApplName                 ClientAccntng                 

0xA3034B00 445      [000-00445] 2          0          READ    0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0               0               0x000000001A56 1          0        n/a                            n/a                            n/a                            n/a                           

0xA3035800 8        [000-00008] 3          0          READ    0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0               0               0x0000000011B6 1          0        n/a                            n/a                            n/a                            n/a                            

0xA3036500 9        [000-00009] 4          0          READ    0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0               0               0x000000001A57 1          0        n/a                            n/a                            n/a                            n/a                           

 

 

10、監視日誌使用情況

[db2inst@localhost ~]$ db2pd -db sample –logs

Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 04:02:49 -- Date 2012-12-11-09.17.38.279599

 

Logs:

Current Log Number            0        

Pages Written                 421      

Cur Commit Disk Log Reads     0                  

Cur Commit Total Log Reads    0                  

Method 1 Archive Status       n/a

Method 1 Next Log to Archive  n/a

Method 1 First Failure        n/a

Method 2 Archive Status       n/a

Method 2 Next Log to Archive  n/a

Method 2 First Failure        n/a

Log Chain ID                  0        

Current LSN                   0x0000000003C3D376

 

Address    StartLSN         State      Size       Pages      Filename

0xA3032888 0000000003A98010 0x00000000 1000       1000       S0000000.LOG

0xA3032048 0000000003E80010 0x00000000 1000       1000       S0000001.LOG

0xA3011598 0000000004268010 0x00000000 1000       1000       S0000002.LOG

通過寫入頁數值,可以確定日誌使用量是否正在增加。如果最近大多數的日誌歸檔操作都失敗,那麼歸檔狀態的值將被設定為失敗。如果正在發生的歸檔失敗導致完全無法對日誌進行歸檔,那麼歸檔狀態值將被設定為首次失敗。

 

11、生成堆疊跟蹤

使用db2pd –stack all命令生成當前資料庫分割槽中所有程式的堆疊跟蹤。如果懷疑某個程式或執行緒正在迴圈或正被掛起,那麼可能要反覆使用此命令。

使用db2pd –stack eduid來獲取特定引擎可分派單元(EDU的當前呼叫堆疊。

可以使用dumpdir引數將db2pd –stacks命令的輸出重定向至特定目錄路徑以及使用timeout引數僅重定向特定持續時間的輸出:

[db2inst@localhost trapfiles]$ db2pd -stack all dumpdir=~/trapfiles timeout=30

 

12、檢視資料庫分割槽的記憶體統計資訊

db2pd –dbptnmem命令顯示DB2伺服器當前消耗的記憶體量,並在較高階別顯示使用這些記憶體的伺服器區域。

[db2inst@localhost ~]$ db2pd –dbptnmem

Database Partition 0 -- Active -- Up 0 days 04:47:32 -- Date 2012-12-11-09.58.07.495126

 

Database Partition Memory Controller Statistics

 

Controller Automatic: Y

Memory Limit:         773492 KB

Current usage:        214848 KB

HWM usage:            230336 KB

Cached memory:        48064 KB

 

Individual Memory Consumers:

 

Name             Mem Used (KB) HWM Used (KB) Cached (KB)

========================================================

APPL-SAMPLE              24768         40000       23488 

DBMS-db2inst             39232         39232        5568

FMP_RESOURCES            22528         22528           0

PRIVATE                  11456         11456           0

DB-SAMPLE               116608        116608       19008

LCL-p7074                  128           128           0

LCL-p2109                  128           128           0

說明:

Controller Automatic:指示記憶體控制器設定。如果instance_memory配置引數設定為AUTOMATIC,那麼它將顯示“Y”,意味著資料庫管理器自動確定記憶體耗用量上限。

Memory Limit:如果強制施加了例項記憶體限制,那麼instance_memory配置引數的值是可以耗用的DB2伺服器記憶體的上限。

Memory Limit:伺服器當前耗用的記憶體量。

HWM usage:自啟用資料庫分割槽(在db2start命令執行時)以來消耗的記憶體高水位標記(HWM)或峰值。

Cached memory:快取記憶體的記憶體,當前使用量中未使用但為了提高將來記憶體請求的效能而快取記憶體的記憶體量。

APPL-dbname:為資料庫dbname耗用的應用程式記憶體

DBMS-name:全域性資料庫管理器記憶體需求

FMP_RESOURCES:與db2fmps進行通訊所需的記憶體

PRIVATE:其他專用記憶體需求

DB-dbname:為資料庫dbname耗用的資料庫記憶體

LCL-pid:用於與本地應用程式進行通訊的記憶體段

 

13、顯示耗費處理器時間最多的幾個EDU並顯示EDU堆疊資訊

使用db2pd –edus,輸出將列示所有引擎可分派單元(EDU)。在LinuxUNIX上,可以指定interval引數,以便生成所有EDU的兩個快照,這兩個快照將相隔指定的時間間隔,這樣輸出會增加兩列:USER DELTA列指示該時間間隔內處理器使用者時間的增量,SYS DELTA列指示時間間隔內處理器系統時間的增量。

僅檢視有關耗費處理器時間最多的幾個EDU的資訊以減少返回的輸出量,可以指定top引數

[db2inst@localhost ~]$ db2pd -edus interval=5 top=5

Database Partition 0 -- Active -- Up 0 days 05:24:37 -- Date 2012-12-11-10.35.12.331994

 

List of all EDUs for database partition 0

 

db2sysc PID: 2037

db2wdog PID: 2035

db2acd  PID: 2052

 

EDU ID    TID            Kernel TID     EDU Name                               USR (s)         SYS (s)        USR DELTA    SYS DELTA

=========================================================================================================

1         2911890288     2041           db2sysc 0                              1.010000    12.190000    0.000000     0.010000

25        2928667504     2254           db2pfchr (SAMPLE) 0                    0.030000     0.030000    0.000000     0.000000

11        2943347568     2042           db2alarm 0                             0.160000     1.450000    0.000000     0.000000

12        2942298992     2043           db2thcln 0                             0.000000     0.000000    0.000000     0.000000

14        2940201840     2046           db2ipccm 0                             0.100000     0.450000    0.000000

 

 

九、db2support

使用db2support命令來收集環境資訊,並將這些系統資料放到一個壓縮檔案中。db2support實用程式將自動收集所有可用的DB2診斷資訊和系統診斷資訊。它還有一個可選的互動式會話。該會話提出有關問題的詳情。

使用db2support可以避免可能的使用者錯誤,因為不必手動輸入GET DATABASE CONFIGURATION FOR database-nameLIST TABLESPACES SHOW DETAIL之類的命令。而且,不需要有關要執行的命令或要收集的檔案的指示資訊,因此收集資料的速度會比較快。

 

十、db2val

db2val命令用於確保DB2副本在正常執行。它通過以下方法驗證DB2副本的核心功能:驗證安裝檔案、例項、資料庫建立情況、與該資料庫的連線以及分割槽資料庫環境的狀態。db2val命令可以快速確保已正確完成所有配置,並且確保DB2副本就是期望的副本。可以指定例項和資料庫,也可以對所有例項執行db2val命令。

 

 

 

 

 

 

 

 

 

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25744374/viewspace-750932/,如需轉載,請註明出處,否則將追究法律責任。

相關文章