Mysql插入2 6億條垃圾資料後會發生什麼

2021-08-20 15:07:45 字數 1244 閱讀 2997

今天下午業務人員發現某功能無響應(該功能一天前上線),技術人員初步診斷後發現是某個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 插入語句 裡面的資料...