mysql查詢因為索引導致表阻塞或死鎖

2021-09-23 07:43:39 字數 615 閱讀 2171

今天在生產上對錶進行select查詢,導致阻塞死鎖,解決思路

執行show processlist;

或者以下sql

select * from information_schema.processlist;

我們線上的問題是執行select操作時,建立索引所以導致死鎖,還有select太複雜查詢時間過長導致阻塞

通過show processlist指令,發現有好多執行緒command處於lock狀態。最長的time欄位顯示達到33772seconds,導致系統應用卡頓情況嚴重,

為了解決問題,在mysql立即呼叫kill指令,殺掉程序

說明:connection選項,kill的時候,將連線也斷掉,而query選項,kill的過程只是將該指令殺掉,連線還保持。 kill指令不指定connection或者query選項時,預設是connection。

這只是解決系統卡頓問題,源頭還是sql本身問題,複雜度高,所查詢的字段基本沒走索引,最後是通過把sql拆分,並且把邏輯轉移到程式層面,而不是在資料庫操作,並且把查詢頻率高的字段新增索引,

參考(

mysql建立索引導致鎖表阻塞查詢

慢查詢不一定需要duri資料來源,資料庫自帶相應的記錄表 information schema.processlist show processlist 或者 select from information schema.processlist where command not in sleep ...

mysql 為大表新增索引,導致超時的解決辦法

簡單的建立索引語句 create unique index inxname on table a col 如果表資料量不大,沒有問題,但是資料超過千萬,可能你等了半天,卻告知你超時了。網上查到解決方案 1.複製表a 的資料結構 不複製資料 create table b like a 2.表b加上你需...

不會使用索引,導致全表掃瞄情況

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...