您好,登錄后才能下訂單哦!
這篇文章主要介紹“db2死鎖監視器的使用方法”,在日常操作中,相信很多人在db2死鎖監視器的使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”db2死鎖監視器的使用方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一. 打開的監視器對數據庫性能的影響:
DB2常用來收集監視信息的工具有兩種:快照監視器和事件監視器。前者用于獲取特定時間點的監視數據,后者用于獲取特定事件的監視數據。無論用戶使用哪種監視工具收集數據庫系統監視器相關的數據,都會引起一定的系統開銷,包括內存,CPU以及為獲取監視數據而產生的額外調用處理等,為控制收集必要的監視信息,減少不必要的系統開銷,DB2引入了監視器開關的機制。每種開關都有“ON”和“OFF”兩種狀態,當開關處于“OFF”時,其控制下的相關監視元素的信息將不被收集。DB2實例級(數據庫管理器)的監視器狀態可用 “db2 get dbm monitor switches " 來獲取。當實例下有監視程序打開某個開關時,實例級所對應的開關也將被打開。
例如:
收集到的 DBM 系統監視器信息
db 分區號 0 的開關列表
緩沖池活動信息 (BUFFERPOOL) = OFF
鎖定信息 (LOCK) = OFF
排序信息 (SORT) = OFF
SQL 語句信息 (STATEMENT) = OFF
表活動信息 (TABLE) = OFF
獲取時間戳記信息(時間戳記) = ON 2005-06-26 10:36:47.019334 <-- 時間戳監視器開關打開的時間
工作單元信息 (UOW) = OFF
使用快照監視器時必須首先通過“db2 update monitor switches”、db2MonitorSwitches API或其它間接方式打開要收集的數據的監視器開關,而事件監視器則不受系統監視器開關設置的影響(TIMESTAMP監視器開關除外,它是唯一一個對所有監視器都起作用的開關),在數據庫連接后,激活的事件監視器將自動打開與這一監視器相關的實例級監視器的開關。事件監視器可收集如下類型的事件:
DATABASE
TABLES
DEADLOCKS
BUFFERPOOLS
CONNECTIONS
STATEMENTS
TRANSACTIONS
而創建數據庫時缺省建立的監控死鎖詳細信息的DB2DETAILDEADLOCK,由于創建時選擇了AUTOSTART選項,因此會在數據庫連接后被自動激活并將實例的LOCK監視器開關打開。如對于SAMPLE數據庫進行連接后,被激活的DB2DETAIDEADLOCK事件監視器會使LOCK監視器開關處于“ON”的狀態:
db2 connect to sample
數據庫連接信息
數據庫服務器 = DB2/NT 8.2.1
SQL 授權標識 = DB2TEST
本地數據庫別名 = SAMPLE
db2 get dbm monitor switches
收集到的 DBM 系統監視器信息
db 分區號 0 的開關列表
緩沖池活動信息 (BUFFERPOOL) = OFF
鎖定信息 (LOCK) = ON 2005-06-26 14:25:00.972053 <-- DB2DETAILDEADLOCK將LOCK監視器開關打開的時間
排序信息 (SORT) = OFF
SQL 語句信息 (STATEMENT) = OFF
表活動信息 (TABLE) = OFF
獲取時間戳記信息(時間戳記) = ON 2005-06-26 10:36:47.019334
工作單元信息 (UOW) = OFF
前面已經提到,由于打開LOCK監視器開關會引起一些額外的開銷,特別是在DB2DETAILDEADLOCK為了收集更詳細的死鎖信息而在創建時使用了“WITH DETAIL”選項,與僅使用DEADLOCKS的監視器相比還要額外收集:
1. 發生死鎖時應用程序所執行的語句
2. 死鎖時應用程序所持有的鎖定
因此它對性能的影響較僅用DEADLOCKS的會更大。為提高數據庫性能,在不需要監控死鎖的問題時,可考慮禁用DB2DETAIDEADLOCK事件監視器。在禁用之前首先要了解查看事件監視器開關所處狀態的方法,這需要借助SQL函數EVENT_MON_STATE來完成:
db2 "select evmonname, EVENT_MON_STATE(evmonname) as state from syscat.eventmonitors"
舉例輸出為:
EVMONNAME STATE
---------------- -------
DB2DETAILDEADLOCK 1
1 條記錄已選擇。
注:STATE=0 表明事件監視器的開關為“關閉”狀態,連接數據庫后,這樣的事件監視器不會打開相應的數據庫管理器監視器的開關;STATE=1 表明開關為“打開”狀態,連接數據庫后,這樣的事件監視器將打開相應的數據庫管理器監視器的開關。
二. 禁用事件監視器的方法:
通過如下語句可關閉DB2DETAILDEADLOCK事件監視器:
db2 set event monitor db2detaildeadlock state 0
不過由于DB2DETAILDEADLOCK監視器創建時使用了AUTOSTART選項,因此上述SQL語句只能在此次連接期間禁用該監視器,從而關閉數據庫管理器的LOCK監視器開關,但在下次連接數據庫時,DB2DETAILDEADLOCK又會被自動激活,并再次打開該開關。由于AUTOSTART的屬性在事件監視器創建后是無法修改的,所以要長期徹底地禁用這一缺省創建的事件監視器,只有刪除它。
由于缺省狀態下DB2DETAILDEADLOCK事件監視器是被激活的,如果直接發出如下刪除監視器的語句:
db2 drop event monitor db2detaildeadlock
會遇到以下報錯:
SQL1619N 不能 DROP 活動的事件監視器。 SQLSTATE=55034
因此需要首先禁用它:
db2 set event monitor db2detaildeadlock state 0
然后再進行刪除操作,便可將DB2DETAILDEADLOCK事件監視器從數據庫中刪除,從而長期禁用了該監視器,避免了實例級的LOCK監視器開關因該監視器的激活而被打開。
另外,由于一個實例下可能有不止一個數據庫,則每個庫都會有一個缺省的DB2DETAILDEADLOCK事件監視器,連接任何一個庫都會使實例級的LOCK監視器開關被打開,因此如果要使實例級的LOCK監視器開關處于關閉狀態,必須確保以下三點:
1. 檢查數據庫管理器本身配置中的缺省快照監視器開關LOCK是關閉狀態,即執行:
db2 get dbm cfg
確認輸出中DFT_MON_LOCK的設置為“OFF”狀態:
鎖定 (DFT_MON_LOCK) = OFF
如果為“ON”,可執行下面的語句打開:
db2 update dbm cfg using dft_mon_lock off (即刻生效)
2. 確保沒有任何應用打開LOCK監視器開關。
3. 實例下每個已被連接的數據庫中的DB2DETAIDEADLOCK事件監視器均被禁用或刪除。
三. DB2DETAILDEADLOCK事件監視器的重新創建:
如果今后可能需要重新使用DB2DETAILDEADLOCK事件監視器,可在刪除它前先利用如下語句獲取其定義:
db2 select char(a.evmonname,20) as evmonname, char(definer,15) as definer, char(type,16) as type, target_type, char(target,70) as target, maxfiles, maxfilesize, buffersize, io_mode, write_mode, autostart, dbpartitionnum, char(remarks,100) as remarks from syscat.eventmonitors a, syscat.events b where a.evmonname='DB2DETAILDEADLOCK' and a.evmonname=b.evmonname
以Windows平臺上的輸出舉例:
EVMONNAME DEFINER TYPE TARGET_TYPE TARGET
MAXFILES MAXFILESIZE
BUFFERSIZE IO_MODE WRITE_MODE AUTOSTART DBPARTITIONNUM REMARKS
-------------------- --------------- ---------------- ----------- --------------
-------------------------------------------------------- ----------- -----------
----------- ------- ---------- --------- -------------- -----------------------
-----------------------------------------------------------------------------
DB2DETAILDEADLOCK LIWENLI DETAILDEADLOCKS F C:\DB2\NODE000
0\SQL00002\DB2EVENT\db2detaildeadlock 20 512
17 B A Y 0 -
1 條記錄已選擇。
以上述輸出為例重新創建名為DB2DETAILDEADLOCK(當然也可使用其他名稱)的詳細死鎖事件監視器的語句為:
db2 create event monitor db2detaildeadlock for deadlocks with details write to file 'C:\DB2\NODE0000\SQL00002\DB2EVENT\db2detaildeadlock' autostart on dbpartitionnum 0 maxfiles 20 maxfilesize 512 buffersize 17 blocked append
當語句成功執行后,DB2DETAILDEADLOCK這一詳細死鎖監視器便會重新創建起來。
到此,關于“db2死鎖監視器的使用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。