定時任務優化

2021-08-01 09:57:46 字數 655 閱讀 2894

我們每天凌晨都要跑乙個定時任務,插入逾期記錄,並且重新計算使用者的逾期,待還,待收等各種統計。前兩天發現線上的逾期太多了,定時任務都跑到下午了。因此決定對定時任務進行優化,讓他在凌晨跑完。

定時任務是按照借條分期來處理的,每張借條分期插入逾期記錄,更新借條分期資訊,更新借條資訊,更新相關使用者的各種統計資訊。最先想到的優化辦法是採用多執行緒,同時跑他50個執行緒,同時把可能產生互相鎖表的使用者統計採用sql來對全體人員進行更新,就是update t_user set n_cnt=統計where n_cnt!=統計,但是同乙個借條的不同借條分期還是有可能搶鎖,因此在執行的時候,如果搶鎖,則再執行一遍,但是考慮到我們線上沒有太多分期的借條,因此還是想試一下。第二天跑了一下發現多執行緒有互相鎖表的情況,並且沒有跑完,只能放棄多執行緒的思路了。全部採用sql的方式來處理了,即insert into()select from方式,然後再對所有可能發生變化的資料進行統計,即update t_user set n_cnt=統計where n_cnt!=統計。第二天跑了一下,才用了4~5分鐘就跑完了全部的資料。

原來用oracle的時候,做賬都是在儲存過程中進行的,做賬從來沒有超時過,但是用mysql資料庫後,一方面不推薦用儲存過程,另一方面mysql客戶端中支援單步除錯的工具不多,因此只能退而求其次,採用應用伺服器做賬。但是應用伺服器和資料庫之間的時延也是個問題,注意了就好。

定時任務 定時任務弊端與優化方案

使用定時任務關閉超期未支付訂單,會存在的弊端 1.會有時間差,程式不嚴謹 10 39下單,11 00檢查不足1小時,12 00檢查,超過1小時多餘39分鐘 2.不支援集群 單機沒毛病,使用集群後,就會有多個定時任務 解決方案 只使用一台計算機節點,單獨用來執行所有的定時任務 3.會對資料庫全表搜尋,...

linux定時任務 at定時任務

at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...

at定時任務

at的守護程序每60秒檢查一次作業佇列,有作業時檢查作業,時間恰好達到,則執行作業。前提 保證atd程序已經啟動,檢查atd程序是否啟動 ps ef grep atd。atd的命令格式 at 選項 時間 ctrl d 結束at命令的輸入。選項 m 任務完成後給使用者傳送郵件,沒有標準輸出。i atg...