查看資料庫死鎖
① 北大青鳥java培訓:在Java程序中處理資料庫超時與死鎖
每個使用關系型資料庫的程序都可能遇到數據死鎖或不可用的情況,而這些情況需要在代碼中編程來解決;本文主要介紹與資料庫事務死鎖等情況相關的重試邏輯概念,此外,還會探討如何避免死鎖等問題,文章以DB2(版本9)與為例進行講解。
什麼是資料庫鎖定與死鎖鎖定(Locking)發生在當一個事務獲得對某一資源的「鎖」時,這時,其他的事務就不能更改這個資源了,這種機制的存在是為了保證數據一致性;在設計與資料庫交互的程序時,必須處理鎖與資源不可用的情況。
鎖定是個比較復雜的概念,仔細說起來可能又需要一大篇,所以在本文中,只把鎖定看作是一個臨時事件,這意味著如果一個資源被鎖定,它總會在以後某個時間被釋放。
而死鎖發生在當多個進程訪問同一資料庫時,其中每個進程擁有的鎖都是其他進程所需的,由此造成每個進程都無法繼續下去。
如何避免鎖我們可利用事務型資料庫中的隔離級別機制來避免鎖的創建,正確地使用隔離級別可使程序處理更多的並發事件(如允許多個用戶訪問數據),還能預防像丟失修改(LostUpdate)、讀「臟」數據(DirtyRead)、不可重復讀(NonrepeatableRead)及「虛」(Phantom)等問題。
隔離級別問題現象丟失修改讀「臟」數據不可重復讀「虛」可重復讀取NoNoNoNo讀取穩定性NoNoNoYes游標穩定性NoNoYesYes未提交的讀NoYesYesYes表1:DB2的隔離級別與其對應的問題現象在只讀模式中,就可以防止鎖定發生,而不用那些未提交只讀隔離級別的含糊語句。
湖北電腦培訓http://www.kmbdqn.cn/發現一條sql語句當使用了下列命令之一時,就應該考慮只讀模式了
② 查看sqlserver資料庫是否有死鎖信息
死鎖檢測
use master
Select * from sysprocesses where blocked<>0
--找到SPID
exec sp_lock
--根據SPID找到OBJID
select object_name(85575343)
--根據OBJID找到表名
③ 如何查詢db2資料庫表是否被鎖
1、首先點擊桌面上的SQL server資料庫。
④ mysql 查看死鎖
第一步,查出已鎖的進程
查侍者看正在鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
``
查看等待鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
``
INNODB_TRX表主要是包含了正在InnoDB引擎中執行的所有事務的信息,包括賀談散waiting for a lock和禪氏running的事務
select * from information_schema.innodb_trx
``
第二步,kill進程
show engin innodb status; //最後一次死鎖信息及sql
show open tables where in_use > 0 //查看鎖表