資料庫鎖死,連線池被不可用故障回顧

2021-10-10 02:34:26 字數 760 閱讀 3153

1.雙十一高峰前的新功能上線,距離封版還有兩天時間,準備把新功能版本資料上線。測試環境已測試通過,準備上線,開始灰度環境驗證,也是沒問題。檢查資料也是正常,開始正式發布,因為排名需要重新計算,清除生產快取資料。過了10分鐘監控開始報警,服務不可用,db資料庫也開始報警,資料庫連線池配置200,一啟動完成資料庫連線池就被用完。

首先想到是新功能版本**的問題,馬上聯絡運維,**回滾到歷史正常的版本,開始觀察。發現服務已經起不來了。連續dba檢視資料庫連線情況,發現資料庫已經連不上了,只能重啟資料庫。資料庫啟動完成之後再次啟動服務,已經可以正常啟動,先啟動乙個節點,發現資料庫連線又全部占用。服務又可用。歸滾,重啟**都無效!!!!

第一次開始想到是分布式鎖的問題,是不是鎖時間太長,執行的事務沒有釋放,先排查**。

同步檢視監控慢sql,運維開始查占用連線的執行的sql,最後發現是計算排行榜的sql執行一直占用連線。問題定位到開始排查**,排名榜的資料一直都是做t+1計算,為啥這次會出這個問題,開始review**。發現排行榜資料讀的是快取資料,快取不存在開始計算排行榜資料。這裡是巨大坑,不應該在此計算,sql在資料量較少時候並沒有發現問題,(資料每月/100多萬)現在資料量已經到700多萬的資料。再次檢查其實這裡**是存在很多問題,快取失效,sql複雜,也是遲早會暴露出來。一次快取刪除導致問題提前暴露出來。

從問題發現到解決花了兩個多小時時間,活生生的經驗啊。

首先把計算邏輯先乾了,不做複雜sql排名操作,優化**。

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...

資料庫連線池

實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...

資料庫連線池

資料庫連線池概述 資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。資料庫連線池負責分配 管理和釋放資料庫連線,它允許應用程式重複使用乙個現有...