1、您也可以使用mysqladmin processlist語句得到此信息。如果您有SUPER權限,您可以看到所有線程。否則,您只能看到您自己的線程(也就是,與您正在使用的MySQL賬戶相關的線程)。
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設計、網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務西峰,10年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108
2、用Profiler里面的Locks-Deadlockgraph監(jiān)控看看,如果看到了死鎖圖,就可以比較形象地展現(xiàn)死鎖發(fā)生的過程,還可以看到鎖的具體類型和過程里面的語句,對你診斷會有幫助。
3、如何避免發(fā)生死鎖收集死鎖信息:利用命令 SHOW ENGINE INNODB STATUS查看死鎖原因。調試階段開啟 innodb_print_all_deadlocks,收集所有死鎖日志。減少死鎖:使用事務,不使用 lock tables 。保證沒有長事務。
4、利用 gdb 找到所有線程信息,查看每個線程中持有全局鎖對象,輸出對應的會話 ID,為了便于快速定位,我寫成了腳本形式。
5、sp_lock,sp_who,活動的用戶查看,原因是讀寫競爭資源。
6、getConnection().preparedStatement(show processlist).execute();當然這是JAVA的寫法。
全局鎖 顧名思義,全局鎖就是對整個數(shù)據(jù)庫實例加鎖。MySQL提供了一個加全局讀鎖的方法,命令是Flushtableswithreadlock(FTWRL)。
元數(shù)據(jù)鎖,在加鎖過程中是系統(tǒng)自動控制的,無需顯示使用,在訪問一張表的時候會自動加上,MDL鎖主要作用是維護表元數(shù)據(jù)的數(shù)據(jù)一致性,在表上有活動事務的時候,不可以對元數(shù)據(jù)進行寫入操作。
詳細介紹:表級鎖定(table-level)表級別的鎖定是MySQL各存儲引擎中最大顆粒度的鎖定機制。該鎖定機制最大的特點是實現(xiàn)邏輯非常簡單,帶來的系統(tǒng)負面影響最小。所以獲取鎖和釋放鎖的速度很快。
mysql鎖分為共享鎖和排他鎖,也叫做讀鎖和寫鎖。讀鎖是共享的,可以通過lock in share mode實現(xiàn),這時候只能讀不能寫。寫鎖是排他的,它會阻塞其他的寫鎖和讀鎖。從顆粒度來區(qū)分,可以分為表鎖和鎖兩種。
鎖的分類 根據(jù)加鎖范圍,MySQL 里面的鎖可以分成 全局鎖 、 表級鎖 、 行鎖 三類。
MySQL 里面表級別的鎖有兩種:一種是表鎖,一種是元數(shù)據(jù)鎖(meta data lock,MDL)。表鎖 表鎖的語法是 lock tables … read/write。
MySQL中的鎖,按照鎖的粒度分為:全局鎖,就鎖定數(shù)據(jù)庫中的所有表。表級鎖,每次操作鎖住整張表。行級鎖,每次操作鎖住對應的行數(shù)據(jù)。
mysql中表鎖和行鎖的區(qū)別行鎖特點:鎖的粒度小,發(fā)生鎖沖突的概率低、處理并發(fā)的能力強;開銷大、加鎖慢、會出現(xiàn)死鎖加鎖的方式:自動加鎖。
MySQL各存儲引擎使用了三種類型(級別)的鎖定機制:表級鎖定,行級鎖定和頁級鎖定。詳細介紹:表級鎖定(table-level)表級別的鎖定是MySQL各存儲引擎中最大顆粒度的鎖定機制。