我的物聯網專案 二十七 分布式鎖粗心導致大量阻塞

2021-09-30 15:52:29 字數 1010 閱讀 6040

### error updating database.  cause: com.mysql.jdbc.exceptions.jdbc4.mysqltransactionrollbackexception: lock wait timeout exceeded; try restarting transaction

嚇了大跳,居然還有鎖時間過長導致後面的業務等待時間較長斷開連線拋異常,看了下資料庫控制台基本全黃,都是些執行時間較長正在執行的程序。

找到執行這條sql的業務**,了解當時的業務場景:

t_affairsevent事件表

簡單描述下,這個事件表是用來做分布式事務,利用分布式排程來輪詢,然後處理相關業務,具體可以看前面寫過 我的物聯網專案(八) 簡單分布式排程,前面有講到過利用setnx()來實現分布式鎖,每次通過setnx()同乙個標識,比如id來搶占鎖,前面的業務場景沒有問題,但是在這個業務場景裡面問題來了,因為同時3個排程來分別執行id為1,2,3的3條記錄都可以搶的到,然後都去執行如下sql:

update t_partner_bymonth set .... where partnerid=10001 ,這樣的話會導致多個sql執行緒同時在執行同一記錄,而且本身update就帶鎖行,所以導致執行速度巨慢甚至阻塞。

高併發update時,最先獲得鎖的會優先執行,其它幾條處於行鎖等待狀態,等第乙個執行完畢,行鎖釋放,由下一條語句獲取鎖進行更新,當其它會話等待的時間達到innodb_lock_wait_timeout(預設是50秒),這些update就會斷開,不再執行。

像這種業務場景,將鎖標識換成partnerid就可以避免剛才那種情況。

jmeter(二十七)分布式壓測注意事項

一 壓測機 1 數量 成本 無論是從成本角度還是維護的難易方面,壓測機的數量,適量就好。舉個例子,8c16g的一台伺服器,部署jmeter後,根據我個人的測試比對資料,配置 1500個執行緒數,最好。太多了效能損耗較大,延時高 太少了又浪費。2 controller agent 模擬的併發執行緒數超...

我的物聯網專案之推廣策略

這個裡面從最開始推廣入口來說,現在想來其實有點意淫,也正是我前面所說,路要走過才知道,我們現在就走趟雷。推廣人員全部由外面兼職或者全職做為主力軍,當初給他們的政策就是成功推廣一輛搖搖車提成50元 聽說有時候具體情況也有提成100元的 很多推廣人員看到這麼高的利潤,著實掄起衣袖實幹了一把。注意,這個裡...

我的物聯網專案之線下之戰

搖搖車這個行業在中國至少已經存在了7,8年以上,這期間也越來越多的投放商加入到這個隊伍裡面,說明這個行業本身是剛性需求,不要小看這一塊錢現金流,如果投放的數量達到一定程度,每天的現金收入是非常可觀的。這麼來算 粗略的算 投放100輛車出去,每輛車每天消費15次也就是說每天賺15塊錢,每天總收入有15...