今天下午業務人員發現某功能無響應(該功能一天前上線),技術人員初步診斷後發現是某個db不太正常,db為mysql 5.7.18
。
登陸db伺服器後,進行檢測後發現了如下問題:
2個事務狀態為inserting,資料量約為2.65億,事務開始時間為昨晚23點
dw_repayment_monitor空間擴充套件到73g
事務操作的表占用空間急劇擴大
binlog設定的過期時間為10天,檔案分片大小為100m。/var/log/mysql
下產生了大量的binlog,寫滿了伺服器上的一塊日誌磁碟
top
命令後發現cpu全被mysqld占用
23g記憶體全部是buff/cache,記憶體全部耗盡
首先,緊急stop了問題應用,避免問題公升級。
kill掉trx_mysql_thread_id中對應的mysql thread, kill之後,show processlist
已經無法查到這兩個thread.
兩個事務開始進行rollback
將這些天的binlog轉移到其他磁碟,確保mysql binlog能夠繼續寫入
嘗試處理掉兩個事務,各種折騰之後,宣告失敗。
table is
locked
by the server
由於自己沒有這種情況的處理經驗,目前已經無法進一步處理,因此上報至了cto,避免進一步產生風險。
簡要描述情況,cto初步檢測後,給出a/b方案:
a:先等待正常回滾
b:如果無法回滾完,考慮停止mysql. 使用備份資料啟用備庫
由於時間還來得及,採用了a方案,等待db自然回滾。接下來就是不斷檢測事務rollback情況,2個rollback事務歷經5個小時,到晚上9點終於回滾結束。在此期間,其他同事找到了相應的程式bug,乙個儲存過程中的死迴圈自昨晚23點開始瘋狂往表中插入資料。
由於這張表目前達到73g,因此刪除再重建了此表,利用程式進行資料恢復。
平時雖然能處理些mysql常見問題,但很多極端情況還是無法處理。一方面是mysql技能深度不夠,另一方面也是經驗的缺失。本文僅記錄本次過程,同時也積累了些mysql待學習知識點,其他思考不再撰寫。
MySQL優化 1億條資料效率COUNT
最近發現了乙個mysql快速匯入資料方法load data infile,具體參考這個文章。下面用幾條命令來給大家看看,效率結果。簡單說下 1.txt 開始只有10萬資料,後來用vim 新增到了2000萬行,用windows下的編輯器直接卡機的,windows下安裝gvim可以的。資料表型別inno...
mysql儲存過程案例 插入100條資料
mysql的儲存過程 1 概述 1 是一種用來處理資料的方式,儲存過程是一種沒有返回值的函式 2 儲存過程和函式是事先經過編譯並儲存在資料庫的一段sql語句的集合,呼叫儲存過程和函式可以簡化開發人員的許多任務作,減少時間在資料庫和應用伺服器直接的傳輸,能夠提高資料處理的效率 3 儲存過程和函式的區別...
pymysql單條插入資料和批量插入資料
一 單條插入資料 usr bin python3 import pymysql 開啟資料庫連線 db pymysql.connect localhost testuser test123 testdb 使用cursor 方法獲取操作游標 cursor db.cursor sql 插入語句 裡面的資料...