DB2 鎖的監控
鎖是資料庫為了控制併發資料的完整性而引入的機制,在併發應用中出現鎖現象並不可怕,鎖現象通常分為死鎖和鎖等待兩種情形。
死鎖是因為兩個併發的程式或者執行緒同時各自佔有一個資源,又需要佔有對方資源,但又都各不相讓造成的,這通常是因為程式在併發上考慮不周造成的。
鎖等待則是資料庫中最普通的情況,一各應用使用資料期間必然要加鎖,防止其他程式或應用破壞資料,其他程式或應用在此期間不得不等待前一個應用釋放鎖。鎖等待時間引數是可調的,但要視實際應用情況而定,比如在網路環境中,複雜應用環境,或者對實時性要求不高的環境中,可以將鎖等待時間調大一些,有些情況要調小一些。鎖等待不同於死鎖,死鎖屬於程式併發不當,需要調整程式併發機制,鎖等待則屬於效能問題,可能需要調整程式的sql語句。
不管是死鎖還是鎖等待,資料庫都有相應引數可調,也有相應的工具可以捕獲和分析,以下是鎖處理的通常辦法。 (1) 檢視和更改與鎖相關的主要資料庫引數
(2) 檢視當前併發應用
(3) 檢視和更改快照引數,獲取快照 ·
(4) 使用事件檢視器,檢視和更改與鎖相關的主要配置引數
利用db2 get db cfg,在引數列表中尋找DLCHKTIME和LOCKTIMEOUT兩個引數。
-DLCHKTIME 單位是毫秒,是DB2檢查死鎖的間隔時間,假設該值為10000ms,則意味著每隔10秒鐘檢查一下當前資料庫中有無死鎖存在,如有死鎖,會選擇回滾其中的某一個事務,讓另外一個事務完成交易。
-LOCKTIMEOUT單位是秒,是鎖等待最長時間,超過該時間仍未獲得鎖,則返回錯誤。設定提示:預設情況下,LOCKTIMEOUT是-1,意味著鎖等待時間無限期,這和實際應用需求一般是不太相符的,需要將其值設為大於0的一個數。 -DLCHKTIME時間通常要設得比LOCKTIMEOUT時間小一些,否則未等發現死鎖,就會被以鎖等待超時而返回錯誤更改方法:db2 update db cfg using locktimeout 10
檢視當前併發應用,利用db2 list applications 或db2 list applications show detail 或 db2 list applications for database dbname [show detail]。該命令可以檢視當前是否有多個應用在連線著資料庫,從而排查是否有併發的存在。
檢視和更改快照引數,如果在合理設定了DLCHKTIME和LOCKTIMEOUT引數仍然出現鎖現象,可以檢視快照或者建立事件監控器來分析原因。要採用快照,首先要開啟快照開關,利用db2 get monitor switches,輸出中將包含以下引數。
檢視快照資訊,檢視資料庫管理器級別快照資訊:db2 get snapshot for dbm;檢視資料庫級別快照資訊:db2 get snapshot for database on dbname;檢視應用級別快照資訊:db2 get snapshot for application agentid appl-handler;檢視錶級別快照資訊:db2 get snapshot for tables on dbname;檢視鎖快照資訊:db2 get snapshot for locks on dbname或db2 get snapshot for locks on for application agentid appl-handler;檢視動態sql語句快照資訊:db2 get snapshot for dynamic sql on dbname
使用事件檢視器,可以使用時間檢視器收集鎖事件,SQL語句事件,從而根據事件分析鎖原因。事件型別,使用事件監控器,首先要選定所關注的事件型別,DB2中有很多事件型別,可以用於鎖分析的通常會用到以下三種:DEADLOCKS; DEADLOCKS WITH DETAILS;STATEMENTS。步驟:建立事件監控器:create event monitor evmname for eventtype write to file ‘directory’ ;例:create event monitor mymonitor for deadlocks, statements write to file ‘c:\temp’ ;把事件監控器開啟,接上例:set event monitor mymonitor state 1 /*注:1為開啟,0為關閉*/事件監控器開始工作,當所有應用斷掉連線後,將事件記錄下來;檢視事件細節:db2evmon –path ‘c:\temp’
相關文章
- 使用表查詢監控DB2的死鎖DB2
- DB2監控DB2
- db2 常見監控DB2
- db2死鎖監視器的使用(好用)DB2
- PostgreSQL之鎖監控指令碼SQL指令碼
- DB2日常監控指令碼DB2指令碼
- 監控DB2資料庫指令碼DB2資料庫指令碼
- Oracle-監控使用者鎖Oracle
- oracle 監控 DML DDL 鎖 的4個檢視Oracle
- 監控Oracle系統中鎖的常用指令碼Oracle指令碼
- DB2傻瓜1000問(十)10、DB2資料庫監控部分DB2資料庫
- 使用Rational Performance Tester實現DB2 效能測試和監控ORMDB2
- 【SQL監控】SQL完全監控的指令碼SQL指令碼
- DB2鎖問題DB2
- 詳細講解DB2資料庫效能監控的具體步驟DB2資料庫
- sybase空間監控和死鎖檢測語句
- APM效能監控軟體的監控型別服務及監控流程型別
- 黑盒監控、日誌監控
- mysql 的一個監控指令碼,監控heartbeatMySql指令碼
- DB2監控及自動化運維產品技術交流DB2運維
- DB2檢視鎖等待的SQLDB2SQL
- MySQLwwwhj8828com18088045700鎖分析和監控MySql
- PostgreSQL鎖等待監控珍藏級SQL-誰堵塞了誰SQL
- 6.prometheus監控--監控dockerPrometheusDocker
- db2查殺死鎖DB2
- 監控寶SQL Server效能監控的功能和配置SQLServer
- nagios的配置(監控端和被監控端)iOS
- mysql mon 的一個監控指令碼,監控heartbeatMySql指令碼
- 一種對雲主機進行效能監控的監控系統及其監控方法
- TiDB監控實現--存活監控TiDB
- 聊聊前端監控——錯誤監控篇前端
- nagios監控例項 -- PostgreSQL監控iOSSQL
- 運維監控系統 PIGOSS BSM的監控策略運維Go
- Zookeeper監控的原理
- Oracle索引的監控Oracle索引
- 使用Procwatcher監控Oracle資料庫鎖定Contention(上)Oracle資料庫
- linux下db2建庫指令碼pagesize>4k及常用監控LinuxDB2指令碼
- 轉:MySQL主從、字典死鎖、連線數的Python監控指令碼MySqlPython指令碼