mysql查詢死鎖的sql mysql死鎖出現(xiàn)的原因?
mysql死鎖出現(xiàn)的原因?MySQL有三級(jí)鎖:頁級(jí)、表級(jí)和行級(jí)。表級(jí)鎖:成本低,鎖定速度快;無死鎖;鎖粒度大,鎖沖突概率最高,并發(fā)性最低。行級(jí)鎖:成本高、鎖定慢、死鎖、最小鎖定粒度、鎖沖突概率最低、并
mysql死鎖出現(xiàn)的原因?
MySQL有三級(jí)鎖:頁級(jí)、表級(jí)和行級(jí)。
表級(jí)鎖:成本低,鎖定速度快;無死鎖;鎖粒度大,鎖沖突概率最高,并發(fā)性最低。
行級(jí)鎖:成本高、鎖定慢、死鎖、最小鎖定粒度、鎖沖突概率最低、并發(fā)性最高。
頁鎖:表鎖和行鎖之間的開銷和鎖定時(shí)間是有界的;會(huì)發(fā)生死鎖;鎖粒度是有界的,表鎖和行鎖之間是有界的,并發(fā)性一般
所謂死鎖<死鎖>:是指兩個(gè)或兩個(gè)以上進(jìn)程因爭用而互相等待的現(xiàn)象執(zhí)行過程中的資源。如果沒有外力,它們就無法前進(jìn),如果系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)出現(xiàn)死鎖,這些永遠(yuǎn)等待對方的進(jìn)程稱為死鎖進(jìn)程。表級(jí)鎖不會(huì)產(chǎn)生死鎖。所以死鎖的解決方案主要是InnoDB,這是最常用的一種。
死鎖的關(guān)鍵是兩個(gè)(或更多)會(huì)話的鎖定順序不一致。
那么,解決死鎖問題的關(guān)鍵是:讓不同的會(huì)話按順序鎖定
1。檢查表是否被鎖定:(1)直接在MySQL命令行上執(zhí)行:show engine InnoDB statusg。(2) 查看導(dǎo)致死鎖的SQL語句,分析索引,然后優(yōu)化SQL。(3) 然后show processlist查看導(dǎo)致死鎖的SQL語句。(4) 顯示狀態(tài),如“%lock%.2”。要查看表的鎖定狀態(tài)并結(jié)束死鎖:(1)要查看表的鎖定狀態(tài):show open tables where in_uuse> 0此語句記錄當(dāng)前鎖定表狀態(tài)。(2) 查詢進(jìn)程:show processlist查詢表中被鎖定的進(jìn)程;查詢對應(yīng)的進(jìn)程killid。(3) 分析鎖表的SQL:分析對應(yīng)的SQL,向表中添加索引、公共字段索引、表關(guān)聯(lián)字段索引。(4) 查看要鎖定的對象:從信息中選擇*SCHEMA.INNODB鎖。(5)查看等待鎖的東西:從信息中選擇*SCHEMA.INNODB鎖定等待