1、在做資料庫操作時,有時會因為自己的粗心或者程式設計上的缺陷導致鎖表,在mysql中檢視鎖表和解鎖的步驟如下:
//1.檢視當前資料庫鎖表的情況
select * from information_schema.innodb_trx;
//2.殺掉查詢結果中鎖表的trx_mysql_thread_id
kill trx_mysql_thread_id
2、另外一種查詢鎖方法1、查詢是否鎖表
show open tables where in_use > 0;
2、查詢程序
show processlist
查詢到相對應的程序===然後 kill id
補充:檢視正在鎖的事務
select * from information_schema.innodb_locks;
檢視等待鎖的事務
select * from information_schema.innodb_lock_waits;
遇到的問題:
這個查詢語句導致了鎖表問題,對它進行優化
select ba.*,ac.iseffective
from tb_yx_base_activation ba,tb_yx_activation_code ac
where ba.id = ac.baseactivationid and ba.`status` = 2 and ac.iseffective < 3;
發生鎖表的原因:
多表聯合查詢時,使用where和and組合進行查詢會導致笛卡爾積掃瞄
解決方式:
使用join連線,並且不要使用ba.*
優化後的sql語句:
select ba.id,ba.`type`,ba.newuseronly,ba.name,ba.channel,ba.codecount,ba.codeprefix,ba.activecount,ba.`status`,ba.validstarttime,ba.validendtime,ba.creatuser,
ba.updateuser,ba.createtime,ba.updatetime,ba.isedit,ac.iseffective
from tb_yx_base_activation ba
left join tb_yx_activation_code ac on ba.id = ac.baseactivationid
where ba.`status` = 2 and ac.iseffective < 3;
MySQL優化 SQL及索引優化(二)
對支付時間建立索引 create index idx paydate on payment payment date 查詢 select max payment date from payment 在一條sql中同時查出2006年和2007年電影的數量 優化count 函式 對count函式使用的列...
MySQL解決鎖表問題
1.為何會鎖表 首先我們了解一下資料庫查詢機制,首先我們用工具進行連線查詢時,會建立乙個connection,此時資料庫會將查詢語句解析成一棵 樹 各個引擎底層的結構不一樣,mysql的話在innodb用的是b tree,俗稱b 樹,那麼再到執行器進行處理,最後返回給客戶端。鎖表的原因 當多個連線 ...
MySQL鎖表問題處理
mysql中鎖表導致的報錯可以找到正在執行的導致鎖表的程序,kill 掉程序即可解決。select from information schema.innodb trx 一般情況下長期處於running狀態的程序基本就是導致鎖表的程序。例如該事務程序涉及多個sql語句執行,執行到一半時遇到其他事務正...