DB2 性能監控2[翻譯]

- 中國WEB開發者網絡 (http://www.webasp.net)
-- 技術教程 (http://www.webasp.net/article/)
--- DB2 性能監控2[翻譯] (http://www.webasp.net/article/22/21039.htm)
-- 作者:未知
-- 發佈日期: 2005-04-29


 



 



 



 



 



 



 


性能監控2



Performance Monitoring, Part 2



Roger Sanders 著

笑熬漿糊 譯




 


天堂鳥自由空間原創作品



天堂鳥自由空間©2002-2005版權所有



轉載請保持文檔的完整性



訪問更多可以瀏覽http://hbird.vicp.net/myself.html



或http://hbird.myrice.com/myself.html



Blog: http://blog.csdn.net/mr_bean



BBS討論:  http://hbird.vicp.net



mail:jackey.wu@163.com



性能監控2



Roger Sanders 著



笑熬漿糊 譯


 


原文出處:《DB2 Magazine》 Quarter 3, 2004 Vol. 9, Issue 3



英文原文(由於文章翻譯未經授權,請在轉載時保留原文鏈接)


事件監視器超越了性能線索快照。在此系列的第一篇中,我指出DB2的性能監視工具趨向於一個有組織、有目標導向的調整結果。簡單的說,他們能幫助你確定性能問題的癥結所在並且給你一些改進的方法。你也許還記得數據庫系統監視器是由兩種不同的監視工具組成:一個快照監視器和一個或多個事件監視器。在上個章節,我詳細介紹了快照監視器以及它是怎樣用於捕獲實例或數據庫在既定時間點上的當前狀態信息。在本章,我將要來介紹事件監視器是怎麼被用於捕獲那些不能被快照監視器所抓取情況下的監視器數據。事件監視器

事件監視器收集監視器數據例如特定事件或者事務發生。因此,事件監視器提供了一個當事件或者活動發生的時候不能使用快照監視器監視時搜集數據庫系統監視器數據的方法。例如,假設你想要捕獲每當死鎖週期的發生時的監視器數據。如果你對死鎖的概念比較熟悉的話,你應該知道一個被稱之為死鎖監聽器的特殊進程在後台安靜的運行並且在預定的間隔時間內會“甦醒”用以為死鎖週期掃瞄當前正在鎖定的系統。如果死鎖週期被發現,死鎖監聽器將會隨機選擇、回滾並且終止涉及在此次週期中的任意一個事務。結果,被選擇出來的那個事務將會接受到是一個SQL錯誤代碼,並且所有實際上已經獲得的所被釋放以便於剩下的事務能夠繼續執行。像這樣一系列的事件信息不能被快照監視器所捕獲,這有很大的可能是因為死鎖週期可能在快照執行很久之前就已經被破壞了。然後,事件監視器卻可以捕獲該事件的重要信息,因為它可以在死鎖週期被檢測到的瞬間被激活。這兩種監視器的另外一個顯著的不同是:快照監視器以後台進程的方式駐留,從一個數據庫連接建立就開始捕獲監視器數據;相反地,事件監視器必須在他們使用之前專門去建立和激活。幾個不同的事件監視器可以共存,並且每個事件監視器只有在特定類型的事件或者事務發生的時候才會被激活。表1顯示的就是可以導致事件監視器被激活的一些事件類型,以及被每個事件類型所搜集的監視器數據的種類。

表1 事件類型和他們對應的數據由於事件監視器是特殊的數據庫對像因此它必須在使用之前創建,它們只能收集發生在它們被定義的數據庫中事件或者事務的監視器數據。你不能在實例級使用事件監視器來收集監視器數據。創建事件監視器

你可以直接在控制中心中創建事件監視器(從事件監視器菜單選擇創建事件監視器),也可以通過執行CREATE EVENT MONITOR 的SQL語句來創建它,它的基本語法如下:
CREATE EVENT MONITOR [Name]FOR [DATABASE |BUFFERPOOLS |TABLESPACES |TABLES |DEADLOCKS < WITH DETAIL > |CONNECTIONS < WHERE [EventCondition] > |STATEMENTS < WHERE [EventCondition] > |TRANSACTIONS < WHERE[EventCondition] > , ...]WRITE TO [TABLE [GroupName] (TABLE [TableName]) |PIPE [PipeName] |FILE [DirectoryName]][MANUALSTART | AUTOSTART]


說明:Name是被分配給這個事件監視器的名稱

EventCondition用於確定事件監視器將會為哪一個連接、語句或者事務收集數據的條件

GroupName確定被定義的目標表上的邏輯數據群組(使用這個參數的可用值可以參見表1)

TableName確定指派給所有事件監視器寫入的數據庫表的名稱

PipeName確定指派給所有事件監視器寫入命名管道的名稱

DirectoryName確定指派個包含事件監視器的一個或者多個文件寫入目錄的名稱

注意:在尖括號中出現的參數是可選擇的;出現在方括號裡面的參數或者選擇是必須的。察看CREATE EVENT MONITOR SQL語句的完整語法,參見IBM DB2 Universal Database, Version 8 SQL Reference Volume 2文檔。我們假設如果你想創建一個關於捕獲所有應用級的計數器的值並且每當應用程序中止與數據庫的時候把它們寫入名為CONN_DATA的數據庫表中的一個事件監視器。你可以執行下面的CREATE EVENT MONITOR語句來完成它。CREATE EVENT MONITOR CONN_EVENTSFOR CONNECTIONSWRITE TO TABLE
CONN
(TABLE CONN_DATA)

現在我們假使你要創建一個用來捕獲緩衝池和表空間事件的監視器數據並且要把所有收集到的數據寫入到一個名為/export/home/bpts_data目錄的事件監視器。你可以執行下面的CREATE EVENT MONITOR語句來完成它。CREATE EVENT MONITOR BPTS_EVENTSFOR BUFFERPOOLS, TABLESPACESWRITE TO FILE '/export/home/BPTS_DATA'

正如你所看到的,當你創建一個事件監視器的時候你必須去指定激活監視器的事件的類型以及所有收集到的數據寫入的地方。一個事件監視器的輸出可以寫入到一個或者多個的數據庫表、外部文件或一個命名管道。表和管道型的事件監視器流事件直接記錄到指定表或者命名管道中。另一方面,文件型事件監視器流事件記錄成一系列具有.evt擴展名的8位編碼的文件(例如00000000.evt, 00000001.evt等等)。存儲在這些文件中的數據也許被處理成類似於一個單獨的數據流存儲的一個單獨的文件中。雖然這些數據實際上是被分割成許多小的數據塊。(數據流開始於00000000.evt文件的第一個字節,結束於創建的最後一個文件的最後一個字節)如果你指明事件監視器的輸出會存儲在數據庫表裡面的話,那麼所有的目標表將會在CREATE EVENT MONITOR語句被執行的時候自動被創建。(如果由於一些原因創建表失敗,那麼會返回一個錯誤代碼同時CREATE EVENT MONITOR語句執行也就失敗)然而,如果你指明事件監視器的輸出會寫入一個或者多個外部文件,或者一個命名管道的時候,這個輸出目錄或者命名管道則必須事先存在並且當事件監視器被激活時DB2數據庫管理器實例自身必須能夠對它進行寫入。另外,如果使用的是一個命名管道,應用程序監視的命名管道必須要運行同時它也必須在事件監視器被激活之前將管道打開準備讀取信息。開始和停止事件監視器

如果你在創建一個事件監視器的時候指明使用AUTOSTART選項,那麼監視器將會在包含它的數據庫開始的時候自動開始。(數據庫開始於使用ACTIVATE DATABASE命令來激活或者第一個與該數據庫連接建立的時候。)如果你使用MANUALSTART或者不知名任何選項(在這裡,MANUALSTART是缺省值),它的結果就是事件監視器不會收集監視器數據直至它開始活動。事件監視器可以通過執行SET EVENT MONITOR SQL語句來開始(停止)。它的基本語法如下:
SET EVENT MONITOR [MonitorName] STATE < = > [MonitorState]


說明:MonitorName指明需要改變狀態的事件監視器的名稱

MonitorState指明指派給需要修改狀態的事件監視器的狀態。想要開始事件監視器的話(換句話說,也就是把它置為激活狀態),你要把它的值置為1。相反地,需要置為0。

現在我們假設你想要開始名為CONN_EVENTS的事件監視器,它創建的時候採用了MANUALSTART選項。你可以這麼作:
SET EVENT MONITOR CONN_EVENTS STATE 1


如果你想要得到與上面相反地結果,也就是說停止CONN_EVENTS事件監視器的話,你可以執行這句:
SET EVENT MONITOR CONN_EVENTS STATE 0


同時,你也可以通過在控制中心的事件監視器菜單中選中並且選擇你想要得動作來開始和停止事件監視器事件監視器一旦開始運行,它就會在後台靜靜等待所為他設計的要監視的相應事件或者事務的出現。當這種情況出現的時候,事件監視器會收集合適的監視器數據信息並且將它們寫入到監視器的輸出對像中(表、目錄或者命名管道)。在這個時候,這些步驟將由事件或者事務自身去控制;數據庫管理員不需要去執行任何額外的步驟去收集事件監視器數據,這點與快照監視器在使用的時候是不同的。強制輸出

在有些時候,低記錄執行頻率的事件監視器(例如被設計於監視數據庫事件的監視器)會把事件監視器數據存儲在內存中而沒有存儲在事件監視器的目標空間上(因為這時候僅僅是部分事件記錄存在)。如果你在此時想要去檢查一下事件監視器的活動內部緩存裡面的內容的話,可以執行FLUSH EVENT MONITOR SQL語句。該語句的語法是FLUSH EVENT MONITOR [MonitorName] <BUFFER>。MonitorName指明你需要強制立即輸出他的活動內部緩存到目標空間的事件監視器的名稱。強制將CONN_EVENTS事件監視器活動內部緩存的內容寫入到相應的空間,你可以執行FLUSH EVENT MONITOR CONN_EVENTS語句。缺省情況下,早先被寫入事件監視器目標空間的那些記錄被記錄在事件監視器日誌當中並且打上了一個部分記錄信息的標誌。然而,如果你在執行FLUSH EVENT MONITOR的過程中指明了BUFFER選項的話,只有出現在事件監視器活動內部緩存的監視器數據才會被寫入到事件監視器的目標空間中,同時在事件監視器日誌中沒有部分的記錄被記錄。當事件監控器被清除後,計數器並沒有復位。結果會造成,當事件監控器被正常觸發時,已經被生成的沒有使用FLUSH EVENT MONITOR語句的事件監控器記錄,仍然會被生成。事件監視器數據

有些時候,你想要察看事件監視器收集的數據。如果這些收集到的數據是寫入到一個命名管道,那麼在管道末端負責接受的應用程序通常是以在它接受到數據的時候顯示出監視器數據的形式作為相應。如果事件監視器把數據寫入表或者一系列文件中的話,你可以通過一個名為事件分析器(Event Analyzer)的專用工具來察看數據或者使用Event Monitor Productivity Tool。事件分析器是一個GUI工具,它可以通過在控制中心選中你所想得到的事件監視器並且從事件監視器菜單中選擇適當的動作或通過執行db2eva命令來激活。圖1顯示事件分析器在它第一次激活時候的典型示例。
圖1 時間分析工具


一旦它被激活,事件分析器允許你向下挖掘並瀏覽一個詳細的事件監視器捕獲的信息。事件分析器只能用於查看那些被收集並且存儲與數據庫表中的事件監視器數據。如果要查看被寫入到文件或者命名管道裡面的監視器數據,你將要使用基於文本的Event Monitor Productivity Tool,它可以從一個事件監視器數據文件或命名管道中收取數據並且將這些數據處理成一個格式化的報告。(事件監視器文件和命名管道包含一個必須要在展示之前格式化的二進制邏輯數據群流)通過db2evmon命令可以激活Event Monitor Productivity Tool。這個命令的基本語法是
db2evmon -db [DatabaseAlias] -evm [MonitorName] 或者 db2evmon -path [MonitorTarget]


說明:DatabaseAlias指明所要定義事件監視器的數據庫的別名

MonitorName指明所分配的需要顯示數據的事件監視器的名稱

MonitorTarget指明已經被指定事件監視器收集的數據存儲的位置(目錄或命名管道)

作為例子,為了格式化和輸出被定義在SAMPLE數據庫中的事件監視器CONN_EVENTS所有被收集的數據,你可以通過執行db2evmon -db SAMPLE -evm CONN_EVENTS命令來得到。例如,假設你要使用下面的語句創建CONN_EVENTS事件監視器
CREATE EVENT MONITOR CONN_EVENTSFOR CONNECTIONSWRITE TO FILE 'C:\MONDATA'AUTOSTART


假設一個應用程序與SAMPLE數據庫已經建立起一個連接(使事件監視器可以收集和記錄監視數據)。db2evmon -db SAMPLE -evm CONN_EVENTS命令返回輸出信息的文件頭部分表1中的樣例輸出類似。表1事件監視器CONN_EVENTS的輸出樣例

 


Reading C:\DBSIO\00000000.EVT ...



-----------------------------------------------------------------------



              EVENT LOG HEADER



 Event Monitor name: CONN_EVENTS



 Server Product ID: SQL08015



 Version of event monitor data: 7



 Byte order: LITTLE ENDIAN



 Number of nodes in db2 instance: 1



 Codepage of database: 1252



 Territory code of database: 1



 Server instance name: DB2



-----------------------------------------------------------------------



-----------------------------------------------------------------------



 Database Name: SAMPLE



 Database Path: C:\DB2\NODE0000 QL00001\



 First connection timestamp: 03-24-2004 16:53:00.020233



 Event Monitor Start time:  03-24-2004 16:53:00.155733



-----------------------------------------------------------------------



3) Connection Header Event ...



 Appl Handle: 16



 Appl Id: *LOCAL.DB2.0120C4215303



 Appl Seq number: 0001



 DRDA AS Correlation Token: *LOCAL.DB2.0120C4215303



 Program Name  : db2evmon.exe



 Authorization Id: RSANDERS



 Execution Id  : RSANDERS



 Codepage Id: 1252



 Territory code: 0



 Client Process Id: 1788



 Client Database Alias: SAMPLE



 Client Product Id: SQL08015



 Client Platform: Unknown



 Client Communication Protocol: Local



 Client Network Name:



 Connect timestamp: 03-24-2004 16:53:00.020233



4) Connection Event



  Appl Handle: 16



  Appl Id: *LOCAL.DB2.0120C4215303



  Appl Seq number: 0003




 


  Record is the result of a flush: FALSE



Application Status: SQLM_UOWWAIT



 Lock Statistics:



  Lock Waits: 0



  Total time waited on locks (milliseconds): 0



  Deadlocks: 0



  Lock escalations: 0



  X lock escalations: 0



  Lock timeouts: 0



 Sort Statistics:



  Sorts: 0



  Total sort time (milliseconds): 0



  Sort overflows: 0



 Hash Statistics:



  Hash Joins: 0



  Hash Loops: 0



  Hash Join Small Overflows: 0



  Hash Join Overflows: 0




 


 Buffer Pool Statistics:



  Buffer pool logical data page reads: 12



  Buffer pool physical data page reads: 4



  Buffer pool data page writes: 0



  Buffer pool logical index page reads: 30



  Buffer pool physical index page reads: 18



  Buffer pool index page writes: 0



  Buffer pool read time (microseconds): 0



  Buffer pool write time (microseconds): 0



  Time spent waiting for a prefetch: 0 milliseconds



  Unread prefetch pages: 0




 


 Workspace Statistics:



  Shared workspace high water mark: 0



  Total shared workspace overflows: 0



  Total shared workspace section lookups: 0



  Total shared workspace section inserts: 0



  Private workspace high water mark: 13746



  Total private workspace overflows: 0



  Total private workspace section lookups: 2



  Total private workspace section inserts: 2




 


 Direct I/O Statistics:



  Sectors read directly: 14



  Sectors written directly: 0



  Direct read requests: 5



  Direct write requests: 0



  Direct read time: 0



  Direct write time: 0




 


 SQL Statement counts



  Commit SQL statements: 1



  Rollback SQL statements: 0



  Dynamic SQL statements: 1



  Static SQL stmts: 3



  Failed SQL statements: 0



  Select SQL statements: 2



  Data Definition Language SQL statements: 0



  Update/Insert/Delete SQL statements: 0




 


 Internal counts



  Internal auto rebinds: 0



  Internal rows deleted: 0



  Internal rows updated: 0



  Internal rows inserted: 0



  Internal commits: 0



  Internal rollbacks: 0



  Internal rollbacks due to deadlock: 0




 


 Row counts



  Rows deleted: 0



  Rows inserted: 0



  Rows updated: 0



  Rows selected: 2



  Rows read: 6



  Rows written: 0



  Binds/Precompiles: 0



  Rejected block cursor requests: 0



  Accepted block cursor requests: 0




 


 Package Cache Statistics



  Package Cache Lookups: 3



  Package Cache Inserts: 2



  Section Lookups: 3



  Section Inserts: 2




 


 Catalog Cache Statistics



  Catalog Cache Overflows: 0



  Catalog Cache High Water Mark: 0



  Catalog Cache Lookups: 2



  Catalog Cache Inserts: 0




 


 CPU times



  User CPU time: 0.000000 seconds



  System CPU time: 0.000000 seconds




 


 Memory usage:




 


   Memory Pool Type:  Other Memory



     Current size (bytes): 16384



     High water mark (bytes): 98304



     Maximum size allowed (bytes): 1071644672




 


   Memory Pool Type:  Application Heap



     Current size (bytes): 212992



     High water mark (bytes): 212992



     Maximum size allowed (bytes): 1277952




 


   Memory Pool Type:  Application Control Heap



     Current size (bytes): 16384



     High water mark (bytes): 16384



     Maximum size allowed (bytes): 704512




 


 Disconnection Time: 03-24-2004 16:53:00.191692
接下來

快照監視器和事件監視器被設計用於幫助你確定並修正那些已經影響數據庫系統的性能問題。DB2 UDB v.8.1還提供了兩種額外的工具(the Health Monitor and Health Center)來幫助你在它們變成真正的問題之前找出它的前兆來。這就是接下來的章節中要說的主題。

 完整版本(包含圖片的PDF文件)請到http://hbird.vicp.net/viewthread.php?tid=1486處下載


webasp.net