執(zhí)行更新命令 提示:1205 - Lock wait timeout exceeded; try restarting transaction笼恰,
where 字段都加了索引
UPDATE `xxxx`
SET `year_month` = '2024-02',
`product_code` = 'D05509',
`in_site_marketing_fee` = 0,
`off_site_marketing_fee` = 0,
`marketing_fee` = 0 ,
`cap` = 0,
`high_point_target` = 0 ,
`product_price` = 0.00,
`product_price_standard` = 0.00,
`product_price_reserve` = 0.00,
`source_currency` = 'EUR',
`target_currency` = 'USD',
`currency_rate` = 1.086094,
`rmb_currency_rate` = 7.721800,
`sale_channel` = 'FBA'
WHERE
(
`year_month` = '2024-02'
AND `product_code` = 'D05509'
AND `sale_channel` = 'FBA')
檢查鎖的情況
SELECT * FROM information_schema.INNODB_TRX;
4987483303 RUNNING 2024-02-01 01:52:33 2 5688838 select * from `v4_multi_platform_order_shipping_address` where (`multi_platform_order_id` = '5317011100523468413') limit 1 fetching rows 1 1 2 1136 1 0 0 READ COMMITTED 1 1 0 0 0 0
4987250474 RUNNING 2024-02-01 00:54:25 1 5668274 0 1 1 1136 1 0 0 READ COMMITTED 1 1 0 0 0 0
4987244335 RUNNING 2024-02-01 00:52:08 1 5667482 0 1 1 1136 1 0 0 READ COMMITTED 1 1 0 0 0 0
4987237781 RUNNING 2024-02-01 00:48:51 1 5666348 0 1 1 1136 1 0 0 READ COMMITTED 1 1 0 0 0 0
4987234624 RUNNING 2024-02-01 00:45:00 1 5665014 0 1 1 1136 1 0 0 READ COMMITTED 1 1 0 0 0 0
4987229365 RUNNING 2024-02-01 00:35:58 2 5661606 0 1 2 1136 1 0 0 READ COMMITTED 1 1 0 0 0 0
解決 刪除這些鎖就插入成功了
在MySQL中,通常情況下扔役,讀操作(如SELECT語句)不會阻塞寫操作(如UPDATE、INSERT词身、DELETE語句)厅目。然而,某些特定情況下法严,讀操作可能會間接導(dǎo)致寫操作被阻塞损敷,進(jìn)而影響數(shù)據(jù)的更新。這種情況可能由以下因素引起:
1. 鎖升級或元數(shù)據(jù)鎖
在某些情況下深啤,長時間運行的讀操作可能會導(dǎo)致鎖升級(例如從行級鎖升級到表級鎖)拗馒,或持有元數(shù)據(jù)鎖,從而間接阻塞寫操作溯街。特別是在涉及到表結(jié)構(gòu)更改(如ALTER TABLE)的場景中诱桂,元數(shù)據(jù)鎖更常見。
2. 事務(wù)隔離級別
在某些較高的事務(wù)隔離級別(如可重復(fù)讀REPEATABLE READ或串行化SERIALIZABLE)呈昔,長時間運行的讀事務(wù)可能會創(chuàng)建一致性視圖挥等,保持對讀取數(shù)據(jù)的鎖,從而阻塞對相同數(shù)據(jù)的寫操作堤尾。
3. InnoDB行鎖定
InnoDB通過索引來對數(shù)據(jù)行進(jìn)行鎖定肝劲。如果讀操作使用了不合適的索引或進(jìn)行了全表掃描,可能會間接影響到寫操作嘗試鎖定的行。
4. 死鎖
雖然不太常見辞槐,但是在某些復(fù)雜的事務(wù)場景中掷漱,讀操作可能與其他寫操作形成死鎖,尤其是在涉及多個表或行的復(fù)雜查詢中榄檬。
解決辦法和預(yù)防措施:
優(yōu)化查詢:確保查詢盡可能高效卜范,使用適當(dāng)?shù)乃饕苊馊頀呙琛?控制事務(wù)大新拱瘛:避免長時間運行的事務(wù)海雪,確保事務(wù)盡可能短,以釋放鎖資源犬缨。
評估隔離級別:合理設(shè)置事務(wù)隔離級別喳魏,根據(jù)應(yīng)用的具體需求進(jìn)行權(quán)衡。
監(jiān)控和分析鎖:定期監(jiān)控數(shù)據(jù)庫的鎖情況怀薛,分析死鎖日志刺彩,找出導(dǎo)致鎖問題的根本原因。