共計 4223 個字符,預計需要花費 11 分鐘才能閱讀完成。
這篇文章主要介紹“db2 死鎖監視器的使用方法”,在日常操作中,相信很多人在 db2 死鎖監視器的使用方法問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”db2 死鎖監視器的使用方法”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
DB2DETAILDEADLOCK 事件監視器的禁用和重建
一. 打開的監視器對數據庫性能的影響:
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 死鎖監視器的使用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!