今天通路程式時報如下異常:
主要原因如下:
資料庫所在磁盤空間不夠所緻。
于是登入資料庫所在的伺服器,檢視了下資料庫所占的磁盤空間如下:
可以看到磁盤的33G,被全部占滿了,于是就開始了資料庫表的清理工作。
1.首先執行以下sql語句,查詢資料庫中各個表所占空間大小,輸出按降序排序
SELECT TABLE_NAME, CONCAT(TRUNCATE(data_length/1024/1024,2),' MB') AS data_size,
CONCAT(TRUNCATE(index_length/1024/1024,2),' MB') AS index_size
FROM information_schema.tables WHERE TABLE_SCHEMA = 'olderdb'
GROUP BY TABLE_NAME
ORDER BY data_length DESC;
輸出結果如下:
看見了吧,一億多條資料,占用了十幾G的記憶體空間。
那麼如何删除了,首先檢視表字段:
發現sttime字段是按照時間順序插入的,這就簡單了,直接按照時間段删除資料就可以了。具體的删除方法如下:
按時間段進行删除操作,sql如下:
① 使用BETWEEN關鍵字根據時間字段删除一定時間内的記錄
DELETE FROM 表名 WHERE 時間字段 BETWEEN 開始時間 AND 結束時間
示例:
DELETE FROM tb WHERE CreateTime BETWEEN '2017-01-01 00:00:00' AND '2017-02-01 00:00:00'--删除tb表中2017年1月1日到2017年2月1日的資料
② 使用時間字段比較大小來确定删除範圍
--文法:DELETE FROM 表名 WHERE 時間字段>=開始時間 AND 時間字段<=結束時間
示例:
DELETE FROM tb WHERE CreateTime>='2017-01-01 00:00:00' AND CreateTime<='2017-02-01 00:00:00'
ok,執行删除語句比較費時,資料量大的話可能要删幾個小時,像我這種上G的資料量估計得删除一天了。
注意:
本文介紹的隻是遇到突發狀況,像我這種磁盤撐爆了,隻能臨時抱佛腳,在實際開發中,都是寫觸發器的,每隔一段時間調用下觸發器背景删除就完了。